ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql 主备从

2022-07-08 18:31:06  阅读:150  来源: 互联网

标签:slave MASTER master mysql 主备 docker data


创建mysql服务

ip端口  
192.168.153.19:3307 master
192.168.153.19:3308 slave
192.168.153.19:3309 master01
192.168.153.19:3310 slave01
# docker 拉取mysql镜像
docker pull mysql:5.7

# 宿主机创建文件夹
mkdir /data/docker/mysql-master/{conf,data,log}
mkdir /data/docker/mysql-master01/{conf,data,log}
mkdir /data/docker/mysql-slave/{conf,data,log}
mkdir /data/docker/mysql-slave01/{conf,data,log}

如图:

 

 

 启动镜像:

docker run -p 3307:3306 --privileged=true --name mysql-master \
-v /data/docker/mysql-master/log:/var/log/mysql \
-v /data/docker/mysql-master/data:/var/lib/mysql \
-v /data/docker/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

docker run -p 3308:3306 --privileged=true --name mysql-slave \
-v /data/docker/mysql-slave/log:/var/log/mysql \
-v /data/docker/mysql-slave/data:/var/lib/mysql \
-v /data/docker/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

docker run -p 3309:3306 --privileged=true --name mysql-master01 \
-v /data/docker/mysql-master01/log:/var/log/mysql \
-v /data/docker/mysql-master01/data:/var/lib/mysql \
-v /data/docker/mysql-master01/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

docker run -p 3310:3306 --privileged=true --name mysql-slave01 \
-v /data/docker/mysql-slave01/log:/var/log/mysql \
-v /data/docker/mysql-slave01/data:/var/lib/mysql \
-v /data/docker/mysql-slave01/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7

编辑master my.cnf

vim /data/docker/mysql-master/conf/my.cnf

[mysqld]
server_id=1
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mysql-bin
## 需要复制的数据库
binlog-do-db=mydb1
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=statement
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
# 在作为从数据库时,有写入操作也要更新二进制日志文件
log-slave-updates
# 表示自增长字段每次递增的量,指自增字段的起始值,默认值是1,取值范围1--65535
auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,取值范围是1--65535
auto-increment-offset=1

编辑master01 my.cnf

vim /data/docker/mysql-master01/conf/my.cnf

[mysqld]
server_id=3
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql
## 开启二进制日志功能
log-bin=mysql-bin
## 需要复制的数据库
binlog-do-db=mydb1
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=statement
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
# 在作为从数据库时,有写入操作也要更新二进制日志文件
log-slave-updates
# 表示自增长字段每次递增的量,指自增字段的起始值,默认值是1,取值范围1--65535
auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,取值范围是1--65535
auto-increment-offset=2

编辑slave my.cnf

vim /data/docker/mysql-slave/conf/my.cnf 

[mysqld]
server_id=3

# 启用中继日志
relay-log=mysql-relay

编辑slave01 my.cnf

vim /data/docker/mysql-slave01/conf/my.cnf

[mysqld]
server_id=4
relay-log=mysql-relay

重启容器

docker restart mysql-master mysql-master01 mysql-slave mysql-slave01

进入mysql-mysql容器数据库创建主从同步用户

docker exec -it mysql-master /bin/bash
# 进入mysql
mysql -uroot -p123456
# 创建同步数据用户
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123123';   
# 刷新权限  
FLUSH PRIVILEGES;

进入mysql-mysql01容器数据库创建主从同步用户

docker exec -it mysql-master01 /bin/bash
# 进入mysql
mysql -uroot -p123456
# 创建同步数据用户
GRANT REPLICATION SLAVE ON *.* TO 'slave01'@'%' IDENTIFIED BY '123123';   
# 刷新权限  
FLUSH PRIVILEGES;

slave[3308]同步master[3307],slave01[3310]同步master01[3309]

# 进入slave从库
docker exec -it mysql-slave /bin/bash

# 登录mysql
mysql -uroot -p123456

CHANGE MASTER TO MASTER_HOST='192.168.153.19',
MASTER_PORT=3307,
MASTER_USER='slave',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.000001',  # 登陆主服务器 show master status; 查询 取File列值 参考下图
MASTER_LOG_POS=612;             # 登陆主服务器 show master status; 查询 取Position列值 参考下图

# 开始从库同步
start slave;

# 查看主从同步状态
show slave status\G

如图:

# 进入slave01从库
docker exec -it mysql-slave01 /bin/bash

# 登录mysql
mysql -uroot -p123456

CHANGE MASTER TO MASTER_HOST='192.168.153.19',
MASTER_PORT=3309,MASTER_USER='slave01',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.000001',  # 登陆主服务器 show master status; 查询 取File列值 参考下图
MASTER_LOG_POS=612;

# 开始从库同步
start slave;

# 查看主从同步状态
show slave status\G

如图:

 

master、master01互为主备配置:

master01复制master

# 进入master01节点数据库执行
CHANGE MASTER TO MASTER_HOST='192.168.153.19',
MASTER_PORT=3307,MASTER_USER='slave',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.000001',  # 登陆主服务器 show master status; 查询 取File列值 参考下图
MASTER_LOG_POS=612;

# 启动
start slave;

# 查看状态
show slave status\G

master复制master01

# 进入master节点数据库执行
CHANGE MASTER TO MASTER_HOST='192.168.153.19',
MASTER_PORT=3309,MASTER_USER='slave01',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.000001',  # 登陆主服务器 show master status; 查询 取File列值 参考下图
MASTER_LOG_POS=612;

# 启动
start slave;

# 查看状态
show slave status\G

 

 测试:因为数据库设置只允许同步mydb1数据库,所以切记测试时,要吗去掉只同步mydb1的配置,要么直接创建mydb1数据库。

插入测试语句

 

binlog为statement所以insert的@@hostname为系统变量,每台服务器的hostname数据都为该服务器的服务器名称。所以 生产环境binlog建议用row格式,确保不会因为系统变量导致每台mysql的数据有区别

 master

 

master01

 

 slave

 

 slave01

 

 

 

标签:slave,MASTER,master,mysql,主备,docker,data
来源: https://www.cnblogs.com/chenjiangbin/p/16459010.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有