docker容器搭建mysql主从服务器

MySQL 主从复制原理

在这里插入图片描述

1.在服务器上建立以下目录

mysql/
├── master
│   ├── config
│   │   └── my.cnf
│   └── data
└── slave
    ├── config
    │   └── my.cnf
    └── data

2.编辑主从数据库配置my.cnf

2.1 主数据库

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= /var/lib/mysql
lower_case_table_names=1
symbolic-links=0
#主服务器唯一ID
server-id=100
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
#binlog-ignore-db=mysql
#binlog-ignore-db=information_schema
#设置需要复制的数据库
#binlog-do-db=spring_boot
#设置logbin格式
#binlog_format=STATEMENT

2.2 从数据库

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= /var/lib/mysql
lower_case_table_names=1
symbolic-links=0
#从服务器唯一ID
server-id=101
log-bin=mysql-bin
#启用中继日志
relay_log=edu-mysql-relay-bin

3. 使用 docker 搭建 mysql

#拉取镜像
docker pull mysql:5.7.29
#搭建主服务器
docker run --name mysql_master -p 23306:3306 --privileged=true \
-v /root/docker/mysql/master/config/my.cnf:/etc/mysql/my.cnf \
-v /root/docker/mysql/master/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.29
#搭建从服务器
docker run --name mysql_slave  -p 23307:3306 --privileged=true \
-v /root/docker/mysql/slave/config/my.cnf:/etc/mysql/my.cnf \
-v /root/docker/mysql/slave/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.29

通过Navicat等连接工具连接数据库连接主服务器,
执行创建用户及授权命令:

create user 'slave'@'%' identified with mysql_native_password by '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

执行show master status;获取以下结果
在这里插入图片描述
在服务器执行docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id获取主服务器容器的独立ip
在这里插入图片描述
连接从服务器,执行以下命令

change master to master_host='172.17.0.4',  # Master 的地址,指的是容器的独立 ip
master_user='slave', #用于数据同步的用户
master_password='123456', #用于同步的用户的密码
master_port=3306, # Master 的端口号,指的是容器的端口号
master_log_file='mysql-bin.000003', #指定 Slave 从哪个日志文件开始复制数据,即上图中的 File 字段的值
master_log_pos= 935, #从哪个 Position 开始读,即上图中的 Position 字段的值
master_connect_retry=30; #如果连接失败,重试的时间间隔,单位是秒,默认是60秒

执行start slave通过show slave status查看状态
在这里插入图片描述
红框里两个Yes代表搭建成功

搭建 MySQL 数据库主从复制(双主双从)

1. 双主机配置

Master1配置

#主服务器唯一ID
server-id=100
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
#binlog-ignore-db=mysql
#binlog-ignore-db=information_schema
#设置需要复制的数据库
#binlog-do-db=需要复制的主数据库名字
#设置logbin格式
#binlog_format=STATEMENT
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates 
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
auto-increment-increment=2 
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=1

Master2配置

#主服务器唯一ID
server-id=102 #启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
#binlog-ignore-db=mysql
#binlog-ignore-db=information_schema
#设置需要复制的数据库
#binlog-do-db=需要复制的主数据库名字
#设置logbin格式
#binlog_format=STATEMENT
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates 
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
auto-increment-increment=2 
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=2

2. 双从机配置

Slave1配置

#从服务器唯一ID
server-id=101
log-bin=mysql-bin
#启用中继日志
relay_log=edu-mysql-relay-bin

Slave2配置

#从服务器唯一ID
server-id=103
log-bin=mysql-bin
#启用中继日志
relay_log=edu-mysql-relay-bin

3. 双主机、双从机重启 mysql 服务

4. 在两台主机上建立帐户并授权 slave

create user 'slave'@'%' identified with mysql_native_password by '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

执行show master status;查询Master1和Master2的状态并记录

5. 在从机上配置需要复制的主机

Slava1 复制 Master1,Slava2 复制 Master2
方法同上

6. 两个主机互相复制

Master2 复制 Master1,Master1 复制 Master2
方法同上

7.测试

Master1 主机新建库、新建表、insert 记录,Master2 和从机复制

发布了25 篇原创文章 · 获赞 1 · 访问量 1980

猜你喜欢

转载自blog.csdn.net/weixin_45631876/article/details/104048362