【docker】docker实现mysql主从配置(转载)

前言


参考文章

实战


1、创建3个数据库容器,分别为:mysql-3306-master、mysql-3307-slave,mysql-3308-slave;
2、修改主库my.cnf配置、修改从库my.cnf配置
3、启动主从同步

创建容器

1、创建容器挂载目录和文件
需要把3个容器的挂载目录都创建出来

mkdir -p \
/Users/qilongsun/docker-data/mysql-3306/data \
/Users/qilongsun/docker-data/mysql-3306/conf \
/Users/qilongsun/docker-data/mysql-3307/data \
/Users/qilongsun/docker-data/mysql-3307/conf \
/Users/qilongsun/docker-data/mysql-3308/data \
/Users/qilongsun/docker-data/mysql-3308/conf

创建文件

touch \
/Users/qilongsun/docker-data/mysql-3306/conf/my.cnf \
/Users/qilongsun/docker-data/mysql-3307/conf/my.cnf \
/Users/qilongsun/docker-data/mysql-3308/conf/my.cnf

2、创建3个容器
创建容器

docker run -p 3306:3306 \
--name mysql-3306-master \
-v /Users/qilongsun/docker-data/mysql-3306/data:/var/lib/mysql  \
-v /Users/qilongsun/docker-data/mysql-3306/conf/my.cnf:/etc/my.cnf  \
-e MYSQL_ROOT_PASSWORD=root -d mysql:latest \

docker run -p 3307:3306 \
--name mysql-3307-slave \
-v /Users/qilongsun/docker-data/mysql-3307/data:/var/lib/mysql  \
-v /Users/qilongsun/docker-data/mysql-3307/conf/my.cnf:/etc/my.cnf  \
-e MYSQL_ROOT_PASSWORD=root -d mysql:latest \

docker run -p 3308:3306 \
--name mysql-3308-slave \
-v /Users/qilongsun/docker-data/mysql-3308/data:/var/lib/mysql  \
-v /Users/qilongsun/docker-data/mysql-3307/conf/my.cnf:/etc/my.cnf  \
-e MYSQL_ROOT_PASSWORD=root -d mysql:latest 

查看是否创建成功

docker ps

修改主从配置

停掉容器,添加主从配置
停掉容器

docker stop mysql-3306-master mysql-3307-slave mysql-3308-slave

添加主库配置

vi /Users/qilongsun/docker-data/mysql-3306/conf/my.cnf

内容如下

[mysqld]
#默认配置
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
#主库配置
#服务器id,默认为1,不可重复
server-id=1
#二进制日志名,默认binlog
#log-bin=binlog
#是否只读,1代表只读,0代表读写
#read-only=0
#需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行(先建好库),不指定则同步整个数据源
#binlog-do-db=t_user
#不同步系统数据库
binlog-ignore-db=mysql
binlog-ignore-db=sys
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema

添加从库配置(3307)

vi /Users/qilongsun/docker-data/mysql-3307/conf/my.cnf

内容如下

[mysqld]
#默认配置
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
#从库配置
#服务器id,默认为1,不可重复
server-id=2
#二进制日志名,默认binlog
#log-bin=binlog

添加从库配置(3308)

vi /Users/qilongsun/docker-data/mysql-3308/conf/my.cnf

内容如下

[mysqld]
#默认配置
skip-host-cache
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
pid-file=/var/run/mysqld/mysqld.pid
#从库配置
#服务器id,默认为1,不可重复
server-id=3
#二进制日志名,默认binlog
#log-bin=binlog

启动3个容器,验证修改的配置

# 启动容器
docker start mysql-3306-master mysql-3307-slave mysql-3308-slave

#进入容器
docker exec -it mysql-3306-master bash

#查看配置
cat ./etc/my.cnf

启动主从同步

这时候,主库从库都已经建立完成。

查看主库binlog文件信息(当前文件数和行数)
每次重启数据库binlog文件数都会加1,行数表示的当前操作在binlog日志中所记录的行数。
在主库下面执行

show master status;

从库连接主库
分别在两个从库下面执行该条sql。
注意:如果binlog文件名称在上面配置中改的话,这里也要改!!!(binlog.000003)

CHANGE MASTER TO 
master_host='172.20.51.131',
master_user='root', 
master_password='root', 
master_port=3306, 
master_log_file='binlog.000003',
master_log_pos=157;

示例:
在这里插入图片描述

分别执行后,然后查询状态

show slave status;

启动同步
分别在两个从库下面执行

启动同步

start slave;

查询启动状态

show master status;

在这里插入图片描述

测试

在主库添加数据库,从库也会一样同步过来
在这里插入图片描述

其他配置


从库连接主库从新连接

## 停止同步(在从库下面执行)
stop slave;

## 重置连接(在从库下面执行)
reset slave;

## 查询主库最新的binlog文件信息(在主库下面执行)
show master master;

## 重新连接(在从库下面执行)
...sql## 查看连接状态(在从库下面执行)
show slave status;

延迟同步

## 单位秒(在从库下面执行)(对应连接状态里面的SQL_Delay字段)
CHANGE MASTER TO master_delay = 3600;

总结


主从连接以后,主库无论是建库、建表、增删改字段 和数据,都能同步到从库;

一旦同步链接断开,似乎只能从头开始同步;

另外,要注意binlog的有效期;

同一个ip下的数据库,只要端口不一样,也是可以做主从同步的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值