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