1、新建主服务容器实例3310
================================
docker run -d -p 3310:3306 --name mysql-master \
-v /Users/iuu/Developer/docker/mysql/master/log:/var/log/mysql \
-v /Users/iuu/Developer/docker/mysql/master/data:/var/lib/mysql \
-v /Users/iuu/Developer/docker/mysql/master/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-e LANG="C.UTF-8" \
mysql:latest
================================
2、新建my.cnf
================================
[mysqld]
# 设置server_id 同一局域网中要唯一
server_id=101
# 无需开启二进制日志文件的数据库
# 多个数据库则要重复设置
binlog-ignore-db=mysql
# 打开二进制日志功能.
# 在复制(replication)配置中,作为MASTER主服务器必须打开此项
# 如果你需要从你最后的备份中做基于时间点的恢复,你也同样需要二进制日志.
log-bin=mall-mysql-bin
# 在一个事务中binlog为了记录SQL状态所持有的cache大小
# 如果你经常使用大的,多声明的事务,你可以增加此值来获取更大的性能.
# 所有从事务来的状态都将被缓冲在binlog缓冲中然后在提交后一次性写入到binlog中
# 如果事务比此值大, 会使用磁盘上的临时文件来替代.
# 此缓冲在每个连接的事务第一次更新状态时被创建
binlog_cache_size=10M
# binlog日志格式
# mysql默认采用statement,建议使用mixed
binlog_format=mixed
# 超过指定天数的binlog将被删除
# 二进制日志过期时间设置为7天(7天 = 7 * 24 * 60 * 60 秒)
binlog_expire_logs_seconds = 604800
# 主从复制跳过错误
# 1062 指一些主键重复
# 1032 主从数据库数据不一致
# 跳过指定error no类型的错误
# slave-skip-errors=1062,1053,1146
# 跳过所有错误
# slave-skip-errors=all
slave-skip-errors=1062
================================
3、修改完配置后重启 master 实例
================================
docker restart mysql-master
================================
4、进入master容器
================================
docker exec -it mysql-master /bin/bash
mysql -uroot -p
show databeses;
================================
5、master 容器实例内创建数据同步用户
================================
创建用户
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
授权
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';
================================
6、新建从服务器实例 3311
================================
docker run -d -p 3311:3306 --name mysql-slave \
-v /Users/iuu/Developer/docker/mysql/slave/log:/var/log/mysql \
-v /Users/iuu/Developer/docker/mysql/slave/data:/var/lib/mysql \
-v /Users/iuu/Developer/docker/mysql/slave/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-e LANG="C.UTF-8" \
mysql:latest
================================
7、新建my.cnf
================================
[mysqld]
# 设置server_id 同一局域网中要唯一
server_id=102
# 无需开启二进制日志文件的数据库
# 多个数据库则要重复设置
binlog-ignore-db=mysql
# 打开二进制日志功能.
# 在复制(replication)配置中,作为MASTER主服务器必须打开此项
# 如果你需要从你最后的备份中做基于时间点的恢复,你也同样需要二进制日志.
log-bin=mall-mysql-slave1-bin
# 在一个事务中binlog为了记录SQL状态所持有的cache大小
# 如果你经常使用大的,多声明的事务,你可以增加此值来获取更大的性能.
# 所有从事务来的状态都将被缓冲在binlog缓冲中然后在提交后一次性写入到binlog中
# 如果事务比此值大, 会使用磁盘上的临时文件来替代.
# 此缓冲在每个连接的事务第一次更新状态时被创建
binlog_cache_size=10M
# binlog日志格式
# mysql默认采用statement,建议使用mixed
binlog_format=mixed
# 超过指定天数的binlog将被删除
# 二进制日志过期时间设置为7天(7天 = 7 * 24 * 60 * 60 秒)
binlog_expire_logs_seconds = 604800
# 主从复制跳过错误
# 1062 指一些主键重复
# 1032 主从数据库数据不一致
# 跳过指定error no类型的错误
# slave-skip-errors=1062,1053,1146
# 跳过所有错误
# slave-skip-errors=all
slave-skip-errors=1062
# 配置中继日志
relay_log=mall-mysql-relay-bin
# 启用从库记录复制操作到自己的二进制日志
log_slave_updates = ON
# 限制一个 MySQL 实例的读写操作。
# 0 允许读写操作(默认行为)
# 当设置为 1 时,表示只允许读操作,而写操作会被拒绝
read_only=1
================================
8、修改完配置后重启 slave 实例
================================
docker restart mysql-slave
================================
9、在主数据库中查看主从同步状态
================================
show master status;
================================
10、进入 slave 服务器
================================
docker exec -it mysql-slave /bin/bash
mysql -uroot -p
show databeses;
================================
11、在从数据库中配置主从复制
================================
change master to
master_host='192.168.1.8',
master_user='slave',
master_password='123456',
master_port=3310,
master_log_file='mall-mysql-bin.000002',
master_log_pos=712,
master_connect_retry=30;
================================
12、在从数据库中查看主从同步状态
================================
show slave status \G;
show slave status;
看这两个参数
Slave_IO_Running: No
Slave_SQL_Running: No
================================
13、在从数据库中开启主从同步
================================
start slave;
================================
14、查看从数据库状态发现已经同步
================================
show slave status \G;
================================
15、主从复制测试
================================
主机新建库
create database db01;
主机新建表
use db01;
create table t1 (id int, name varchar(20));
主机插入数据
insert into t1 values(1,'张三');
主机查看数据
select * form t1;
从机查看数据
select * form t1;
================================
本文为北溟有鱼QAQ原创文章,转载无需和我联系,但请注明来自北溟有鱼QAQ https://www.amdzz.cn
最新评论