На моем сервере ubuntu 16.04 я пытаюсь установить mysql следующей командой
sudo apt-get install mysql-server
Каждый раз, когда он застревает в сообщении:
update-alternatives: using /etc/mysql/mysql.cnf to provide /etc/mysql/my.cnf (my.cnf) in auto mode
Renaming removed key_buffer and myisam-recover options (if present)
Checking if update is needed.
This installation of MySQL is already upgraded to 5.7.16, use --force if you still need to run mysql_upgrade
Мне нужно нажмите Ctrl + z, чтобы остановить его. Я проверил файл журнала в /var/log/mysql/error.log, и последние 10 строк показывают этот результат:
2017-01-18T09:07:30.329930Z 0 [Note] InnoDB: Buffer pool(s) load completed at 170118 9:07:30
2017-01-18T09:07:30.335086Z 0 [Warning] Failed to set up SSL because of the following SSL library error: SSL context is not usable without certificate and private key
2017-01-18T09:07:30.335137Z 0 [Note] Server hostname (bind-address): '127.0.0.1'; port: 3306
2017-01-18T09:07:30.335157Z 0 [Note] - '127.0.0.1' resolves to '127.0.0.1';
2017-01-18T09:07:30.335216Z 0 [Note] Server socket created on IP: '127.0.0.1'.
2017-01-18T09:07:30.349491Z 0 [Note] Event Scheduler: Loaded 1 event
2017-01-18T09:07:30.349749Z 0 [Note] Execution of init_file '/var/lib/mysql-files/tmp.sJ5rMac6mK' started.
2017-01-18T09:07:30.350543Z 1 [ERROR] 1396 Operation ALTER USER failed for 'root'@'localhost'
2017-01-18T09:07:30.350737Z 0 [Note] Execution of init_file '/var/lib/mysql-files/tmp.sJ5rMac6mK' ended.
2017-01-18T09:07:30.350864Z 0 [Note] mysqld: ready for connections.
После перезагрузки я вошел в mysql с помощью mysql -u root. в mysql я не могу выполнять никаких операций, ничего не создавая нового пользователя или ничего не изменяя. Я просто могу просмотреть базы данных по умолчанию
information_schema test, когда я набрал show grants, он показывает мне следующий результат
+--------------------------------------+
| Grants for @localhost |
+--------------------------------------+
| GRANT USAGE ON *.* TO ''@'localhost' |
+--------------------------------------+
. Это довольно странный. Чтобы убедиться в этом, я проверил таблицу user_privileges в information_schema, которая дает мне это:
+----------------+---------------+----------------+--------------+
| GRANTEE | TABLE_CATALOG | PRIVILEGE_TYPE | IS_GRANTABLE |
+----------------+---------------+----------------+--------------+
| ''@'localhost' | def | USAGE | NO |
+----------------+---------------+----------------+--------------+
Как я могу включить root-доступ для создания, обновления?
Наконец-то я нашел обходной путь. Вот что я сделал
Удаляет mysql с помощью sudo apt purge mysql* Удалить папку /etc/mysql Удалить папки /var/lib/mysql, /var/lib/mysql-files, /var/lib/mysql-kering. Перезагрузка. Установите mysql, используя sudo apt-get install mysql-server. В этот раз mysql был успешно установлен без застревания. Во время установки он запросил у меня пароль root, и я предоставил его. После установки я вошел в систему с помощью root с моим предоставленным паролем. На этот раз создание нового пользователя, обновление все отлично работает. Теперь вот результат show grants:
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
Хотя я до сих пор не знаю, почему в первый раз это не сработало. Я попытался удалить только файл cnf, но это не сработало. Когда я удалил все папки mysql внутри /var/lib, тогда он сработал. Поэтому я предполагаю, что в каталоге /var/lib/msyql был некоторый файл, который помешал создать любого нового пользователя (даже root-пользователя).
Это из-за того, что пользователь root не создан в MySQL. Но я не знаю почему. Попробуйте вставить «root» пользователя в таблицу mysql.user.
Во-первых, остановите сервер mysql.
sudo /etc/init.d/mysql stop
Чтобы запустить MySQL с опцией --skip-grant-tables, попробуйте настроить
sudo vi /etc/mysql/my.cnf
Добавьте следующую строку под [mysqld].
skip-grant-tables
Запустите сервер MySQL снова.
sudo /etc/init.d/mysql start
Войти в MySQL
mysql -u root
Вставьте пользователя «root» с вашим желаемым паролем.
mysql> INSERT INTO mysql.user VALUES ('localhost','root',password('newpassword'),'Y','Y ','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y', 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','' ,'','','',0,0,0,0);
mysql> INSERT INTO mysql.user VALUES ('127.0.0.1','root',password('newpassword'),'Y','Y ','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y', 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','' ,'','','',0,0,0,0);
newpassword должно быть изменено на ваш желаемый пароль. mysql> exit
Удалите skip-grant-tables в конфигурации my.cnf для использования аутентификации.
После этого перезагрузите MySQL-сервер обычным способом.
sudo /etc/init.d/mysql restart
Попробуйте для входа в систему с root и вашим паролем.