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