Настройка MySQL/MariaBD
Решаю проблемы с MySQL / MariaDB по мере их возникновения. Не всегда результативно, но всё же…
В журнале СУБД попадается вот такая запись:
Jan 1 00:00:00 ubuntu mysqld[1757]: 190213 0:00:00 [Warning] 'user' entry 'root@localhost' has both a password and an authentication plugin specified. The password will be ignored.
Что это означает? Для авторизации пользователя root@localhost используется плагин, готорый авторизует этого
пользователя без запроса пароля. Посмотрим плагины, подключенные к этому пользователю:
> SELECT user, host, plugin FROM mysql.user;
+--------+-----------+-------------+
| user | host | plugin |
+--------+-----------+-------------+
| root | localhost | unix_socket |
| user | localhost | |
+--------+-----------+-------------+
2 rows in set (0.00 sec)
Видим, что у пользователя root есть используемый плагин unix_socket. Этот плагин позволяет авторизоваться в СУБД
без ввода пароля, если в системе у пользователя повышенные привелегии (например, под sudo).
В последних версиях MySQL/MariaDB под пользователем root по другому и не авторизуешься, только с повышенными
привелегиями.
Данный способ (с использованием плагина unix_socket без ввода пароля) необходим для выполнения некоторых сценариев
запуска и мониторинга службы MySQL/MariaDB.
Теоретически, этот способ авторизации можно отключить:
UPDATE mysql.user SET plugin = '' WHERE plugin = 'unix_socket';
FLUSH PRIVILEGES;
Но в некоторых случаях могут возникнуть проблемы при перезагрузке служб СУБД.
Как решение, предлагают создавать несколько пользователей и для root использовать авторизацию по unix_socket,
а для второго - через TCP с использованием логина и пароля.
CREATE USER admin@localhost IDENTIFIED BY 'your_password';
GRANT ALL ON *.* TO admin@localhost WITH GRANT OPTION;
или
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'your_password' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED VIA unix_socket WITH GRANT OPTION;
В последнем случае нужно понимать, что в MySQL localhost и 127.0.0.1 - это не одно и то же.
Следующая проблема:
Jan 1 00:00:00 ubuntu mysqld[1757]: 190213 0:00:00 [Note] InnoDB: 128 rollback segment(s) are active.
Обычно, это примечание вылезает после обновления СУБД и это происходит из-за смены форматов хранения InnoDB. Вероятно, в предыдущей версии сервера MySQL использовался формат файла Barracuda, а после обновления вы используете формат хранения Antelope.
Посмотреть текущий формат можно с помощью команды:
show variables like '%innodb_file%';
+--------------------------+----------+
| Variable_name | Value |
+--------------------------+----------+
| innodb_file_format | Antelope |
| innodb_file_format_check | ON |
| innodb_file_format_max | Antelope |
| innodb_file_per_table | ON |
+--------------------------+----------+
4 rows in set (0.00 sec)
Полезные ссылки:
Евгений Вдовенко
Физик по образованию, занимаюсь веб-разработкой на PHP с 2013 года. Нравится ковырятся в Zend Framework/Expressive и Joomla CMS/Framework. В процессе разборок с Python. Подумываю посмотреть Go. Считаю PostgreSQL крутым продуктом и внедряю его везде, где могу.