用docker 实现 mysql 主从同步
docker模拟mysql主从复制集群
1. mysql镜像下载 docker pull mysql:5.7 2.主节点创建 2.1 创建master实例,并启动 master: docker run -p 3307:3306 --name mysql-master \ -v /opt/mysql/master/log:/var/log/mysql \ -v /opt/mysql/master/data:/var/lib/mysql \ -v /opt/mysql/master/conf:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORD=root \ -d mysql:5.7 2.2 修改master配置 vim /opt/mysql/master/conf/my.cnf master conf配置: [mysql] default-character-set=utf8 [mysqld] init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake skip-name-resolve server_id=1 #指定集群id log-bin=mysql-bin #打开二进制日志功能 read-only=0 #关闭只读,可读可写 binlog-do-db=test_db #指定mysql的binlog日志记录哪个db binlog-do-db=bigdata binlog-do-db=admin replicate-ignore-db=mysql #用来设置不需要同步的库,此处指定的mysql系统库 replicate-ignore-db=sys replicate-ignore-db=information_schema replicate-ignore-db=performance_schema 2.3 重启mysql-master节点 docker restart mysql-master 3.从节点创建 3.1 创建slaver节点并启动 slave: docker run -p 3317:3306 --name mysql-slaver-01 \ -v /opt/mysql/slaver/log:/var/log/mysql \ -v /opt/mysql/slaver/data:/var/lib/mysql \ -v /opt/mysql/slaver/conf:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORD=root \ --link mysql-master:mysql-master\ -d mysql:5.7 3.2 修改slaver 配置 vim /opt/mysql/slaver/conf/my.cnf slaver-01配置: [client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] init_connect='SET collation_connection = utf8_unicode_ci' init_connect='SET NAMES utf8' character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake skip-name-resolve server_id=2 #注意此处id不能与主节点相同 log-bin=mysql-bin read-only=1 binlog-do-db=test_db #指定mysql的binlog日志记录哪个db binlog-do-db=bigdata binlog-do-db=admin replicate-ignore-db=mysql replicate-ignore-db=sys replicate-ignore-db=information_schema replicate-ignore-db=performance_schema 3.3 重启slaver节点 docker restart mysql-slaver-01 4.为 master 授权用户来他的同步数据 4.1. 进入容器内部 docker exec -it mysql-master /bin/bash 4.2. 进入mysql内部 mysql -uroot -proot 4.3. 添加用来同步的用户 GRANT REPLICATION SLAVE ON *.* to 'fly'@'%' identified by '123456'; 注: fly: 账户名 123456: 密码 4.4. 查看master状态 show master status;
5.为 slaver-01授权用户来他的同步数据 5.1. 进入容器内部 docker exec -it mysql-slaver-01 /bin/bash 5.2. 进入mysql内部 mysql -uroot -proot 5.3. 设置主库连接 change master to master_host='47.**7.4.1*4',master_user='fly',master_password='123456',master_log_file='mysql-bin.000006',master_log_pos=0,master_port=3307; 注: master_host: 服务器ip master_log_file必须与 master状态表中的File字段的值一致 5.4. 启动主从同步 start slave;
5.5. 查看slaver状态
show SLAVE status;
半同步复制:
0. 查看主从节点是否有 rpl_semi_sync_master插件;
show plugins
1. 分别在主从节点下载插件
install plugin rpl_semi_sync_master soname 'semisync_master.so';
install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
2. 修改主从节点的 my.cnf配置文件
rpl_semi_sync_master_enable=1 # 1:半同步复制开启 0:主从半同步关闭
rpl_semi_sync_master_timeout=10000 #单位毫秒,用来配置主库等待从库写入relay-log日志成功的 ack通知时间;
注:
若超时, 则切换为 异步同步模式, 并返回事务 提交成功给客户端
rpl_semi_sync_slave_enable=1 # 1:半同步复制开启 0:主从半同步关闭
3. 分别重启 主从节点
docker restart mysql-master
docker restart mysql-slave01
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2019-07-01 选择器 常用样式 布局