您的位置:首页 > 数据库 > MySQL

mysql中的ERROR 1146 (42S02)问题解决方案(主从服务器数据同步引起)

2014-08-14 14:00 756 查看
问题的起因

有一台mysql服务器,其已经运行了很长时间了,由于后来流量增大,且新的需求中关于统计,分析之类的多了起来。为防止影响该服务器的运行,决定使用主从式配置。统计,分析之类在从服务器上进行。(数据库使用InnoDB引擎)

在从服务器搭建好后,首先手工同步数据。在将对应的数据库目录打包复制到从服务器后,启动从服务器,在用mysql客户端登录后,发现在使用 “select * from 表名” 时出现 ERROR 1146 (42S02)。

解决过程

一、查mysql文档,发现在使用innoDB引擎的数据库中,其实际数据不是存放在数据库目录下的,而是放在一个叫ibdata1的文件内(默认配置时),其目录下只是放置了数据库的表及表结构相关的信息。复制ibdata1文件至从服务器对应目录后,重启,仍出现该问题

二、仔细检查发现,从服务器中多了个ibdata2的文件。在检查过主从服务器的配置文件my.cnf 后发现,在从服务器的设置中,有innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend 语句,将该语句注释(主服务器中也是注释掉的),停止服务器,并删除ibdata2
文件及相关的其他初始文件,重启后发现该问题仍然存在

三、经过仔细查看mysql文档,可能是由于主服务中的数据缓存而造成的问题(即此时 ibdata1文件可能是不一致的)。经过相应处理后,在从服务器的该问题得到解决。其处理过程如下:(mysql> 表示在 mysql客户端执行。 shell>表示在 linux的shell中执行)

主服务器操作:

1、mysql> flush tables with read lock;

2、 mysql> reset master;

3、 shell> 复制 ibdata1 到指定目录

4、mysql> unlock tables;

从服务器操作

5、shell> 首先停止服务

6、shell> 删除mysql在启动过程中产生的文件及ibdata1及相关文件。

7、shell> 启动服务,并停止。

8、shell> 复制刚才主服务器中的 ibdata1到对应的目录下(overview)

9、 shell> 启动服务。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: