MySQL故障 Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist

时间:2022-09-20 08:39:55


       MySQL数据库不同版本之间的一些实现机制和系统表的数量是不同的,所以使用innobackupex进行物理备份和恢复的时候,会出现问题。


      今天在一台安装 MySQL 5.615 高版本MySQL数据库上进行了备份,然后将备份拷贝到 一台安装 MySQL 5.5.35 上进行恢复,执行了apply-log 和copy-back之后,使用mysql 5.5启动恢复后的数据库时,提示错误:

Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist


      一开始认为是 mysql.host表丢失了,但后来确认原来的 MySQL 5.6.15 上的数据库,也没有mysql.host 表,说明从原库拷贝和恢复的过程是没有问题的;

      那么问题就应该是两个服务器上的 mysql 5.5 和mysql 5.6数据库版本不同导致的问题。


      通过查询网络,发现之前有类似错误的处理方法:

<span style="font-size:18px;">今天在安装mysql后,启动时候没有启动成功,查看了下日志报错如下:
---------------------------------------------
[root@localhost local]# less /var/log/mysqld.log
1、查看报错信息如下:
[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist

2、经过查阅资料得知。要敲如下命令解决:
mysql_install_db –usrer=mysql datadir=/var/lib/mysql
datadir是我的mysql存放文件目录

3、然后重启mysql还是不行:
MySQL Daemon failed to start.
正在启动 mysqld:                                          [失败]

4、然后试了下单独的命令,启动完成
mysql_install_db

5、启动mysql服务
[root@mysql mysqld]# /etc/init.d/mysqld restart
停止 mysqld:                                              [确定]
正在启动 mysqld:                                          [确定]
</span>


      但是实际上采用如下方法,还是不能正常启动;


       于是我在 mysql 5.5.35 上删除了 /usr/local/mysql/ 程序,然后将 mysql 5.6.15 所在的目录打包,传输到这台服务器上加压缩,并重命名成 /usr/local/mysql/ 目录,确认mysql命令可以正常执行后,使用 mysqld_safe 可以正常启动恢复的数据库,并顺利搭建主从结构。