1. 异常描述
使用xtrabackup对主库进行备份,在从节点主机上进行恢复,并将还原后的实例部署为主库的从节点。在启动介质与主库版本一致的情况下,启动主从同步后,日志出现如下错误:
2022-10-30T11:44:17.442001Z296 [ERROR] InnoDB: Columntable_nameintable`mysql`.`innodb_table_stats`isVARCHAR(597) NOTNULLbutshouldbeVARCHAR(192) NOTNULL (lengthmismatch).2022-10-30T11:44:17.442029Z296 [ERROR] InnoDB: Fetchofpersistentstatisticsrequestedfortable`testdb1`.`tb1`buttherequiredsystemtablesmysql.innodb_table_statsandmysql.innodb_index_statsarenotpresentorhaveunexpectedstructure. Usingtransientstatsinstead.2022-10-30T11:44:17.567223Z296 [ERROR] InnoDB: Columntable_nameintable`mysql`.`innodb_table_stats`isVARCHAR(597) NOTNULLbutshouldbeVARCHAR(192) NOTNULL (lengthmismatch).2022-10-30T11:44:17.567240Z296 [ERROR] InnoDB: Fetchofpersistentstatisticsrequestedfortable`testdb2`.`tb1`buttherequiredsystemtablesmysql.innodb_table_statsandmysql.innodb_index_statsarenotpresentorhaveunexpectedstructure. Usingtransientstatsinstead.
以上错误一般都是数据库版本不一致导致。但是查看启动命令是正常的
/usr/local/mysql5.7/bin/mysqld_safe--defaults-file=/app/data/mysql3307/etc/my.cnf
对应的版本也是符合预期的:
[ops@ck2~]$/usr/local/mysql5.7/bin/mysqld--version/usr/local/mysql5.7/bin/mysqldVer5.7.25-28forLinuxonx86_64 (PerconaServer (GPL), Release28, Revisionc335905)
但是登录数据库中查看版本:
确实与启动的版本不一致。
2. 解决方案
查看本机上mysql是否有多个版本的启动文件
经查,确实如此。而第一个版本正式启动后数据库里检测到的版本。
2.1 解决思路
检查配置文件:
因数据库启动时与配置文件中的basedir也有关系,先检查配置文件:发现没问题
检查环境变量
exportMYSQL_HOME=/app/mysql5.7exportMY_BASEDIR_VERSION=/app/mysql5.7exportPATH=/app/mysql5.7/bin:/app/mysql5.7/scripts:$PATHexportLD_LIBRARY_PATH=/app/mysql5.7/lib
发现环境变量里配置的确实是mysql5.7.18的路径。
2.2 调整环境变量
将对应的路径改为当前版本的路径
exportMYSQL_HOME=/usr/local/mysql5.7exportMY_BASEDIR_VERSION=/usr/local/mysql5.7exportPATH=/usr/local/mysql5.7/bin:/usr/local/mysql5.7/scripts:$PATHexportLD_LIBRARY_PATH=/usr/local/mysql5.7/lib
2.3 重启数据库
关闭数据库
mysql>setglobalinnodb_fast_shutdown=0;QueryOK, 0rowsaffected (0.00sec)mysql>shutdown;
启动数据库
numactl--interleave=all/usr/local/mysql5.7/bin/mysqld_safe--defaults-file=/app/data/mysql3307/etc/my.cnf&
查看版本,是预期的情况了。
检查配置文件: 也没有再出现对应的错误了,至此问题解决。