mysql8双主双从搭建

一、规划

 前提:需要准备四台服务器,每台服务器上安装了 mysql8 数据库。

规划:从 1 复制 主1 ,从 2 复制 主 2,主 1 复制 主 2,主 2 复制主 1,也就是 主 1 和主 2 互为主从。主1主2互为主从,是为了以下情景,主1挂了,主2自动升级为主数据库,当主1恢复后,主1则变成次主数据库。

举个案例:1、在主1创建了一个数据库,从1自动“复制”主1生成数据库,

                  2、因为主2也是主1 的从数据库,所以主2也“复制”主1生成数据库,

                  3、主2有了数据库,从2自动“复制”主2生成数据库;

最后,四台服务器数据库都创建了数据库。

二、修改 mysql 配置

主1   my.cnf  添加如下配置

# bin log 日志
log-bin=/var/lib/mysql/binlog
# 服务id
server-id=1
#主从复制忽略的数据库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#开启主从复制的数据库
binlog-do-db=mydb2
# bin log 日志格式
#STATEMENT:记录主库执行的SQL复制到从库; 调用时间函数时会导致主从数据不一致
#ROW:记录主库每一行的变化;效率低
#MIXED:修复一些主从数据不一致情况;本地变量调用还会存在问题;@@hostname
binlog_format=statement
#二进制日志自动删除/过期的天数。默认值为0,表示不自动删除
expire_logs_days=7
#跳过主从复制中遇到的所有错误或指定类型的错误
slave_skip_errors=1062
#在作为从数据库时候,有写入操作也要更新二进制日志文件
log-slave-updates
#标识自增长字段每次递增的量,也就是步长
auto-increment-increment=2
#表示自增长从哪个数开始
auto-increment-offset=1

主 2  my.cnf  添加如下配置

# bin log 日志
log-bin=/var/lib/mysql/binlog
# # 服务id
server-id=3
# #主从复制忽略的数据库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
# #开启主从复制的数据库
binlog-do-db=mydb2
# # bin log 日志格式
# #STATEMENT:记录主库执行的SQL复制到从库; 调用时间函数时会导致主从数据不一致
# #ROW:记录主库每一行的变化;效率低
# #MIXED:修复一些主从数据不一致情况;本地变量调用还会存在问题;@@hostname
binlog_format=statement
# #二进制日志自动删除/过期的天数。默认值为0,表示不自动删除
expire_logs_days=7
# #跳过主从复制中遇到的所有错误或指定类型的错误
slave_skip_errors=1062
# #在作为从数据库时候,有写入操作也要更新二进制日志文件
log-slave-updates
# #标识自增长字段每次递增的量,也就是步长
auto-increment-increment=2
# #表示自增长从哪个数开始
auto-increment-offset=2

主1主2配置的不同地方在:server-id  和 auto-increment-offset 

从1 my.cnf 添加如下配置

# 服务id
server-id=2
# #启用中继日志
relay-log=mysql-relay

从2 my.cnf 添加如下配置

# 服务id
server-id=4
# #启用中继日志
relay-log=mysql-relay

三、创建同步账号并授权

创建主主同步账号repl_user和主从同步账号slave_sync_user

主1、主2 数据库:

mysql> CREATE USER 'repl_user'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.03 sec)
 
mysql> CREATE USER 'slave_sync_user'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.01 sec)
 
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
Query OK, 0 rows affected (0.00 sec)
 
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_sync_user'@'%';
Query OK, 0 rows affected (0.00 sec)

四、配置主从同步

1、主1 -->  从1

主1 mysql 下:

show master status;

记住 binlog 文件 和 偏移量,后面会用到

从1 mysql 下:

CHANGE MASTER TO MASTER_HOST='192.168.168.224', MASTER_USER='slave_sync_user', MASTER_PASSWORD='123456', MASTER_LOG_FILE='binlog.000003', MASTER_LOG_POS=952;
start slave;
show slave status \G;

遇到不是两个 Yes (下面截图这种情况)怎么办,别慌,执行下面命令:

 

stop slave;
reset master;

然后再  CHANGE MASTER .....

2、主2 --> 从2

 主2 mysql 下:

show master status;

 从 2 mysql 下:

CHANGE MASTER TO MASTER_HOST='192.168.168.226', MASTER_USER='slave_sync_user', MASTER_PASSWORD='123456', MASTER_LOG_FILE='binlog.000004', MASTER_LOG_POS=356;
start slave;
show slave status \G;

3、主1 --> 主2

主1 mysql 下:

show master status;

 主2 mysql 下:

CHANGE MASTER TO MASTER_HOST='192.168.168.224', MASTER_USER='repl_user', MASTER_PASSWORD='123456', MASTER_LOG_FILE='binlog.000003', MASTER_LOG_POS=952;
start slave;
show slave status \G;

 4、主2 --> 主1

主2 mysql 下

show master status;

主1 mysql 下:

CHANGE MASTER TO MASTER_HOST='192.168.168.226', MASTER_USER='repl_user', MASTER_PASSWORD='123456', MASTER_LOG_FILE='binlog.000004', MASTER_LOG_POS=156;

start slave;
show slave status \G;

五、测试

主1 mysql 下创建数据库 mydb2,创建表 books,插入一条数据:


create database mydb2;
create table books(id int primary key auto_increment, name varchar(50));
insert into books(name) values("MySQL 8");

查看 主1  主2 从1 从2  是否同步生成数据库、表、数据。

 

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值