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

问题的起因
      有一台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> 启动服务。

你可能感兴趣的:(Linux)