当前位置:网站首页>docker-mysql8-主从

docker-mysql8-主从

2022-06-24 19:41:00 王道长的编程之路

一、准备官方镜像

官方docker 镜像 https://hub.docker.com/_/mysql

docker pull mysql:latest
# 创建mysql网络
docker network create mysql-net --subnet 172.1.2.0/24

docker volume rm $(docker volume list |awk '{if(NR>0) print $2}')

主从规划

roleipport复制账号password
master172.1.2.23306Slaveslave
slave172.1.2.33307--

二、准备配置文件

cd ~
mkdir mysql  mysql/master mysql/slave
cd mysql
# master 配置文件
echo "[mysqld] server-id=1 log-bin=mysql-bin" >> master/mysql.cnf
# slave 配置文件
echo "[mysqld] server-id=2 relay_log = /usr/local/mysql/data/mysql-relay-bin relay_log-index = /usr/local/mysql/data/mysql-relay-bin.index log_slave_updates = 1 read_only=1" >> slave/mysql.cnf

三、主从配置

步骤:

  1. 修改主从的mysql.cnf配置文件
  2. 主从mysql服务重启
  3. 主从机防火墙关闭
  4. 主机上建立授权的slave登陆账号
  5. 从机上配置master的信息

3.1 maste 配置

docker run --network mysql-net --name master -p 3306:3306 --ip 172.1.2.3 -e MYSQL_ROOT_PASSWORD=mysecret -d mysql:latest
# 创建slave用户,并配置权限
CREATE USER 'slave'@'172.1.2.%' IDENTIFIED WITH mysql_native_password BY 'slave';
select user,host,plugin from mysql.user;
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'172.1.2.%';
# mysql master配置 mysql.cnf
docker cp master/mysql.cnf master:/etc/mysql/conf.d/mysql.cnf
# 修改配置之后,一定要重启
docker restart master
# 验证binlog文件是否开启 
show global variables like '%log_bin%';

备注:

[mysqld]
server-id= 1 -- 主服务器的唯一id
log-bin=mysql-bin  --启动二进制日志文件
binlog-ignore-db=mysql  --设置忽略的数据库(可设置多个)
binlog-do-db=dbname  --需要复制的主数据库名
binlog_format=STATEMENT  -- 设置binlog的日志格式

建立slave节点的登陆账号权限

--在主机MySQL里执行授权命令
 GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123123';
 --查询master的状态
 show master status;
 --记录下file和position值,并停止master的对外服务,防止主服务器状态值发生变化

3.2 slave 配置

docker run --network mysql-net --name slave -p 3307:3306 --ip 172.1.2.4 -e MYSQL_ROOT_PASSWORD=mysecret -d mysql:latest
# mysql slave配置 mysql.cnf
docker cp slave/mysql.cnf slave:/etc/mysql/conf.d/mysql.cnf
# 修改配置之后,一定要重启
docker restart slave
# 指定主节点ip,端口,用户,并配置主从
change master to master_host='172.1.2.3',master_port=3306,master_user='slave',master_password='slave';
# 或部分复制
change master to master_host='192.168.81.132',master_port=3306,master_user='slave',master_password='slave',master_log_file='mysql- bin.000002',master_log_pos=155;
start slave;
#检测
show slave status;

备注:

[mysqld]
server-id=2 -- 从服务器的唯一id
relay-log=mysql-replay -- 启用中继日志

从机配置主机节点信息

change master to master_host="主机ip地址“;
master_user="slave"
master_password="123123"
master_log_file="mysql-bin.具体数字"
master_log_pos="具体值“;

--启动从服务器的复制功能
start slave;
--查看从服务器状态
show slave status\G;
--只有slave_io_running和slave_sql_running同为yes才表示配置成功

额外信息:

--停止从服务器复制功能
stop slave;
--重新配置主从
reset master;

四、双主配置

4.1 master配置

4.1.1 master1配置

#vim /etc/my.cnf

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

4.1.2 master2配置

#vim /etc/my.cnf

server-id=3				#主服务器唯一ID 
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

4.2 双从配置

4.2.1 slave1配置

#vim /etc/my.cnf 
#从服务器唯一ID
server-id=2
#启用中继日志 
relay-log=mysql-relay

双主机、双从机重启 mysql 服务
主机从机都关闭防火墙
在两台主机上建立帐户并授权 slave

4.3 主从授权

4.3.1 双主授权

-- 在主机MySQL里执行授权命令
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123123'; -- 查询Master1的状态
show master status;
-- 查询Master2的状态 show master status;
-- 分别记录下File和Position的值
-- 执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

4.3.2 双从授权

Slava1 复制 Master1,Slava2 复制 Master2

-- slave1、slave2
CHANGE MASTER TO MASTER_HOST='主机的IP', MASTER_USER='slave',
MASTER_PASSWORD='123123', MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值;

-- 启动两台从机的复制功能
start slave;
-- 查看从服务器状态 
show slave status\G;
#Slava1的复制Master1

#下面两个参数都是Yes,则说明主从配置成功! 
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes

4.4 主主复制

-- master1、master2
CHANGE MASTER TO MASTER_HOST='主机2的IP', 
MASTER_USER='slave',
MASTER_PASSWORD='123123', 
MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值;
-- master2
CHANGE MASTER TO MASTER_HOST='主机1的IP', 
MASTER_USER='slave',
MASTER_PASSWORD='123123', 
MASTER_LOG_FILE='mysql-bin.具体数字',
MASTER_LOG_POS=具体值;

fen分别启动两台主服务器复制功能

start slave;
-- 查看备库状态
show slave status \G;
#下面两个参数都是Yes,则说明主从配置成功! 
# Slave_IO_Running: Yes
# Slave_SQL_Running: Yes
原网站

版权声明
本文为[王道长的编程之路]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_29677867/article/details/106311199