无法使用 ubuntu 16 上的 --skip-grant-tables 重置 root 密码
Can't reset root password with --skip-grant-tables on ubuntu 16
我正在尝试在 MysqlPasswordReset 之后重置 root 密码,但是当我尝试使用 --skip-grant-tables 启动服务器时,服务器没有启动
- Ubuntu 16.04.1 LTS(GNU/Linux 4.4.0-59-通用 x86_64)
- mysql Ver 14.14 Distrib 5.7.17,对于 Linux (x86_64)
服务器是运行
$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
停止服务器
$ sudo /etc/init.d/mysql stop
[ ok ] Stopping mysql (via systemctl): mysql.service.
尝试从 --skip-grant-tables 开始
sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &
[1] 9856
无需密码即可连接
$ mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
[1]+ Exit 1 sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking
我也试过从mysql_safe开始(error.log是空的)
sudo mysqld_safe --skip-grant-tables
2017-02-01T16:33:31.382105Z mysqld_safe Logging to syslog.
2017-02-01T16:33:31.383942Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-02-01T16:33:31.386058Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-02-01T16:33:31.388009Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
我发现mysql服务停止时mysql.sock被删除,mysqld_safe无法创建(找不到原因),所以我的解决方法在开始之前备份了 sock 文件夹并恢复 mysqld_safe
启动服务器
$ sudo service mysql start
转到袜子文件夹
$ cd /var/run
备份袜子
$ sudo cp -rp ./mysqld ./mysqld.bak
停止服务器
$ sudo service mysql stop
恢复袜子
$ sudo mv ./mysqld.bak ./mysqld
开始mysqld_safe
$ sudo mysqld_safe --skip-grant-tables --skip-networking &
初始化mysqlshell
mysql -u root
更改密码
FLUSH PRIVILEGES;
SET PASSWORD FOR root@'localhost' = PASSWORD('my_new_password');
上面的答案对我有用,但最后一步现在已弃用并引发以下警告:
Warning | 1287 | 'SET PASSWORD FOR = PASSWORD('')' is deprecated and will be removed in a future release. Please use SET PASSWORD FOR = '' instead
改为使用此命令:
SET PASSWORD FOR root = '<plaintext_password>';
我尝试了很多方法,包括@pedronalbert 的方法,但仍然没有用。
我解决的方法是在/etc/my.cnf中添加“skip-grant-tables”然后开始mysql 服务并将 mysql 与 "mysql -u root" 连接为
https://www.codero.com/knowledge-base/content/33/296/en/how-to-reset-your-root-mysql-password.html
它适用于我的 VM CentOS 7。
对于 Ubuntu 19 和 MySQL 8.0.17-0ubuntu2,最终对我有用的是许多答案的组合:
在 MySQL 的配置文件中(/etc/mysql/mysql.conf.d/mysqld.cnf
在我的机器上),在 [mysqld]
下,添加:
skip-grant-tables = 1
plugin-load-add = auth_socket.so
重启MySQL服务;
连接到 MySQL:mysql -uroot
;
运行:
UPDATE mysql.user SET authentication_string=null WHERE User='root';
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pass123';
停止MySQL并在配置文件中注释skip-grant-tables
;
再次启动 MySQL 现在应该可以工作了:mysql -u root -ppass123
.
我正在尝试在 MysqlPasswordReset 之后重置 root 密码,但是当我尝试使用 --skip-grant-tables 启动服务器时,服务器没有启动
- Ubuntu 16.04.1 LTS(GNU/Linux 4.4.0-59-通用 x86_64)
- mysql Ver 14.14 Distrib 5.7.17,对于 Linux (x86_64)
服务器是运行
$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
停止服务器
$ sudo /etc/init.d/mysql stop
[ ok ] Stopping mysql (via systemctl): mysql.service.
尝试从 --skip-grant-tables 开始
sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &
[1] 9856
无需密码即可连接
$ mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
[1]+ Exit 1 sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking
我也试过从mysql_safe开始(error.log是空的)
sudo mysqld_safe --skip-grant-tables
2017-02-01T16:33:31.382105Z mysqld_safe Logging to syslog.
2017-02-01T16:33:31.383942Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-02-01T16:33:31.386058Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-02-01T16:33:31.388009Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
我发现mysql服务停止时mysql.sock被删除,mysqld_safe无法创建(找不到原因),所以我的解决方法在开始之前备份了 sock 文件夹并恢复 mysqld_safe
启动服务器
$ sudo service mysql start
转到袜子文件夹
$ cd /var/run
备份袜子
$ sudo cp -rp ./mysqld ./mysqld.bak
停止服务器
$ sudo service mysql stop
恢复袜子
$ sudo mv ./mysqld.bak ./mysqld
开始mysqld_safe
$ sudo mysqld_safe --skip-grant-tables --skip-networking &
初始化mysqlshell
mysql -u root
更改密码
FLUSH PRIVILEGES;
SET PASSWORD FOR root@'localhost' = PASSWORD('my_new_password');
Warning | 1287 | 'SET PASSWORD FOR = PASSWORD('')' is deprecated and will be removed in a future release. Please use SET PASSWORD FOR = '' instead
改为使用此命令:
SET PASSWORD FOR root = '<plaintext_password>';
我尝试了很多方法,包括@pedronalbert 的方法,但仍然没有用。
我解决的方法是在/etc/my.cnf中添加“skip-grant-tables”然后开始mysql 服务并将 mysql 与 "mysql -u root" 连接为 https://www.codero.com/knowledge-base/content/33/296/en/how-to-reset-your-root-mysql-password.html
它适用于我的 VM CentOS 7。
对于 Ubuntu 19 和 MySQL 8.0.17-0ubuntu2,最终对我有用的是许多答案的组合:
在 MySQL 的配置文件中(
/etc/mysql/mysql.conf.d/mysqld.cnf
在我的机器上),在[mysqld]
下,添加:skip-grant-tables = 1 plugin-load-add = auth_socket.so
重启MySQL服务;
连接到 MySQL:
mysql -uroot
;运行:
UPDATE mysql.user SET authentication_string=null WHERE User='root'; FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pass123';
停止MySQL并在配置文件中注释
skip-grant-tables
;再次启动 MySQL 现在应该可以工作了:
mysql -u root -ppass123
.