1、使用init-file
在Unix/Linux系统上,启动MySQL Server之前可以指定init-file,当MySQL Server启动时就会先执行init-file中的内容,可以在其中编写修改root密码的语句,从而实现重置root密码的目的。
1、停止MySQL Server
$ systemctl stop mysqld $ ps -ef|grep mysqld
2、建立init-file,并编码修改密码的语句
$ touch /var/lib/mysql/mysql-init-password
在mysql-init-password中增加以下语句
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NEWPASSWORD';
限制mysql-init-password只对mysql用户可读
$ sudo chmod 400 /var/lib/mysql/mysql-init-password $ sudo chown mysql:mysql /var/lib/mysql/mysql-init-password
3、使用init-file重启MySQL Server
$ sudo -u mysql /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --user=mysql --init-file=/var/lib/mysql/mysql-init-password
4、查看启动日志
查看MySQL Server启动日志,一般是/var/log/mysqld.log,如果执行init-file成功,一般会存在Execution of init_file...Started/Ended的日志。
5、验证密码修改的有效性
$ mysql -u root -p'NEWPASSWORD'
6、删除init-file
删除init-file或者不带init-file参数重启MySQL Server,否则root密码会在每次启动时修改。
$ sudo rm -rf /var/lib/mysql/mysql-init-password
2、使用--skip-grant-tables
--skip-grant-tables启动可选项的功能时启动后忽略加载授权表,这样子一来就跳过了root的身份认证连接数据库,然后再使用命令修改root密码,重启MySQL Server恢复服务。
由于使用了--skip-grant-tables以后任何客户端都可以不通过密码连接服务器有一定的风险,所以MySQL 8.0.3开始,使用--skip-grant-tables的同时会自动启用--skip-networking,不允许远程连接。
1、停止MySQL Server
$ systemctl stop mysqld $ ps -ef|grep mysqld
2、使用--skip-grant-tables启动MySQL Server
$ sudo -u mysql /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid --user=mysql --skip-grant-tables
3、无需密码连接到MySQL Server
$ mysql -u root
4、加载授权表并修改密码
FLUSH PRIVILEGES;
5、修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NEWPASSWORD';
6、验证密码修改的有效性
$ mysql -u root -p'NEWPASSWORD'
7、重启MySQL Server
$ systemctl stop mysqld $ ps -ef|grep mysqld $ systemctl start mysqld
对你有用的话,点个赞关注一下吧!