Docker学习8 - 安装Mysql主从复制
1.主从搭建步骤
1.新建主服务器容器实例3307
docker run -p 3307:3306 --name mysql-master \
-v /usr/mydata/mysql-master/log:/var/log/mysql:rw \
-v /usr/mydata/mysql-master/data:/var/lib/mysql-files:rw \
-v /usr/mydata/mysql-master/conf:/etc/mysql:rw \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:8.0.21
2. 进入/usr/mydata/mysql-master/conf目录下新建my.cnf
[mysqld] ## 设置server_id,同一局域网中需要唯一 server_id=101 ## 指定不需要同步的数据库名称 binlog-ignore-db=mysql ## 开启二进制日志功能 log-bin=mall-mysql-bin ## 设置二进制日志使用内存大小(事务) binlog_cache_size=1M ## 设置使用的二进制日志格式(mixed,statement,row) binlog_format=mixed ## 二进制日志过期清理时间。默认值为0,表示不自动清理。 expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=1062
3.修改完配置后重启master实例
docker restart mysql-master
4.进入mysql-master容器
1 2 | docker exec -it mysql-master /bin/bash mysql -uroot -proot |
执行SQL
1 2 3 4 5 | #设置log set session binlog_format=STATEMENT; #重点 查看master 需要记录 File 和 Position 用于从库配置 show master status; |
设置mater开启远程访问(可用navicat连接)
设置mater开启远程访问(可用navicat连接) # 切换到mysql数据库 use mysql; # 查询 user 表root用户访问权限 select user ,host,plugin from user ; # 设置root用户访问权限和密码加密类型 # 默认root用户的host为localhost(本地连接),远程连接我们需要修改为% update user set host= '%' where user = 'root' ; # 修改密码插件,mysql8默认是caching_sha_password alter user 'root' @ '%' identified by 'root' password expire never; alter user 'root' @ '%' identified with mysql_native_password by 'root' ; # 设置为mysql_native_password后可以通过Navicat等工具连接 # 刷新 flush privileges ; # 退出 exit; |
5.新建从服务器容器实例3308
docker run -p 3308:3306 --name mysql-slave \
-v /usr/mydata/mysql-slave/log:/var/log/mysql:rw \
-v /usr/mydata/mysql-slave/data:/var/lib/mysql-files:rw \
-v /usr/mydata/mysql-slave/conf:/etc/mysql:rw \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:8.0.21
6.进入/usr/mydata/mysql-slave/conf目录下新建my.cnf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | [mysqld] ## 设置server_id,同一局域网中需要唯一 server_id=102 ## 指定不需要同步的数据库名称 binlog-ignore-db=mysql ## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用 log-bin=mall-mysql-slave1-bin ## 设置二进制日志使用内存大小(事务) binlog_cache_size=1M ## 设置使用的二进制日志格式(mixed,statement,row) binlog_format=mixed ## 二进制日志过期清理时间。默认值为0,表示不自动清理。 expire_logs_days=7 ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致 slave_skip_errors=1062 ## relay_log配置中继日志 relay_log=mall-mysql-relay-bin ## log_slave_updates表示slave将复制事件写进自己的二进制日志 log_slave_updates=1 ## slave设置为只读(具有super权限的用户除外) read_only=1 |
7. 修改完配置后重启slave实例
1 | docker restart mysql-slave |
8. 在主数据库中查看主从同步状态
1 | show master status; |
9.进入mysql-slave容器
1 2 | docker exec -it mysql-slave /bin/bash mysql -uroot -proot |
10.在从数据库中配置主从复制
# 如果已经执行过的需要先执行一下两条命令 stop slave; reset master; #执行这条命令 CHANGE MASTER TO MASTER_HOST= '127.0.0.1' , MASTER_PORT=3307, MASTER_USER= 'root' , MASTER_PASSWORD= 'root' , master_log_file= 'mall-mysql-bin.000001' , master_log_pos=3738, master_connect_retry=60; CHANGE MASTER TO MASTER_HOST=master的ip地址,如果是服务器相同的话直接用服务器ip地址即可, MASTER_PORT= master的端口, MASTER_USER=mysql连接用户名, MASTER_PASSWORD=mysql连接密码, master_log_file= master上查看的File, master_log_pos= master查看到的Position , master_connect_retry=60; #启动 slave 服务 start slave; #查看是否启动成功 show slave status\G; |
11.修改从库root密码加密方式
alter user 'root' @ '%' identified by 'root' password expire never; alter user 'root' @ '%' identified with mysql_native_password by 'root' ; flush privileges ; |
12.主从复制测试
主机新建库-使用库-新建表-插入数据,ok
从机使用库-查看记录,ok
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了