4

Мне нужно перезапустить MySQL в Ubuntu 16.04 с --skip-grant-tables , но либо я не знаю свой пароль root, либо он не работает. Как я могу установить --skip-grant-tables без пароля?

Когда я пытаюсь сделать это как обычный пользователь:

mysqld --skip-grant-tables

Я вижу это:

mysqld: Can't change dir to '/var/lib/mysql/' (Errcode: 13 - Permission denied)

Итак, я вырыл этот пример из /etc/init.d/mysql и добавил параметр --skip-grant-tables :

su - mysql -s /bin/bash -c "/usr/sbin/mysqld --skip-grant-tables"
Password: 
su: Authentication failure

Так что su не работает и пароль root тоже не работает. Я также попробовал это:

sudo su - mysql -s /bin/bash -c "/usr/sbin/mysqld --skip-grant-tables"
No directory, logging in with HOME=/

Как я могу запустить mysql с --skip-grant-tables?

2 ответа2

9

Если вы не знаете свой пароль root (или ошибка типа 'ERROR 1045 (28000): Access denied for user 'root'@'localhost' запрещает доступ), вы можете получить доступ, добавив эту опцию в файл конфигурации MySQL. Сначала откройте его для редактирования:

sudo nano /etc/mysql/my.cnf

Затем найдите [mysqld] и введите следующие значения:

[mysqld]
# For debugging and recovery only #
skip-grant-tables
skip-networking
###################################

Как вы можете видеть, хитрость в добавлении параметров командной строки здесь заключается в удалении -- из передней части параметра. Теперь перезапустите службу mysql, и вы сможете получить доступ к своим таблицам, чтобы сбросить пароль пользователя root или почти все, что вам нужно сделать. (Однако вы ничего не можете сделать с таблицами грантов, потому что они не загружены.)

Осторожно. Пока вы находитесь в этом режиме, любой зарегистрированный пользователь имеет доступ ко всей вашей базе данных. Вот почему я добавил опцию « skip-networking , чтобы удаленные пользователи не могли получить доступ к таблицам во время восстановления.

Обязательно закомментируйте эти строки и перезапустите mysql, когда вы закончите, чтобы заново защитить сервер.

0

Из комментариев.

Для конфигураций init.rc:

Самый простой способ - временно изменить /etc/init.d/mysql, чтобы включить параметр --skip-grant-tables а затем запустить его с помощью этого сценария (/etc/init.d/mysql start).

На upstart-системах, таких как Ubuntu 16.04, это нужно сделать в /lib/systemd/system/mysql.service .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .