一、什么是数据库迁移?
随着业务的增长或机器老化等原因,不可避免会碰到将数据库从一台机器迁移到另一台机器(集群)的问题。数据库迁移可分为冷迁(离线)和热迁(在线实时).
二、如何无缝迁移?
以旧库 192.168.0.101:3306 --> 迁移到192.168.0.102:3307 为例
离线迁移很简单.
.Shell>> mysqldump -uadmin -pxxxx --add-drop-database --database dbname1, dbname2, dbname3 > backup_data.sql # 利用mysqldump 命令导出数据库 . Shell>> sudo services mysqld stop # 导出后停掉远离数据库服务器,防止再写入. . Shell >> scp bakup_data.sql admin@192.168.0.102:/data/ # 将数据库上传到新机器. . mysql> source backup_data.sql # 登录新机器mysql后,用source命令导入即可.
4. 注意通过show tables, select count(*) 等语句检查一下数据一致性。
5. 开启mysql-proxy 将建立到旧库到新库的代理转发(视业务情况而定,也可直接前端修改源码数据库配置)。
Shell>> mysql-proxy -address 192.168.0.101: --proxy-backend-addresses 192.168.0.102: # 启动mysql-proxy代理,将请求转发到新库。
过一段时间确定无误后,可以将原来机器备份数据 backup_data.sql 删除,以节省空间。
=======
在线迁移,原理一样。只是在数据库导出到导入时,针对较大的数据库耗时较长或比较重要的实时在线业务,开启二进制日志记录,不必停用原有数据库。在上述第三步后,再增量备份一下。
3.1 查看记录点
mysql> show master status或 mysql>show binary logs; # 记住此时原来数据库记录点。(若没有,需要先在配置文件my.cnf中[mysqld]下加一行: log-bin=mysqlbin-log #打开binlog日志记录)
3.2 增量备份
shell>> mysqlbinlog --start-position= --stop-position= mybinlog. > newdata.sql # 将日志记录导出为sql文件.
mysql> source newdata.sql # 导入增量备份数据