我们在部署Mysql的时候,在初始化Mysql数据时,系统都会产生一些初始密码,因不同的初始化方式,这个密码要么为空,要么记录在Mysql的日志里。
# grep 'password' /data/mysqldata/mysqld.log 2024-09-09T11:17:01.685768Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: )T8tL4fIr(.d
部署完成,我们一般会进Mysql把初始密码进行修改,但由于记录文档没有来得及写,过几天,就可能会忘记这个修改后的密码,造成我们无法用root登录Mysql。今天的主题就是忘记Root密码后,怎么解决这个问题。
二、关闭Mysql
2.1、关闭3306访问
在关闭Mysql数据库之前,先关闭业务程序,让业务程序不要连接到数据库,进行读写数据,特别是写数据。如果业务程序不方便关闭,我们就开启系统的防火墙,阻断所有IP地址连接3306端口。
# systemctl status firewalld #查询防火墙的状态 ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; preset: enabled) Active: active (running) since Thu 2024-09-12 14:58:30 CST; 18min ago Docs: man:firewalld(1) Main PID: 725 (firewalld) Tasks: 2 (limit: 24637) Memory: 43.7M CPU: 757ms CGroup: /system.slice/firewalld.service └─725 /usr/bin/python3 -s /usr/sbin/firewalld --nofork --nopid Sep 12 14:58:29 alma92-88 systemd[1]: Starting firewalld - dynamic firewall daemon... Sep 12 14:58:30 alma92-88 systemd[1]: Started firewalld - dynamic firewall daemon. # firewall-cmd --list-all #查询防火墙的安全策略 public (active) target: default icmp-block-inversion: no interfaces: ens160 sources: services: cockpit dhcpv6-client ssh ports: 80/tcp 3306/tcp protocols: forward: yes masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: # firewall-cmd --remove-port=3306/tcp --permanent 移除3306的访问策略 # firewall-cmd --reload
2.2、关闭Mysql数据库
# ps aux |grep mysql #查找Mysql数据库进程,一般是两个 root 929 0.0 0.0 4860 3760 pts/0 S 15:02 0:00 /bin/sh /usr/local/mysql-8.0.35/bin/mysqld_safe mysql 1180 0.4 10.5 2347176 422276 pts/0 Sl 15:02 0:06 /usr/local/mysql-8.0.35/bin/mysqld --basedir=/usr/local/mysql-8.0.35 --datadir=/data/mysqldata --plugin-dir=/usr/local/mysql-8.0.35/lib/plugin --user=mysql --log-error=/data/mysqldata/mysqld.log --pid-file=/data/mysqldata/mysqld.pid --socket=/data/mysqldata/mysql.sock # kill -9 929;kill -9 1180 #kill 2个进程,先kill主进程,即Mysqld_safe进程。
三、启动Mysql
#启动时,带上--skip-grant-tables参数,跳过权限表。这种启动方式,是没有tcp端口监听的。 # /usr/local/mysql-8.0.35/bin/mysqld_safe --skip-grant-tables & # mysql -uroot -p -S /data/mysqldata/mysql.sock #登录Mysql库 mysql> flush privileges; #必须先做这步,直接alter user时会报错 Query OK, 0 rows affected (0.01 sec) mysql> alter user 'root'@'localhost' identified by 'Abc@123456'; Query OK, 0 rows affected (0.01 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> exit Bye
四、重启Mysql
# mysqladmin -uroot -p -S /data/mysqldata/mysql.sock shutdown # /usr/local/mysql-8.0.35/bin/mysqld_safe & # mysql -uroot -p -h 127.0.0.1 #登录测试,用刚修改的密码
五、高手恢复法
对于第三步修改root密码,还有使用–init-file参数实现,具体步骤为:
# cat /opt/change_mysql_root_pwd.sql alter user 'root'@'localhost' identified by 'Abc@123456'; # chmod +rx /opt/change_mysql_root_pwd.sql #使用–init-file=/opt/change_mysql_root_pwd.sql参数启动数据库,启动时会自动执行SQL文件修改密码 # mysqld_safe --init-file=/opt/change_mysql_root_pwd.sql & # mysql -uroot -p -h 127.0.0.1 #登录测试,用刚修改的密码 #登录没有问题后,把sql文件删掉,防止泄密 # rm -f /opt/change_mysql_root_pwd.sql
声明:欢迎大家光临本站,学习IT运维技术,转载本站内容,请注明内容出处”来源刘国华教育“。如若本站内容侵犯了原著者的合法权益,请联系我们进行处理。