1. 创建EC上的数据库
要安装RDS对应的版本,上RDS执行
select version(); -- 返回 8.0.16
这里贴我使用的 docker-compose.yaml
... ...
mysql:
container_name: mysql
# 根据自己的版本
image: mysql:8.0.16
volumes:
- ./mysql/my.cnf:/etc/mysql/conf.d/my.cnf
- ./mysql/data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=root
ports:
- 3307:3307
command: ['--default-authentication-plugin=mysql_native_password']
... ...
对应的 my.cnf
[mysqld]
server_id = 2 #指定从库的server_id,不能与主库相同
read_only = 1 #设置从库为只读
port = 3307 #指定端口号为3307,最好不要跟主库相同
replicate-do-db = test_db #需要同步的数据库名字
replicate-ignore-db = mysql #不需要同步的数据库
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
bind-address = 0.0.0.0 #开放端口
log-bin = mysql-bin #二进制日志,记录对数据发生变化的sql语句,以二进制方式保存在磁盘中
log-bin-index = mysql-bin.index #指定索引文件,此文件指示当前使用了哪个日志文件
relay-log = relay-log #中继日志,用来存放master的bin中的内容,看上方原理
relay_log_index = relay-log.index #指定索引文件,此文件指示当前使用哪个日志文件
binlog_format = ROW #binlog的格式,ROW格式记录方式成每一行数据被修改,然后在slave端再对相同的数据进行修改
gtid_mode = on #开启GTID
enforce_gtid_consistency = on #只记录对基于GTID的复制安全
log-slave-updates = 1 #允许下端接入slave
[mysqldump] #数据库备份
quick #强制mysqldump从服务器一次一行地检索表中的行而不是检索所有行并在输出前将它缓存到内存中
创建数据库
docker-compose up -d
2. 利用数据传输服务拷贝数据
登陆阿里数据传输服务,选择数据迁移,选择对应RDS所在地域,创建数据迁移,填写配置,预检查,然后先不要进行下一步
页面别关,用另外页面进RDS,执行
show master status;
得到类似下面这样的数据
保存一下 Executed_Gtid_Set 字段结果
点下一步执行数据迁移,等待数据迁移结束
进 docker容器内从库,执行
--- 这里改外之前自己保存的 Executed_Gtid_Set 字段的值
set global gtid_purged="323cc70c-27a0-11ea-9d0a-00163e0c804c:1-27250225,c63d9d7d-5d0f-11ea-ab2b-0242c0a85005:1-195";
再执行
CHANGE MASTER TO
master_host = 'RDS数据库地址',
master_user = '数据库用户名',
master_password = '密码',
master_auto_position = 1;
最后启动
start slave;
查看是否成功
show slave status;