可以停止服务
5.6及之前版本
1.停服务
systemctl stop mariadb
2.启服务——mysql_safe
mysqld_safe --skip-grant-tables &
#跳过认证授权表启动MySQL服务(危险,任意地址无需用户密码验证都可以进入)
mysql
#进入数据库
3.修改密码
update mysql.user set password=password('新密码') where user='root' and host='localhost';
4.停止服务
ps -ef |grep mysqld
kill -9 [mysqld_safe的pid]
kill -9 [mysqld的pid]
5.启服务
systemctl start mariadb
5.7以及以后版本
1.mysql5.7以后的版本取消了skip-grant-tables,只能通过改配置文件实现
sed -i '/[mysqld]/a\skip-grant-tables' /etc/my.cnf
#在mysql的配置文件中的[mysqld]这一行后面追加一行skip-grant-tables
2.重启服务
systemctl restart mariadb
mysql
3.修改密码
update mysql.user set password=password('新密码') where user='root' and host='localhost';
4.改回配置文件
sed -i 's#skip-grant-tables# #g' /etc/my.cnf
#在mysql的配置文件中的skip-grant-tables替换为空
5.重启服务
systemctl restart mariadb
不可以停止服务
1.拥有一个低权限账号A(对某个库db1拥有写权限的账号)
2.拥有操作系统root权限
3.系统root用户复制认证权限表mysql.user到A账号
cp -p mysql/user* DB1/
4.A账号登陆数据库修改db1下的user表中数据库root密码
mysql -utest -ptest123
show database;
use DB1;
show tables;
update DB1.user set password=password('Xin950512') where user='root';
5.系统root用户备份mysql.user表
tar -cf /tmp/mysql.user.tar /var/lib/mysql/mysql/user*
6.系统root用户拷贝db1.user表覆盖mysql.user表
cp -p DB1/user* mysql
7.系统root用户向mysql发送SIGHUP信号重新加载认证授权表
ps -ef |grep mysql
kill -SIGHUP [mysqld的pid]
8.root用户测试新密码登陆
mysql -uroot -pXin950512
9.失败回滚事项——将备份的认证授权表还原,重新来过
注
有错请指出,不喜勿喷,不接受喷我小白,虽然这是事实,如果要喷请预约