Как сбросить пароль mysql на CentOS

Подключаемся к bash и вводим команды:
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

MYSQL on update TIMESTAMP and DATETIME не работает?

Был со мной случай, когда 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.  

Деактивировать товар если не активны SKU

Кастомный обмен с 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);
        }
    }


p.s. для оптовой компании решение зашло.