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容器
docker exec -it mysql-master /bin/bash mysql -uroot -proot
执行SQL
#设置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
[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实例
docker restart mysql-slave
8. 在主数据库中查看主从同步状态
show master status;
9.进入mysql-slave容器
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
浙公网安备 33010602011771号