MySQL在同一个服务器上可以安装N个不同的版本,方便测试,迁移等等。此外,对于大多数Linux系统,集成了mysql,缺省会被安装。因此多版本的问题导致一些莫名的错误也是时有发生。今天在提取binlog日志时,碰到了一个Log_event::read_log_event(): ‘Found invalid event in binary log’。上网搜索发现是由于mysqlbinlog的版本和在用的mysql版本不一致造成的,需要指定路径执行
故障描述
mysqlbinlog --start-datetime='2015-04-14 09:00:00' --stop-datetime='2015-04-14 16:00:00' mysql-bin.000170 > userop.log
ERROR: Error in Log_event::read_log_event(): 'Found invalid event in binary log', data_len: 127, event_type: 19
故障分析与解决
# 查看当前os使用的mysqlbinlog
shell> which mysqlbinlog
/usr/bin/mysqlbinlog
# 查看mysql当前使用的mysqlbinlog
mysql> show variables like 'basedir';
+---------------+------------------+
| Variable_name | Value |
+---------------+------------------+
| basedir | /usr/local/mysql |
+---------------+------------------+
1 row in set (0.00 sec)
# 对比两个版本
shell> /usr/bin/mysqlbinlog --version
/usr/bin/mysqlbinlog Ver 3.2 for redhat-linux-gnu at x86_64
shell> /usr/local/mysql/bin/mysqlbinlog --version
/usr/local/mysql/bin/mysqlbinlog Ver 3.3 for linux2.6 at x86_64
# 指定mysqlbinlog路径
shell> /usr/local/mysql/bin/mysqlbinlog --start-datetime='2015-04-14 09:00:00' --stop-datetime='2015-04-14 16:00:00' mysql-bin.000170 > userop.log
总结
对于生产环境mysql的部署,建议在安装OS前不安装缺省的mysql或者安装后卸载缺省的mysql
因需要存在多版本的情形,应考虑使用直接路径方式来执行相应的mysql命令行工具
整理自网络
Svoid
2015-04-15