这次的MySQL数据库迁移,是从中国联通到AWS,而AWS由于封装了一些操作,因此命令上会和中国联通的略微不同(中国联通只使用常规的MySQL命令)
以下的步骤是设置成master-master的关系
1. 在AWS和联通上创建用于replication的用户repl
CREATE USER 'repl'@'#IP#' IDENTIFIED BY '#password#';
GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'repl'@'#IP#' IDENTIFIED BY '#password#';
由于我设置的是master-master关系,所以需要分别在AWS和联通上运行一次,如果只是master-slave,那么只需要在master上运行即可
2. 确保timezone一致
SELECT @@global.time_zone, @@session.time_zone;
master-slave的话这步可以跳过,但是master-master的话,必须确认两台mysql的timezone是一致的,否则同步的时候会出现error,mysql官网上也建议timezone一致
在/etc/my.cnf中添加timezone信息
timezone=’UTC’
添加timezone相关的data
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql -p
FLUSH TABLES WITH READ LOCK;
SET GLOBAL read_only = ON;
show master status;
show slave status;
mysqldump --databases #数据库名字# --single-transaction --compress --order-by-primary -u root -p#联通root密码# | mysql --host=#AWS endpoint# --port=3306 -u #aws root密码# -p
6. 释放锁
SET GLOBAL read_only = OFF;
UNLOCK TABLES;
联通:
CHANGE MASTER TO MASTER_HOST = 'aws ip', MASTER_USER = 'repl', MASTER_PASSWORD = 'repl的密码', MASTER_LOG_FILE = ‘#bin log name#', MASTER_LOG_POS = #position#;
call mysql.rds_set_external_master ('联通IP', 3306, 'repl', 'repl密码', '#bin log name#', #position#, 0);
联通:
start slave;
call mysql.rds_start_replication;