MySql集群(双主双从)

本文详细介绍了如何搭建MySQL的双主双从集群,包括主从配置、Docker容器部署、用户创建和主从同步设置。通过这种方式,可以实现读写分离,提高系统可用性和数据安全性。同时,讨论了关键配置参数如auto_increment_increment和sync_binlog的作用,以及在遇到主节点故障时的处理策略。
摘要由CSDN通过智能技术生成

A:主从
主master 3307 —> 从slave 3309
主从可以缓解读的压力,但是一旦主宕机了,就不能写了;

B:双主双从
主master 3307 —> 从slave 3309
主master 3308 —> 从slave 3310
3307 <—> 3308 互为主从
2个写节点,每个写节点下又是2个读节点;

C:文件配置
1、配置每一台MySQL服务器的配置文件my.cnf
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
default-character-set=utf8

[mysqld]
port = 3306
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log

character-set-server=utf8
lower_case_table_names=1
autocommit = 1

2、所有节点配置文件加上binlog配置

  1. 3339配置:
    log-bin=mysql-bin
    server-id=3339
  2. 3341配置:
    log-bin=mysql-bin
    server-id=3341
  3. 3340配置:
    log-bin=mysql-bin
    server-id=3340
  4. 3342配置:
    log-bin=mysql-bin
    server-id=3342

server-id=实例的端口(server-id要唯一)

3、第一台主服务器3339的my.cnf文件增加如下配置:(Master 3339)
auto_increment_increment=2
auto_increment_offset=1
log-slave-updates
sync_binlog=1
4、第二台主服务器3341的my.cnf文件增加如下配置:(Master 3341)
auto_increment_increment=2
auto_increment_offset=2
log-slave-updates
sync_binlog=1

D:配置项说明:

  1. auto_increment_increment
    控制主键自增的自增步长,用于防止Master与Master之间复制出现重复自增字段值,通常auto_increment_increment=n,有多少台主服务器,n 就设置为多少;
  2. auto_increment_offset=1
    设置自增起始值,这里设置为1,这样Master的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数ID
    注意auto_increment_offset的设置,不同的master设置不应该一样,否则就容易引起主键冲突,比如master1的offset=1,则master2的offset=2,master3的offset=3
  3. log-slave-updates
    在双主模式中,log-slave-updates 配置项一定要配置,否则在master1(3339)上进行了更新数据,在master2(3341)和slave1(3340)上会更新,但是在slave2(3342)上不会更新
  4. sync_binlog
    sync_binlog表示每几次事务提交,MySQL把binlog缓存刷进日志文件中,默认是0,最安全的是设置为1;

(一)Docker安装MySql容器:
(1)主master1
docker run -p 3339:3306 --name mysql_master -v /d/docker/MasterMySql/my.cnf:/etc/mysql/my.cnf -v /d/docker/MasterMySql/logs:/logs -v /d/docker/MasterMySql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
(2)从slave1
docker run -p 3340:3306 --name mysql_slave -v /d/docker/SlaveMySql/my.cnf:/etc/mysql/my.cnf -v /d/docker/SlaveMySql/logs:/logs -v /d/docker/SlaveMySql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
(3)主master2
docker run -p 3341:3306 --name mysql_master2 -v /d/docker/MySql/Master/my.cnf:/etc/mysql/my.cnf -v /d/docker/MySql/Master/logs:/logs -v /d/docker/MySql/Master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
(4)从slave2
docker run -p 3342:3306 --name mysql_slave2 -v /d/docker/MySql/Slave/my.cnf:/etc/mysql/my.cnf -v /d/docker/MySql/Slave/logs:/logs -v /d/docker/MySql/Slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

(二)主master创建slave用户
创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。
CREATE USER ‘slave’@’%’ IDENTIFIED BY ‘123456’;
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO ‘slave’@’%’;

(三)主从同步设置
(1)查询主库 show master status;
主master1
在这里插入图片描述
主master2
在这里插入图片描述
(2)设置从库同步

  1. stop slave;
  2. change master to master_host=‘192.168.1.225’,master_user=‘slave’,master_password=‘123456’,master_port=3341,master_log_file=‘mysql-bin.000003’,master_log_pos=619,master_connect_retry=30;
  3. start slave;
  4. show slave status;
    在这里插入图片描述
    上图红圈显示两个YES,则表示成功。

(3)设置两主库互为主从
主master1

  1. stop slave;
  2. change master to master_host=‘192.168.1.225’,master_user=‘slave’,master_password=‘123456’,master_port=3341,master_log_file=‘mysql-bin.000003’,master_log_pos=619,master_connect_retry=30;
  3. start slave;
  4. show slave status;
    在这里插入图片描述
    主master2
  5. stop slave;
  6. change master to master_host=‘192.168.1.225’,master_user=‘slave’,master_password=‘123456’,master_port=3339,master_log_file=‘mysql-bin.000002’,master_log_pos=416,master_connect_retry=30;
  7. start slave;
  8. show slave status;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值