【MySQL】MySQL数据库迁移并同步(简单粗暴版)

这篇文章主要描述在主从的情况下,将Master(旧),Slave(旧)两个数据库转移到Master(新),Slave(新)的方法。
关于MySQL数据库(数据)的常用的迁移方法笔者知道两种:
一、是使用lock table将主库的表锁起来,记录binlog的位置,然后使用mysqldump将数据导出成文件,然后在新数据库中导入这个文件,再把主从同步的位置调整到之前记录的binlog的位置。
二、是直接将旧服务器上的数据库的文件复制到新服务器上,然后使用Navicat将数据同步到从库中,也就是今天需要讲的这种方法。
对比两种方法,第一种方法比较安全,但需要锁表,很多时候,项目已经上线在运行的时候很难有可以锁表的机会。而第二种方法比较简单粗暴,同时也比较迅速,但就是不太安全。

在迁移数据之前,首先要做的是对比两个服务器上的数据库的版本是否一致(主要是大版本),如果两个版本不一致,数据迁移的过程中和迁移完的结果都很容易出现一些不可预知的问题(这个即使使用锁表的方法也一样)。

为了说明方便,这里临时使用几个参数:
操作系统:CentOS 6.9
旧服务器:192.168.189.129
新服务器:192.168.189.131
数据库:5.6.19

然后需要记住的是数据库配置文件my.cnf里面的一些变量:
log_bin:binlog开启状态
server-id:
datadir:数据文件路径
socket:socke路径
log-error:错误日志文件路径
pid-file:线程文件路径
tmpdir:
还有一些配置主从同步的时候配置的需要同步或者需要忽略同步的参数(按个人需求)
binlog-ignore-db
binlog-do-db

之后找到129(旧)服务器上mysql数据文件的存放位置,一般都在/var/lib/mysql
然后将里面的所有文件使用rsync命令复制到131(新)服务器上,注意,要用rsync,如果直接使用CP的话,文件传送到新服务器上之后,文件的所属和权限都会被改,还有一个要注意的是,建议将文件直接传送到新服务器的目标位置,例如:旧服务器上的数据库文件路径为:/var/lib/mysql 新的服务器上的mysql文件路径也是。那么,指令就该为:

#后面的路径是目标路径
rsync -avz /var/lib/mysql 192.168.189.131:/var/lib/mysql

《【MySQL】MySQL数据库迁移并同步(简单粗暴版)》 发送mysql文件.png

如上图,如果像这样先将文件传送到目标服务器的一个临时文件夹,然后再将这些文件转移到最终路径的话会很容易出现文件损坏或者文件权限被改变得问题。

在传送到目标文件之后,需要改变配置文件,要将这个配置文件的变量的值改为刚刚记住的那个配置文件的变量的值。
修改完之后就可以使用

service mysqld start

来开启数据库服务器,之后就是登录之类的操作了。如果登录成功和查询数据没问题的话说明数据已经成功迁移过来了。
之后要做的就是做主从数据的同步。
这里使用的是Navicat,在Navicat里面有这个功能

《【MySQL】MySQL数据库迁移并同步(简单粗暴版)》 image.png

源的话选择新的数据库(Master)就好了,目标就是就是新的Slave了,在做同步之前,最好先使用预览功能看看会有什么错误之类的,然后选择需要同步的内容,然后选择开始就行了

《【MySQL】MySQL数据库迁移并同步(简单粗暴版)》

在做完数据同步之后,就可以配置主从了,关于主从的配置可以参考这里:http://www.jianshu.com/p/eed0ca8ba299

需要注意的是:

1、传送数据要用rsync
2、传送的数据最好一步到位,不要为多步执行,即中间不要有“中转站”

其实发现,也可以不用这么麻烦,直接使用Navicat的数据传输,然后数据同步,接着再做主从就好了,这个也列作第三个方法吧。

    原文作者:Catke
    原文地址: https://www.jianshu.com/p/f36c4f4447e9
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞