MySQL 5.7.17, работающий на Linux Mint (не могу запустить mysqld_safe --skip-grant-privileges

243
Dave Henzler

Случайно стерты привилегии MySQL 5.7.17 (linux) для root. Я все еще могу войти как root. Просто не могу многое сделать. Я искал в интернете несколько дней, пытаясь найти способ запустить mysql_safe --skip-grant-privileges, но ни одно из предложений не сработало.

Статья в MySQL doc предлагает другой путь, который заменил mysql_safe. Выглядит очень сложно, и я не могу рискнуть испортить мою систему с еще одной вещью, которая не работает.

У меня есть около недели, а затем мне нужно, чтобы система снова заработала. Хотите знать, если я могу удалить MySQL и выполнить новую установку, будут ли таблицы доступны после новой установки?

2
Вы можете использовать файл конфигурации MySQL, чтобы сделать это. Пожалуйста, посмотрите: https://stackoverflow.com/questions/1708409/how-to-start-mysql-with-skip-grant-tables. Хорошо объяснил, как делать то, что вы хотите. Aulis Ronkainen 5 лет назад 0

1 ответ на вопрос

0
Dave Henzler

B.5.3.2.2 Сброс пароля root: Unix и Unix-подобные системы

В Unix используйте следующую процедуру для сброса пароля для учетной записи MySQL «root» @ «localhost». Чтобы изменить пароль для учетной записи root с другой частью имени хоста, измените инструкции, чтобы использовать это имя хоста.

В инструкциях предполагается, что вы запустите сервер MySQL от учетной записи Unix, которую вы обычно используете для его запуска. Например, если вы запускаете сервер, используя учетную запись mysql, вы должны войти в систему как mysql перед использованием инструкций. Кроме того, вы можете войти в систему как root, но в этом случае вы должны запустить mysqld с --user=mysqlопцией. Если вы запускаете сервер с правами root без использования --user=mysql, сервер может создавать корневые файлы в каталоге данных, такие как файлы журналов, и это может вызвать проблемы с разрешениями для будущих запусков сервера. Если это произойдет, вам нужно будет либо поменять владельца файлов на mysql, либо удалить их.

Log on to your system as the Unix user that the MySQL server runs as (for example, mysql).  Stop the MySQL server if it is running. Locate the .pid file that contains the server's process ID. The exact location and name of this file depend on your distribution, host name, and configuration. Common locations are /var/lib/mysql/, /var/run/mysqld/, and /usr/local/mysql/data/. Generally, the file name has an extension of .pid and begins with either mysqld or your system's host name.  Stop the MySQL server by sending a normal kill (not kill -9) to the mysqld process. Use the actual path name of the .pid file in the following command:  shell> kill `cat /mysql-data-directory/host_name.pid` 

Используйте обратные кавычки (не кавычки вперед) с командой cat. Это приводит к тому, что вывод команды cat подставляется в команду kill.

Создайте текстовый файл, содержащий оператор присвоения пароля в одной строке. Замените пароль на пароль, который вы хотите использовать.

MySQL 5.7.6 и позже:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass'; 

MySQL 5.7.5 и более ранние:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass'); 

Сохраните файл. В этом примере предполагается, что вы называете файл / home / me / mysql-init. Файл содержит пароль, поэтому не сохраняйте его там, где его могут прочитать другие пользователи. Если вы не вошли в систему как mysql (пользователь, от имени которого работает сервер), убедитесь, что у файла есть разрешения, которые позволяют mysql его читать.

Запустите сервер MySQL с помощью специальной опции --init-file:

shell> mysqld --init-file=/home/me/mysql-init & 

Сервер выполняет содержимое файла, названного --init-fileпараметром, при запуске, изменяя пароль учетной записи «root» @ «localhost».

Также могут потребоваться другие параметры, в зависимости от того, как вы обычно запускаете сервер. Например, --defaults-fileможет понадобиться раньше --init-file.

After the server has started successfully, delete /home/me/mysql-init. 

Теперь вы должны иметь возможность подключиться к серверу MySQL от имени пользователя root, используя новый пароль. Остановите сервер и перезапустите его как обычно.

Если оператору ALTER USER не удалось сбросить пароль, попробуйте повторить процедуру, используя следующие операторы для непосредственного изменения пользовательской таблицы:

UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPass'), password_expired = 'N' WHERE User = 'root' AND Host = 'localhost'; FLUSH PRIVILEGES; 

B.5.3.2.3 Сброс пароля root: общие инструкции

В предыдущих разделах приведены инструкции по сбросу пароля специально для Windows, Unix и Unix-подобных систем. Альтернативно, на любой платформе вы можете сбросить пароль с помощью клиента mysql (но этот подход менее безопасен):

Stop the MySQL server if necessary, then restart it with the --skip-grant-tables option. This enables anyone to connect without a password and with all privileges, and disables account-management statements such as ALTER USER and SET PASSWORD. Because this is insecure, you might want to use --skip-grant-tables in conjunction with --skip-networking to prevent remote clients from connecting.  Connect to the MySQL server using the mysql client; no password is necessary because the server was started with --skip-grant-tables:  shell> mysql 

В клиенте mysql скажите серверу перезагрузить таблицы предоставления, чтобы операторы управления учетными записями работали:

mysql> FLUSH PRIVILEGES; 

Затем измените пароль учетной записи «root» @ «localhost». Замените пароль на пароль, который вы хотите использовать. Чтобы изменить пароль для учетной записи root с другой частью имени хоста, измените инструкции, чтобы использовать это имя хоста.

MySQL 5.7.6 и позже:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass'; 

MySQL 5.7.5 и более ранние:

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass'); 

Теперь вы должны иметь возможность подключиться к серверу MySQL от имени пользователя root, используя новый пароль. Остановите сервер и перезапустите его как обычно (без параметров --skip-grant-tables и --skip-networkingoptions).

Если оператору ALTER USER не удалось сбросить пароль, попробуйте повторить процедуру, используя следующие операторы для непосредственного изменения пользовательской таблицы:

UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPass') WHERE User = 'root' AND Host = 'localhost'; FLUSH PRIVILEGES; 

ПРЕДЫДУЩИЙ ДОМ НА СЛЕДУЮЩИЙ

Потребовалось слишком много времени, чтобы найти этот ответ ... Я вошел в более чем 4 различных руководства MySQL, в которых говорилось о том, чтобы быть версией 5.7.x. Это нелепо. Однако Oracle, похоже, упивается путаницей пользователей, которые не платят. Dave Henzler 5 лет назад 0

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