CentOS7中两台MySQL5.7互备配置

1. 主机环境与软件版本


主机系统:CentOS7 64位
两个虚拟机:
​ 主机(master-1):IP地址: 192.168.0.88

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

MySQL版本:mysql-5.7.27

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> service mysqld  restart

5.主从配置

5.1添加主从用户

在master-1中添加repl用户:

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

在master-2中添加repl用户:

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

5.2查看库状态

在master-1中执行:

mysql>show master statu;

在master-2中执行:

mysql>show master statu;

5.3配置数据同步

在master-1中执行:

mysql> change master to
master_host='192.168.0.219',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=154;

mysql> start slave;

mysql> show slave status\G;

下面这两个状况显示正常:

在master-2中执行:

mysql> change master to
master_host='192.168.0.88',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=2832;

mysql> start slave;

mysql> show slave status\G;

下面这两个状况显示正常:

6.测试主备同步:

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

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 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 |
| sys                |
| test1              |
+--------------------+
5 rows in set (0.00 sec)

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



mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test1              |
+--------------------+
5 rows in set (0.00 sec)

同理对master-2进行操作查看master-1中也得到了相应的同步。

6.配置过程可能存在问题

6.1 配置好后show slave  status\G;

Slave_IO_Running: Connection

Slave_SQL_Running: Yes

原因可能如下

1.网络不通:两台机器互相ping对方是否ping得通
2.账户密码错误:用户登录检验
3.防火墙:查看防火墙状态
4.mysql配置文件问题:检查配置文件
5.连接服务器时语法
6.主服务器mysql权限

6.12配置好后show slave  status\G;

Slave_IO_Running: Yes

Slave_SQL_Running: No

原因可能如下

1.程序可能在slave上进行了写操作
2.也可能是同步过程出现异常,造成事物回滚:本人测试出现一种情况是在同步前master-1有数据库test2,master-2中没有,主备配置好后在master-1中删除test2,由于master-2中没有test,因此查看slave状态的时候有报错,这样后导致了Slave_SQL_Running: No。

这种情况需要重新查看master 状态并重新配置,具体如操作5.

7.设置开机启动

创建用于启动MySQL的配置文件
[root@localhost ~]# touch /usr/lib/systemd/system/mysqld.service
[root@localhost ~]# cd /usr/lib/systemd/system编辑mysqld.service文件,加入如下内容:

[root@localhost system]# vi mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql//bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE = 5000


保存退出

备注:ExecStart=/usr/local/mysql//bin/mysqld (此处请对应修改为MySQL程序所在的路径)
查找mysqld路径,例如:
 

[root@localhost system]# which mysqld/usr/local/mysql//bin/mysqld 

设置开机启动:

[root@localhost system]# systemctl enable mysqld
Created symlink from /etc/systemd/system/multi-user.target.wants/mysqld.service to /usr/lib/systemd/system/mysqld.service.
[root@localhost system]# systemctl list-unit-files | grep mysqld
mysqld.service                                enabled

 

 


版权声明:本文为shmely原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。