1. Остановим mysql:
bash> systemctl stop mysqld
2. Установим опцию для mySQL
bash> systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
3. Запустим mysql с обновлёнными настройками
bash> systemctl start mysqld
4. Авторизуемся в mysql под root
bash> mysql -u root
5. Обновим root пароль используя следующие команды (замените ТУТНОВЫЙПАРОЛЬ на ваш пароль)
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('ТУТНОВЫЙПАРОЛЬ') WHERE User = 'root' AND Host = 'localhost';
mysql> FLUSH PRIVILEGES;
mysql> quit
*** Для mysql 5.7.6 и старше нужно использовать
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'ТУТНОВЫЙПАРОЛЬ';
mysql> FLUSH PRIVILEGES;
mysql> quit
6. Остановим mysql
systemctl stop mysqld
7. Уберём настройку mySQL
systemctl unset-environment MYSQLD_OPTS
8. Запустим mysql в стандартном режиме
systemctl start mysqld
Попробуем авторизоваться с новым паролем:
7. mysql -u root -p
Был со мной случай, когда 3-ое суток я искал царапину на попе у слона... а оказалось в доке MYSQL всё написано предельно ясно! Предыстория: загружаю остатки по товарам на складах из 1С в базу сайта через файл XML, если нет остатков по товару - тогда нужно удалять то, что осталось на сайте. Решил сделать метку последнего обновления и буду чистить что давно не обновлялось... А вот и нет! Пришлось ломать мозг.... в общем вот цитата из доки MYSQL:
An auto-updated column is automatically updated to the current timestamp when the value of any other column in the row is changed from its current value. An auto-updated column remains unchanged if all other columns are set to their current values. To prevent an auto-updated column from updating when other columns change, explicitly set it to its current value. To update an auto-updated column even when other columns do not change, explicitly set it to the value it should have (for example, set it to CURRENT_TIMESTAMP).
Если кратко и по делу: команда ON UPDATE работает для типов TIMESTAMP и DATETIME только если любая другая ячейка изменилась(!) в любом другом случае следует задать своё значение поля в UPDATE.
Кастомный обмен с 1С впилился в дефолтный компонент catalog.import.1c, но у нас несколько БД сливают информацию о товарах, поэтому из обмена было не понятно какие товары должны отображаться, а какие нет.
Вот пример sql запроса, который включает элемент, у которого хоть 1 активный SKU. Он же делает наоборот: отключает элемент если все SKU неактивны.
/**
* catalog_import_1C_finish
* - событие, вызываемое после окончания обмена одним XML-файлом.
* @param mixed $arParams - Параметры подключения компонента обмена.
* @param mixed $ABS_FILE_NAME - Полный путь к XML-файлу обмена.
* @return void
*/
function catalog_import_1C_finish($arParams, $ABS_FILE_NAME)
{
if(stripos($ABS_FILE_NAME,"offers.xml"))
{
global $DB;
$strSql = "CREATE TEMPORARY TABLE `sku_active`
SELECT `ID`,count(DISTINCT CASE WHEN `ACTIVE` = 'Y' THEN `ID` END) as `COUNT`, substr(`XML_ID`, 1, INSTR(`XML_ID`, '#')-1) AS `PARENT_XML_ID`
FROM `b_iblock_element`
WHERE `XML_ID` LIKE '%#%'
GROUP BY `PARENT_XML_ID`;
";
$DB->Query($strSql, true);
$strSql = "UPDATE `b_iblock_element` AS `T1`
SET `T1`.`ACTIVE` = (SELECT CASE WHEN `T2`.`COUNT`>0 THEN 'Y' ELSE 'N' END AS `ACTIVE` FROM `sku_active` AS `T2` WHERE `T1`.`XML_ID` = `T2`.`PARENT_XML_ID`)
WHERE `T1`.`XML_ID` NOT LIKE '%#%'
";
$DB->Query($strSql, true);
}
}