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 可以正常启动恢复的数据库,并顺利搭建主从结构。