MYSQL - Некоторые заметки

Обсуждение баз данных на Linux
Ответить
ustim
Администратор
Сообщения: 130
Зарегистрирован: 03 июн 2021, 09:01
Откуда: Краснодар
Контактная информация:

MYSQL - Некоторые заметки

Сообщение ustim »

Как авторизоваться под root

Код: Выделить всё

mysql -u root -p
Как создать суперпользователя со всеми правами, что бы доступ был из подсетей типа 192.168.%

Код: Выделить всё

CREATE USER 'username'@'192.168.%' IDENTIFIED BY 'the_password';

Код: Выделить всё

GRANT ALL PRIVILEGES ON *.* TO 'username'@'192.168.%' WITH GRANT OPTION;

Код: Выделить всё

FLUSH PRIVILEGES;
Как посмотреть права пользователя

Код: Выделить всё

SHOW GRANTS FOR username;
Как запустить MYSQL в безопасном режиме с пропуском гранта

Код: Выделить всё

sudo mysqld_safe --skip-grant-tables &
Как сбросить пароль пользователя root
1) Останавливаем mysqld:

Код: Выделить всё

sudo service mysql stop
2) Проверяем, что нет запущенных процессов mysqld:

Код: Выделить всё

ps -eaf|grep mysqld
Если все нормально, то вывод команды должен состоять лишь из одной строки, примерно такого содержания:
root 24902 1530 0 11:41 pts/0 00:00:00 grep --color=auto mysqld
3) Создаем каталог /var/run/mysqld для запуска mysqld в safe режиме из консоли

Код: Выделить всё

sudo mkdir /var/run/mysqld
4) Делаем владельцем данного каталога пользователя mysql (чтобы не было проблем с правами)

Код: Выделить всё

sudo chown mysql /var/run/mysqld
5) Запускаем MySQL в ручном режиме из консоли, пропуская проверку прав (опция --skip-grant-tables). А также отключаем доступ к серверу через TCP/IP (с помощью опции --skip-networking), чтобы злоумышленник не мог воспользоваться тем, что мы отключили проверку прав пользователей. При использовании данной опции, доступ к серверу становится возможным только через localhost.

Код: Выделить всё

sudo mysqld_safe --skip-grant-tables --skip-networking &
В случае успешного запуска, вывод в консоли должен быть примерно таким:
# sudo mysqld_safe --skip-grant-tables --skip-networking &
[1] 26152
2019-05-02T14:17:14.807620Z mysqld_safe Logging to syslog.
2019-05-02T14:17:14.815041Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2019-05-02T14:17:14.856418Z mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
6) Подключаемся из консоли к серверу mysqld и выбираем базу данных mysql:

Код: Выделить всё

mysql -u root mysql
7) Используем плагин mysql_native_password, иначе в некоторых случаях будем получать ошибку "ERROR 1524 (HY000): Plugin 'auth_socket' is not loaded", а нам это не нужно:

Код: Выделить всё

update user set plugin="mysql_native_password";
Вывод в результате выполнения данной команды должен быть примерно таким:
Query OK, 0 rows affected (0.00 sec)
Rows matched: 4 Changed: 0 Warnings: 0
8) Перезагружаем привилегии:

Код: Выделить всё

flush privileges;
9) Меняем пароль для нужного пользователя, в нашем случае это root:

Для MySQL версий 5.7.6 и новее (5.7.7, 5.7.8...)

Код: Выделить всё

ALTER USER 'root'@'localhost' IDENTIFIED BY 'NEW_PASSWORD';
Для MySQL версий 5.7.5 и старее (5.7.4, 5.7.3...)

Код: Выделить всё

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NEW_PASSWORD');
NEW_PASSWORD - это пароль, который вам необходимо поменять на свой собственный.
В результате выполнения данной команды, мы должны получить вот такой вывод в консоли:
Query OK, 0 rows affected (0.01 sec)
В том случае, если указанные выше команды по какой то причине не сработали, вы можете воспользоваться следующим запросом:

Код: Выделить всё

UPDATE mysql.user SET authentication_string=PASSWORD('NEW_PASSWORD'), plugin='mysql_native_password' WHERE User='root';
В результате выполнения данной команды, мы должны получить вот такой вывод в консоли:
Query OK, 1 row affected, 1 warning (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 1
9) После чего, вводим команду exit для отключения:
exit;

10) Выключаем запущенный в ручном режиме Mysqld сервер:
sudo mysqladmin -S /var/run/mysqld/mysqld.sock shutdown

Если все пройдет успешно, то вывод должен быть примерно таким:
2019-05-02T14:30:03.404615Z mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
[1]+ Done sudo mysqld_safe --skip-grant-tables --skip-networking
Если же команда не сработала и вы получаете вот такую (или любую другую) ошибку:
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
То можно принудительно завершить процесс с помощью следующей команды:

Код: Выделить всё

sudo kill `cat /var/run/mysqld/mysqld.pid`
11) Проверяем, что нет запущенных процессов mysqld:

Код: Выделить всё

ps -eaf|grep mysqld
Если все нормально, то вывод команды должен состоять лишь из одной строки, примерно такого содержания:
root 24902 1530 0 11:41 pts/0 00:00:00 grep --color=auto mysqld
12) Запускаем Mysql-server в нормальном режиме:

Код: Выделить всё

sudo service mysql start
И пытаемся подключиться к нашему серверу с новым паролем, который мы установили.
Ответить