保留数据,解决Can‘t open and lock privilege tables: Table ‘mysql.user‘ doesn‘t exist
我的MySQL服务跑在虚拟机中,昨天因为宿主机磁盘出问题关闭了换了个磁盘,换了好后启动MySQL的虚拟机后就没管他,第二天使用MySQL的时候发现MySQL没有启动,就准备手动启动,结果报错
● mysqld.service - LSB: start and stop MySQL
Loaded: loaded (/etc/rc.d/init.d/mysqld; bad; vendor preset: disabled)
Active: failed (Result: exit-code) since Tue 2023-04-04 10:29:49 CST; 4s ago
Docs: man:systemd-sysv-generator(8)
Process: 2203 ExecStart=/etc/rc.d/init.d/mysqld start (code=exited, status=1/FAILURE)
Apr 04 10:29:46 mysql5-7 systemd[1]: Starting LSB: start and stop MySQL...
Apr 04 10:29:49 mysql5-7 mysqld[2203]: Starting MySQL... ERROR! The server quit without updating PID f...pid).
Apr 04 10:29:49 mysql5-7 systemd[1]: mysqld.service: control process exited, code=exited status=1
Apr 04 10:29:49 mysql5-7 systemd[1]: Failed to start LSB: start and stop MySQL.
Apr 04 10:29:49 mysql5-7 systemd[1]: Unit mysqld.service entered failed state.
Apr 04 10:29:49 mysql5-7 systemd[1]: mysqld.service failed.
去网上查询了半天,都不符合我的要求,我的数据是需要保留的。
去看看日志,报什么错误,查看my.cnf
或者my.ini
,看日志文件在哪里
tail -100 /var/log/mysqld.log
发现报错,说是找不到msyql的user表,现在去MySQL的存储路径(这个路径在你的my.cnf
或者my.ini
的datadir=
参数中)
cd /data/mysql/
cd mysql/
发现真的没有user表
解决方案:
去找一个好的msyql的user表复制到用问题的MySQL数据库中
用好的mysql用户表的账号密码登录,此时数据都正常了,该方法我只在MySQL5.7版本使用过。拷贝的大版本肯定是要相同的。
https://gitee.com/linfgi/app/tree/master/mysql/mysql.user