docker-mysql容器的主从同步

mysql主从复制同步
一 前提条件
1 具有docker环境的centos7

yum install docker -y
systemctl enable --now docker

2 mysql镜像5.7.28

docker pull mysql:5.7.28

二 mysql集群配置文件
1 创建配置集结构如下

mkdir -p /data/mysql/data/master      MySQL主库数据位置 
mkdir -p /data/mysql/data/slave       MySQL从库数据位置 
mkdir -p /data/mysql/master           MySQL主库配置文件
mkdir -p /data/mysql/slave            MySQL主库配置文件

2 创建节点配置文件(master.cnf与slave.cnf)
主库配置

cd /data/mysql/master
vi master.cnf

主库配置文件如下

[mysqld]
user=mysql
character-set-server=utf8
lower_case_table_names = 1
#开启mysql的binlog日志功能
log-bin=mysql-bin                   
#开启主从在局域网内应该有唯一的server_id  1~255
server_id=1
#控制数据库的binlog刷到磁盘上去 , 0 不控制,性能最好,1每次事物提交都会刷到日志文件中,性能最差,最安全
sync_binlog=1 
#binlog日志格式,mysql默认采用statement,建议使用mixed
binlog_format=MIXED
#binlog过期清理时间
expire_logs_days=7
#binlog每个日志文件大小
max_binlog_size=200m
#binlog缓存大小
binlog_cache_size=4m
#最大binlog缓存大
max_binlog_cache_size=512m
#不生成日志文件的数据库,多个忽略数据库可以用逗号拼接,或者 复制这句话,写多行
binlog-ignore-db=mysql
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

从库配置

cd /data/mysql/slave
vi slave.cnf

从库配置文件如下

[mysqld]
user=mysql
character-set-server=utf8
lower_case_table_names = 1
server_id=2
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

3.搭建mysql环境
⑴.从dockerhub中pull一个5.7.28的镜像

docker pull mysql:5.7.28

⑵.创建从库容器

docker run  -d --privileged=true --name mysql-slave -p 13306:3306 -v /data/mysql/slave/slave.cnf:/etc/mysql/my.cnf -v /data/mysql/data/slave:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7.28

⑶.创建主库容器

docker run  -d --privileged=true --name mysql-master-p 23306:3306 -v /data/mysql/master/master.cnf:/etc/mysql/my.cnf -v /data/mysql/data/master:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7.28

–privileged=true:赋予权限
–name:别名
-p :端口映射
-v:容器数据卷my.cnf为配置文件
MYSQL_ROOT_PASSWORD:mysql数据库的账号密码

⑷.查看运行状态
docker ps |grep mysql
全部在运行状态就是正常的
#查看启动的容器相关信息
docker inspect master容器ID #172.17.0.3 此IP是我本机的,使用自己的就行
docker inspect salve容器ID #172.17.0.4 此IP是我本机的,使用自己的就行
在这里插入图片描述
⑸.进入master容器内部

docker exec -it master容器ID /bin/bash

⑹.登录master节点

mysql -uroot -p
#然后输入密码

⑺.为master创建复制用户,并授权

CREATE USER syncuser IDENTIFIED BY '123456';
grant replication slave on *.* to 'syncuser '@'172.17.0.4'  identified by '123456';
GRANT ALL PRIVILEGES ON *.* TO 'syncuser '@'%';
grant ALL PRIVILEGES on *.* to syncuser@'localhost' identified by '123456';
FLUSH PRIVILEGES;

⑻.查看master的状态

SHOW MASTER STATUS;

在这里插入图片描述
⑼.进入slave容器内部

docker exec -it slave容器ID /bin/bash

⑽.登录slave节点,配置slave

mysql -uroot -p
#然后输入密码
CHANGE MASTER TO MASTER_HOST='172.17.0.3',MASTER_USER='syncuser',MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=1476,MASTER_RETRY_COUNT = 60,MASTER_HEARTBEAT_PERIOD = 10000;#在副本创建master链接

#参数配置
master_host:主节点mysql的IP地址
master_user:主节点mysql登陆用户的用户名
master_password:主节点mysql登陆用户的密码
master_log_file:主节点mysql的日志文件指定
master_log_pos:主节点mysql的Ppsition的ID

⑾.启动slave,查看slave状态

start slave; #不带任何参数,表示同时启动I/O 线程和SQL线程。I/O线程从主库读取bin log,并存储到relay log中继日志文件中。SQL线程读取中继日志,解析后,在从库重放。
show slave status\G #查看slave状态

在这里插入图片描述
Slave_IO_Running:YES
Slave_SQL_Running:YES
#表示主从复制已经启动完成

⑿.在master中创建数据验证

create database syncmysql;#创建库
use syncmysql;#选择库
create table slave_test(id int(6),name varchar(10));#创建表
insert into slave_test values(000001,'ok');#插入数据
FLUSH PRIVILEGES;#刷新缓存
show tables;#查看表列表

⒀.在slave中验证,结果如下图
在这里插入图片描述
4.关闭主从复制
如果需要关闭主从复制,执行下面的命令

stop slave#完成停止I/O 线程和SQL线程的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值