二,迁移方案
协同开发同学商量后,决定采用前期导入数据,并通过otter实时同步,然后切换业务的方式进行。具体如下:
现有数据库迁移到新服务器
A,新服务器上启动新数据库,并采用mysql级联复制:未来新的master挂载到现有数据库的master进行数据同步,并在它下面挂载两个slave进行数据同步,作为未来的slave;
B,切换时停止应用,确认主从同步状态,修改业务数据库地址配置为新的地址,启动应用;
2.跨库迁移i表,并实时同步
A,用mydumper(比mysqldump快,并能记录binlog位置)导出A库中迁移的表数据;并用myloader导入到B库中;
B,根据导出的binlog位置配置otter进行数据同步;
3.业务切换
A,停止业务,停止otterb,并删除已完成同步的表配置(部分表需要长期)
B,启动otter,修改业务数据库地址配置为新的地址,启动应用;
C,后续业务改造,跨系统调用改为接口(禁止直接写表)方式,并最终停止otter;
三,迁移过程中的注意事项
1. 迁移的表数量和名字反复确认;
2. mysql级联复制时候需要开启 log_slave_updates;
3. otter配置存放的数据库,需要忽略大小写;同步源和目标数据库需要字符集一致(utf-8);
4. myloader导入时候,需要开启 -e选项,否则导入数据不会记录binlog中;
四,mysqldump , mydumper/myloader速度比较
五,mydumper/myloader简单使用说明
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, REFERENCES, INDEX, ALTER, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, EVENT, TRIGGER ON *.* TO mydumper‘@‘192.168.1.%‘ identified by ‘123456‘;
/usr/bin/mydumper -u mydumper -p 123456 -h 192.168.1.1 -P 3306 -B db_a -T test1 test2 -t 8 -o /dumper/ &
/usr/bin/myloader -u root -p 123456 -S /tmp/mysql.sock -t 8 -o -e -B db_b -d /dumper/ &
原文:https://blog.51cto.com/emulator/2364191