docker MySQL 双主_3.Docker双主热备搭建MySQL

本文详细介绍了如何在Docker环境下配置MySQL的双主热备,包括配置my.cnf文件,启动容器,设置主从关系以及进行测试验证。在每个服务器上,配置了不同的server-id,启用二进制日志,并设置了互相为对方的master,确保数据实时同步。通过查询master状态,确认主从连接正常,并通过创建数据库、表及插入数据来测试同步效果。
摘要由CSDN通过智能技术生成

1 前言

2 环境准备

3 安装

3.1 配置master1的my.cnf

3.2 配置master2的my.cnf

3.3 启动容器

3.4 配置master信息

3.4.1查询master1、master2的File、Position

3.4.2 在maste1和master互相配置对方为自己的master

3.5 测试双主热备

1 前言

请先参考2.Docker主从复制搭建MySQL了解MySQL主从复制搭建,双主热备其实就是互为主从,相互实时同步

双主热备与主从搭建步骤基本一致,在my.cnf配置略有区别,还要在两个机器上设置对方为自己的master。

2 环境准备

mysql master1:192.168.64.20

mysql master2:   192.168.64.21

3 安装

3.1 配置master1的my.cnf

> mkdir -p /data/mysql

> mkdir conf data logs

> cd /data/mysql

> chmod -R 777 logs

> cd /data/mysq/conf

> touch my.cnf

> vim my.cnf

my.cnf如下:红色设置就是跟主从模式配置的区别

[mysqld]

port=3306

#[必须]服务器唯一ID,默认是1,一般取IP最后一段,这里看情况分配

server-id=20

#主键自增长偏移起始量,主2设置2,主3设置成3,主n设置成n

auto_increment_offset=1

#主键自增长步长量,2个主就设置成2,3个主就设置成3,n个主就设置成n

auto_increment_increment=2

#[必须]启用二进制日志

log-bin=mysql-bin

#将复制事件写入binlog,一台服务器既做主库又做从库此选项必须要开启

log-slave-updates=true

#主库binlog模式:row,从库不需要设置

binlog_format=ROW

#只保留最近30天的binlog日志

expire_logs_days=30

#设置日志文件得最大值,超过该值则另启文件记录日志

max_binlog_size = 500M

#设置日志文件缓存大小

max_connections=16384

# 字符集

character-set-server=utf8mb4

# 存储引擎

default-storage-engine=INNODB

group_concat_max_len=102400

#开启慢查询:

slow_query_log=ON

#慢查询时间,单位秒

long_query_time=1

slow_query_log_file=/var/log/mysql/mysql-slow.log

#全局日志

general_log=ON

general_log_file=/var/log/mysql/mysql-general.log

#错误日志

log_error=/var/log/mysql/mysql-error.log

3.2 配置master2的my.cnf

> mkdir -p /data/mysql

> mkdir conf data logs

> cd /data/mysql

> chmod -R 777 logs

> cd /data/mysq/conf

> touch my.cnf

> vim my.cnf

my.cnf如下:红色配置就是跟master1的区别

[mysqld]

port=3306

#[必须]服务器唯一ID,默认是1,一般取IP最后一段,这里看情况分配

server-id=21

#主键自增长偏移起始量,主2设置2,主3设置成3,主n设置成n

auto_increment_offset=2

#主键自增长步长量,2个主就设置成2,3个主就设置成3,n个主就设置成n

auto_increment_increment=2

#[必须]启用二进制日志

log-bin=mysql-bin

#将复制事件写入binlog,一台服务器既做主库又做从库此选项必须要开启

log-slave-updates=true

#主库binlog模式:row,从库不需要设置

binlog_format=ROW

#只保留最近30天的binlog日志

expire_logs_days=30

#设置日志文件得最大值,超过该值则另启文件记录日志

max_binlog_size = 500M

#设置日志文件缓存大小

max_connections=16384

# 字符集

character-set-server=utf8mb4

# 存储引擎

default-storage-engine=INNODB

group_concat_max_len=102400

#开启慢查询:

slow_query_log=ON

#慢查询时间,单位秒

long_query_time=1

slow_query_log_file=/var/log/mysql/mysql-slow.log

#全局日志

general_log=ON

general_log_file=/var/log/mysql/mysql-general.log

#错误日志

log_error=/var/log/mysql/mysql-error.log

3.3 启动容器

master1机器启动容器:

> docker run --name mysql-5.7.27 --network=host -e MYSQL_ROOT_PASSWORD=123456 --privileged=true -v /data/mysql/conf:/etc/mysql -v /data/mysql/logs:/var/log/mysql -v /data/mysql/data:/var/lib/mysql -d mysql:5.7.27

进入data查看binlog是否生成

> cd /data/mysq/data

image2019-10-18_20-25-24.png?version=1&modificationDate=1571401930000&api=v2

master2机器启动容器:

> docker run --name mysql-5.7.27 --network=host -e MYSQL_ROOT_PASSWORD=123456 --privileged=true -v /data/mysql/conf:/etc/mysql -v /data/mysql/logs:/var/log/mysql -v /data/mysql/data:/var/lib/mysql -d mysql:5.7.27

检查mysql容器是否启动成功,没有成功则检查my.cnf和docker run启动参数,删除mysql容器重新启动

3.4 配置master信息

3.4.1查询master1、master2的File、Position

分别进入master1、master2机器的mysql运行下面sql,记录master的File、Position的值,待会在master2库配置中要用到

mysql>show master status;

master1:

image2019-10-18_20-14-47.png?version=1&modificationDate=1571401930000&api=v2

master2:

image2019-10-18_20-46-16.png?version=1&modificationDate=1571402776000&api=v2

3.4.2 在maste1和master互相配置对方为自己的master

在master1设置master2为自己的maste:

mysql>change master to

master_host='192.168.64.21',

master_user='root',

master_log_file='mysql-bin.000003',

master_log_pos=154,

master_port=3306,

master_password='123456';

mysql> start slave;

在master2设置master1为自己的maste:

mysql>change master to

master_host='192.168.64.20',

master_user='root',

master_log_file='mysql-bin.000005',

master_log_pos=154,

master_port=3306,

master_password='442611344';

mysql> start slave;

如果不小心配置错, 输入 mysql> stop slave; 然后重新录入一遍后在start slave就可以了

检查主从连接状态:

mysql> show slave status\G;

这两个必须是 Yes 为 No 或者 connect 说明没有连接上

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

3.5 测试双主热备

在master1库上建库、建表、插入sql,然后到master2库查看是否同步成功

create database db01 default character set utf8mb4 collate utf8mb4_general_ci;

use db01;

create table `tb01` (

`id` int(11) not null auto_increment,

`name` varchar(255) default null,

`phone` varchar(255) default null,

primary key (`id`)

) engine=innodb auto_increment=1 default charset=utf8mb4;

insert into tb01(name, phone) values('name_1', 'phone_1');

insert into tb01(name, phone) values('name_2', 'phone_2');

insert into tb01(name, phone) values('name_3', 'phone_3');

在master2查看是否同步成功后操作表数据,然后查看master1是否同步成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值