启动 mysql 容器(配置主服务器)
docker run -p 3307:3306 --name mysql-master \
-v /tmp/mysql/mysql-master/log:/var/log/mysql \
-v /tmp/mysql/mysql-master/data:/var/lib/mysql \
-v /tmp/mysql/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
docker ps 执行上列一条启动命令之后查看验证 -v映射的目录,-p映射的端口是否正常。
vim /tmp/mysql/mysql-master/conf/my.cnf 编辑配置文件加入如下内容
[mysqld]
#设置server_id 同一局域网中需要唯一
server_id=101
#指定不需要同步的数据库名称
binlog-ignore-db=mysql
#开启二进制日志功能
log-bin=mall-mysql-bin
#设置二进制日志使用内存的大小
binlog_cache_size=1M
#设置使用二进制日志的格式
binlog_format=mixed
#二进制日志过期清理时间,默认为零,表示不自动清理
expire_logs_days=7
#跳过主从复制中遇到的所有错误或指定错误的类型格式,避免slave端复制终端
#例如:1062错误是指一些主键重复,1032是因为主从数据库数据不一致
slave_skip_errors=1062
docker restart mysql-master 重启mysql容器
docker ps 查看验证是否重启成功,重启失败就是配置文件错误,请排查配置文件是否编辑有误。
docker exec -it mysql-master /bin/bash
mysql -uroot -p 输入上面指定的密码“root” 登入数据库
create user 'zhangsan'@'%' identified by '123456'; 创建用户
grant replication slave, replication client on *.* to 'zhangsan'@'%'; 授权
配置MySQL从数据库
docker run -p 3308:3306 --name mysql-zhangsan \
-v /tmp/mysql/mysql-zhangsan/log:/var/log/mysql \
-v /tmp/mysql/mysql-zhangsan/data:/var/lib/mysql \
-v /tmp/mysql/mysql-zhangsan/conf/:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
docker ps 执行上列一条启动命令之后查看验证 -v映射的目录,-p映射的端口是否正常。
vim /tmp/mysql/mysql-zhangsan/conf/my.cnf
[mysqld]
#设置server_id 同一局域网中需要唯一 主机设置的101 从机设置的102 千万不要重复
server_id=102
#指定不需要同步的数据库名称
binlog-ignore-db=mysql
#开启二进制日志功能 以备zhangsan作为其他数据库实例的Master时使用
log-bin=mall-mysql-zhangsan1-bin
#设置二进制日志使用内存的大小
binlog_cache_size=1M
#设置使用二进制日志的格式
binlog_format=mixed
#二进制日志过期清理时间,默认为零,表示不自动清理
expire_logs_days=7
#跳过主从复制中遇到的所有错误或指定错误的类型格式,避免slave端复制终端
#例如:1062错误是指一些主键重复,1032是因为主从数据库数据不一致
slave_skip_errors=1062
#relay_log 配置中继日志
relay_log=mall-mysql-relay-bin
#表示salve将复制事件写进自己的二进制日志中
log-slave_updates=1
#设置从机为只读
read_only=1
docker restart mysql-zhangsan
docker ps 重启之后查看 STATUS 列表中的运行时间可验证是否重启成功。
在主数据库中查看信息并验证
mysql -uroot -p
show master status; 执行该命令 拿到下图中的信息,用于下方配置主从复制
在从数据库中配置主从复制
docker exec -it mysql-zhangsan /bin/bash 登入从数据库容器
mysql -uroot -p 登入从数据库 执行下面命令
change master to master_host='192.168.XX.XX',\
master_user='zhangsan', master_password='123456',\
master_port=3307, master_log_file='mall-mysql-bin.000001', \
master_log_pos=623, master_connect_retry=30;
PS: 下列有参数说明的参考。
show slave status \G;
在从数据库中执行验证主从同步状态,NO 表示还没开始,因为还未配置,如下图一所示:
start slave;
在从数据库中开启主从同步状态,(开启从数据库)
开启之后 查看下图中的 “NO” 是否变为 “Yes” Yes 表示开始同步
主从复制测试
测试流程:
主库 新建库-使用库-新建表-插入数据 如下图一所示
从库 使用库-查看记录(读) 如下图二所示
主从复制参数说明
master_host 主数据库的IP地址
master_port 主数据库的运行端口
master_user 在主数据库创建的用于同步数据的用户账户
master_password 在主数据库创建的用于同步数据的用户账户的密码
master_log_file 指定从数据库要复制数据的日志文件,通过查看主数据的状态,获取File参数
master_log_pos 指定从数据库要从哪个位置开始复制数据,通过查看主数据库的数据,获取Position参数
master_connect_retry 连接失败重试的时间间隔,单位为妙。
标签:主从复制,log,数据库,MySQL,master,mysql,docker,zhangsan
From: https://blog.51cto.com/cyfang/6719963