CentOS7中MySQL5.7 主主互备配置

CentOS7 中 MySQL 5.7 主主互备配置

​ 先从MySQL对数据库复制的能力看,MySQL支持单向、异步的复制。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护日志文件的一个索引以跟踪日志循环。当一个从服务器连接到主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知下一次更新。

​ 现在公司中很多都用到了云服务器,无论是服务器还是数据库,但是我们在开发阶段一般还是公司自己的服务器,在没有dba的情况就需要开发人员自己去搭建数据库集群,但是对于小公司来说,两台数据库服务器互为主备也许对开发人员来说就是比较理想的。当然有运维同事帮忙的话会更好,使用keepalived搭建个高可用的服务器集群(后面再去研究如何使用keepalived搭建)。下面我们就介绍下CentOS7中如何搭建MySQL主主互备服务器。

1. 主机环境与软件版本

  • 主机系统:CentOS7 64位
  • 两个虚拟机:

​ 主机(master-1):IP地址: 192.168.1.102

​ 主机(master-2):IP地址: 192.168.1.103

  • MySQL版本:mysql-5.7.22

  • 虚拟机版本:VMware® Workstation 12.5.7 build-5813279

2. MySQL 安装

3. MySQL 配置

既然是主主互备,就说明两个数据库都要对外进行服务,为了防止id重复,我们需要在配置文件中对两个数据库的自增长的offset设置为不同的值,具体如下:

master-1服务器中文件/etc/my.cnf 中添加如下配置:

server-id=1                             #server的唯一标识
auto_increment_offset=1                  #自增id起始值
auto_increment_increment=2                #每次自增数字

log-bin = mysql-bin                           #打开二进制功能,MASTER主服务器必须打开此项
max_binlog_size=1024M                          #binlog单文件最大值

replicate-ignore-db = mysql                    #忽略不同步主从的数据库
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
replicate-ignore-db = test

master-2服务器中文件/etc/my.cnf 中添加如下配置:

server-id = 2                               #server的唯一标识
auto_increment_offset = 2                   #自增id起始值
auto_increment_increment = 2                 #每次自增数字

log-bin = mysql-bin                           #打开二进制功能,MASTER主服务器必须打开此项
max_binlog_size=1024M                          #binlog单文件最大值

replicate-ignore-db = mysql                    #忽略不同步主从的数据库
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
replicate-ignore-db = test

4. MySQL 重启

shell> systemctl restart mysqld.service

5. 主从配置

5.1 添加主从同步账户

在master-1中添加repl用户:

mysql> grant replication slave on *.* to 'repl'@'192.168.1.102' identified by '123456';

在master-2中添加repl用户:

mysql> grant replication slave on *.* to 'repl'@'192.168.1.104' identified by '123456';
5.2 查看主库的状态

在master-1上执行如下命令:

mysql> show master status;

这里写图片描述

在master-2上执行如下命令:

mysql> show master status;

这里写图片描述

5.3 配置同步数据

在master-1上执行如下命令:

mysql> change master to master_host='192.168.1.104',\
master_port=3306,master_user='repl',master_password='123456',\
master_log_file='mysql-bin.000005',master_log_pos=3123;

mysql> start slave;

mysql> show slave status\G;

下面这两个状态表示正常:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

在master-2上执行如下命令:

mysql> change master to master_host='192.168.1.102',\
master_port=3306,master_user='repl',master_password='123456',\
master_log_file='mysql-bin.000004',master_log_pos=1918;

mysql> start slave;

mysql> show slave status\G;

下面这两个状态表示正常:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

说明

master_log_file: master的日志文件,则master-1互指master-2中的数据,根据上图可以得到此值。

master_log_pos: master的日志文件起始位置,则master-1互指master-2中的数据,根据上图可以得到此值。

6. 测试主从同步

在master-1上执行如下sql脚本进行测试:

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| test               |

+--------------------+
rows in set (0.00 sec)

mysql> create database test1;

Query OK, 1 row affected (0.00 sec)

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| test               |

| test01             |

+--------------------+
rows in set (0.00 sec)

同时查看master-2中是否创建了数据库test1

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| test               |

| test1             |

+--------------------+
rows in set (0.00 sec)

对表的操作可自行进行测试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值