加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql中Failed toopen log--datadir物理迁移报错的案例

发布时间:2016-01-12 10:40:27 所属栏目:MySql教程 来源:网络整理
导读:1.1.1. mysql5.6.14的datadir迁移时遇到报错 【环境描述】 在机器A上安装了perconamysql 5.6.14,数据库停启正常,datadir路径为pathA,并且已经做了应用数据库
1.1.1. mysql5.6.14的datadir迁移时遇到报错

【环境描述】

在机器A上安装了perconamysql 5.6.14,数据库停启正常,datadir路径为pathA,并且已经做了应用数据库的初始化工作,然后关闭了这个数据库实例,把它的datadir和/etc/my.cnf迁移到另外一台机器B上的percona mysql 5.6.14,迁移后的datadir路径修改成路径pathB,在启动mysql服务的时候遇到问题,启动失败。

操作步骤:

1)   停掉机器A上的mysql

service mysql stop

2)   对机器A上mysql的datadir(路径pathA)和my.cnf做打包,传输到机器B,并把datadir解压到pathB

3)   在机器B上安装percona mysql 5.6.14

4)   使用机器A传输过来的my.cnf覆盖机器B的/etc/my.cnf

5)   修改机器B的/etc/my.cnf中datadir路径为pathB

6)   在机器B上执行service mysql start启动mysql服务

7)   启动失败,发生报错

【mysql报错】

启动时的报错servicemysql start:

Starting MySQL(Percona Server)......Theserver quit without[FAILED]ng PID file(/home/mysql_3306_bak/mysql.pid).

错误日志中的报错:

/usr/sbin/mysqld: File '/home/mysql_3306/mysql-bin.000003'not found (Errcode: 2 - No such file or directory)

2014-04-25 22:26:47 27048 [ERROR] Failed toopen log (file '/home/mysql_3306/mysql-bin.000003', errno 2)

2014-04-25 22:26:47 27048 [ERROR] Could notopen log file

2014-04-25 22:26:47 27048 [ERROR] Can'tinit tc log

2014-04-25 22:26:47 27048 [ERROR] Aborting

2014-04-25 22:26:47 27048 [Note] Binlog end

2014-04-25 22:26:47 27048 [Note] Shuttingdown plugin 'partition'

已经修改了my.cnf配置文件中所有的路径,但是Mysql仍然说找不到'/home/mysql_3306/mysql-bin.000003'路径的文件,从报错看上去很诡异。

【问题原因】

Mysql报错提示找不到binlog,是由于my.cnf中配置了:

log-bin= /home/mysql_3306/mysql-bin

log-bin-index= /home/mysql_3306/bin-index

mysql会在log-bin-index参数指定的文件中维护log-bin的索引列表,并且它是以绝对路径的方式记录的:

/home/mysql_3306?mysql-bin.000001

/home/mysql_3306?mysql-bin.000002

/home/mysql_3306?mysql-bin.000003

虽然已经把/etc/my.cnf中的所有路径都修改正确了,但是mysql服务在启动时,是通过读取log-bin-index来查找log-bin日志文件的,查找的文件还是在机器A上指定的位置,所以mysql服务启动失败。

【解决方法】

手动修改log-bin-index指定的二进制日志索引文件,修改里面所有log-bin的路径,指定到当前datadir下的二进制日志,然后尝试启动mysql服务,启动成功,问题解决。

【问题思考】

Whatis log-bin-index paramter ?

Mysql官方手册中说明“如果没有在my.cnf中配置log-bin-index参数指定,mysql会自动创建一个以host_name-bin.index命名的二进制索引文件(实验证明是mysql-bin.index)”。

所以,尝试去掉my.cnf中配置的log-bin-index参数,然后启动mysql服务,此时mysql服务正常启动,查看log-bin-index文件:

#cat mysql-bin.index

/home/mysql_3306_bak/mysql-bin.000006

我们发现mysql自动创建了名为“mysql-bin.index”的二进制索引文件,并且文件中只包含在启动时重新生成的二进制文件路径信息。

本栏目更多精彩内容:http://www.bianceng.cn/database/MySQL/

此时,mysql只知道此次启动时生成的二进制文件路径信息,那么也就意味着此时mysql丢失了编号000006之前的所有日志文件,我们进行如下的测试:

执行flush logs命令,让mysql再刷出来几个二进制日志;

#cat mysql-bin.index

/home/mysql_3306_bak/mysql-bin.000006

/home/mysql_3306_bak/mysql-bin.000007

/home/mysql_3306_bak/mysql-bin.000008

然后,执行purgebinary logs to 'mysql-bin.000004' 命令:

>purge binary logs to 'mysql-bin.000004';

ERROR1373 (HY000): Target log not found in binlog index

此时,mysql提示无法找到000004号二进制日志文件,接下来尝试删除000006号二进制日志文件:

> purge binary logs to'mysql-bin.000007';

QueryOK, 0 rows affected (0.03 sec)

查看mysql-bin.index二进制日志索引文件:

#cat mysql-bin.index

/home/mysql_3306_bak/mysql-bin.000007

/home/mysql_3306_bak/mysql-bin.000008

查看二进制日志文件:

#ls -ltr mysql-bin.00000*

mysql-bin.000004

mysql-bin.000001

mysql-bin.000002

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读