mysql数据库迁移
分享一个处理mysql数据量大的话迁移的方法
一天晚上,生产环境下,一个用户分析数据库挂掉了,原因是服务器磁盘只读了,但是又不敢重启只好迁移了。
找到datadir目录下du -sh * 看了一下吓死了。240G大!
一般我们都会做一个主从数据库,就是为了备份数据方便宕机的时候快速切换过来,可是这台机器很早就有,现在没有从库备份,这就麻烦了。
现在脑子里两种方案:
- 数据库直接导出,拷贝文件到新服务器,在新服务器上导入。
-
数据文件和库表结构文件直接拷贝到新服务器,挂载到同样配置的MySQL服务下。
第一种方案时间太长240G啊什么概念,那要导到什么时候,虽然说第二种方案也是非常耗时的,但是想不第一种还较为快点。犹豫了一会采用第二种方案。
操作步骤
服务器只读了,并不代表不可以传文件。所以找了一台磁盘容量大点的可以存放的下这240G大量数据的服务器。
- 两台服务器保证Mysql版本一致,安装配置一致
- 停止两边的Mysql服务
- 删除B服务器Mysql的datadir(my.cnf里面设置的datadir参数)目录下所有文件
- 用rsync服务开始传datadir下面的文件(A服务器--迁移-->B服务器)
- 启动B服务器的Mysql服务,测试
迁过去后有个报错:
这时候才想起来用rsync传的时候目录使用的nobody权限,启动是要MySQL用户权限的。查了查资料也是说要修改目录权限。修改完之后,启动没有问题了。
如果遇到启动不起来然后报错是与ibdata1有关的,建议把my.cnf里面的innodb_buffer_pool_size = 2G参数改下,这个是要根据服务器内存考虑的。或者把他删了重建也行。