一、配置主服务器
- 编辑主mysql配置文件my.cnf(vim /etc/my.cnf),在[mysqld]下添加
[mysqld]
# 配置主ID,必须在所有参与主从复制的数据库保证唯一
server-id=1
# 打开二进制日志
log-bin=/var/lib/mysql/mysql-bin.log
# 只允许同步ente_database数据库(可选配置),不配置同步所有
binlog-do-db=tciot-db
# binlog 保留时间设置为 7 天
expire_logs_days=7
- 启动主数据库,并登陆mysql数据库
#docker进入mysql方法
docker exec -it mysql bash
#登陆
mysql -u root -p123456
- 锁定主数据库中所有表,防止配置从数据库时,数据变动
mysql> flush tables with read lock;
- 查询主数据库状态
SHOW BINARY LOG STATUS;
显示结果
记住file,position,稍后要用到
二、配置从数据库
ps:需要再启动一个从数据库
sudo docker run -d -p 3308:3306 \
--name mysql2 --privileged=true \
-v /opt/tciot/mysql2/data:/var/lib/mysql \
-v /opt/tciot/mysql2/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
registry.cn-hangzhou.aliyuncs.com/wst-srv/mysql:8
- 编辑从mysql配置文件my.cnf(vim /etc/my.cnf),在[mysqld]下添加
从库-主从配置
# 唯一ID
server-id=2
relay_log=/var/lib/mysql/mysql-relay-bin.log
replicate-do-db=tciot-db
expire_logs_days=7
-
从主数据库拷贝需要同步的表数据,必须保证数据一致
使用Navicat 15 for MySQL连接2个数据库,把主数据库的数据同步到从数据库 -
执行同步SQL语句
#登陆
mysql -u root -p123456#设置主库信息
CHANGE REPLICATION SOURCE TOSOURCE_HOST = '192.168.44.128',SOURCE_PORT = 3307,SOURCE_USER = 'root',SOURCE_PASSWORD = '123456', SOURCE_LOG_FILE = 'mysql-bin.000001', #主服务器通过(SHOW BINARY LOG STATUS;)查询出来结果中的File值;SOURCE_LOG_POS = 158; # 主服务器通过(SHOW BINARY LOG STATUS;)查询出来结果中的Position值;
- 开始同步
START REPLICA;
- 查看从数据库状态
SHOW REPLICA STATUS\G;
显示结果
这2项显示Yes,表示配置成功
- 打开主数据库的表锁
mysql> UNLOCK TABLES;
三、异常情况
短暂断网:从库会自动恢复,需关注延迟。
- 长时间断网:可能需手动重建复制或重新初始化从库。
其他方案
docker启动的方式配置MySQL配置文件
查看docker启动可选配置
docker run -it --rm mysql:tag --verbose --help
查看是否有server-id、log-bin、binlog-do-db、replicate-do-db等参数
主库
sudo docker run -d -p 3309:3306 \
--name mysql3 --privileged=true \
-v /opt/tciot/mysql3/data:/var/lib/mysql \
-v /opt/tciot/mysql2/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
registry.cn-hangzhou.aliyuncs.com/wst-srv/mysql:8 --server-id=1 --log-bin=/var/lib/mysql/mysql-bin.log --binlog-do-db=tciot-db
从库
sudo docker run -d -p 3308:3306 \
--name mysql2 --privileged=true \
-v /opt/tciot/mysql2/data:/var/lib/mysql \
-v /opt/tciot/mysql2/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
registry.cn-hangzhou.aliyuncs.com/wst-srv/mysql:8 --server-id=2 --log-bin=/var/lib/mysql/mysql-relay-bin.log --replicate-do-db=tciot-db
其他操作和前面一致
备注
binlog清理策略默认设置30天,如果需要可手动设置
[mysqld]
expire_logs_days = 7
如果希望从库的库名和主库不一致
从库的配置文件binlog-do-db改成和主库不一致的
replicate-do-db=tciot-di
从库输入下面语句,将主库和从库映射起来
CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB=((`tciot-db`, `tciot-di`));
再开始同步