Установка mysql на Ubuntu 16.04 (без привилегий пользователя root)

На моем сервере 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-доступ для создания, обновления?

1
задан 18 January 2017 в 13:16

2 ответа

Наконец-то я нашел обходной путь. Вот что я сделал

Удаляет 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-пользователя).

5
ответ дан 23 May 2018 в 02:19

Это из-за того, что пользователь 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 и вашим паролем.

-1
ответ дан 23 May 2018 в 02:19
  • 1
    когда я пытаюсь войти в систему после команды --skip-grant-tables, она дает мне эту ошибку ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) – user3177667 18 January 2017 в 14:58
  • 2
    Как с этой командой sudo mysqld --skip-grant-tables --bind-address=127.0.0.1. – San Lin Naing 18 January 2017 в 15:20
  • 3
    Я отредактировал ответ с помощью конфигурации my.cnf. – San Lin Naing 18 January 2017 в 16:13
  • 4
    Спасибо, @San. Я заставляю его работать, просто чистив все папки mysql. см. мой ответ. – user3177667 18 January 2017 в 16:29
  • 5
    Хороший ответ. Хорошо. – San Lin Naing 18 January 2017 в 21:36

Другие вопросы по тегам:

Похожие вопросы: