#昊鼎王五:如何十分钟内在CentOS7上快速搭建集群mysql双主+keepavlied实现漂移、高可用服务之2:构建主主(互为主从)同步关系
在上一篇文章《昊鼎王五:如何十分钟内在CentOS7上快速搭建集群mysql双主+keepavlied实现漂移、高可用服务之1:快速编译安装mysql》(https://blog.csdn.net/haoding205/article/details/81410199)我们中已经实现了MYSQL的安装,而且已经能用root用户登录了。本节主要讲“如何构建MYSQL主主同步关系”
为了让脉络清晰,阅读方便,本篇的重点内容是:“2:构建主主(互为主从)同步关系”。
#mysql主主(互为主从)复制
#一、前言:数据库复制 replication 的实现原理
q.1:主服务器凡运行语句,都产生一个二进制日志 binlog
q.2:从服务器不断读取主服务器的 binlog
q.3:从服务器将读取到的binlog转换为自身可执行的 relaylog,
q.4:从服务器执行relaylog
#二、实现步骤 :
s.1:首先确保主服务器打开二进制日志功能 .
s.2:从服务器也需要开启二进制日志和 relay日志功能.
s.3:在主服务器建立一个从服务器的账号 ,并授予复制的权限.
s.4:在从服务器指定对应的主服务器 ,开启从服务.
#三、具体实施:
假设:
node1机器:192.168.1.203
node2机器:192.168.1.204
##1. 准备工作
1.1 确保防火墙没有阻挡双方之间的通信,保证3306端口互通 。
1.2 同步两台服务器的时间
1.3 同步两台服务器之间的数据,如果是未上线的服务器,可以省略此步
##2、配置文件/etc/my.cnf核心设置:
server-id = 1 #给服务器起一个唯一的id,node2这台设置2,不能重复
binlog-ignore-db = mysql,information_schema #忽略写入binlog日志的库
auto-increment-increment = 2 #字段变化增量值
auto-increment-offset = 1 #初始字段ID为1
slave-skip-errors = all #忽略所有复制产生的错误
log-slave-updates #很重要,从前一台机器上同步过来的数据才能同步到下一台机器
auto_increment_increment和auto_increment_offset用于主服务器-主服务器(master-to-master)复制,控制自增列
AUTO_INCREMENT的行为,用于MASTER-MASTER之间的复制,防止出现重复值
vim /etc/my.cnf --文末可以下载
cat /etc/my.cnf
##3. 在node1服务器上创建复制账号,给到node2服务器使用,并做最小授权。
root@haoding hd205]# mysql -uroot -p
mysql> grant replication slave on *.* to replication@'192.168.1.204' identified by 'password';
mysql> flush privileges;
mysql> commit;
配置用户完成。
##4. 记录下node1服务器当前的二进制日志的文件名和位置(作用:给到下一步使用)
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000007 | 2566 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
##5. 在Node2服务器上通过语句指定要复制的主服务器
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.1.203',
-> MASTER_USER='replication',
-> MASTER_PASSWORD='password',
-> MASTER_PORT=3306,
-> MASTER_LOG_FILE='mysql-bin.000007',
-> MASTER_LOG_POS=2566; #(注意, 可以一主多从 ,不可一从多主)
##6. 在Node2上启动从服务器功能,并查看状态
mysql> start slave;
mysql> show slave status\G
重点查看上图中,
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
这两项显示都是YES才为正常
如果出现no或者connecting,就要查看错误日志,根据错误原因来排除故障
##7.构建node2作为主,node1作为从
从上述步骤我们能得到:第2~6步就完成了“node1主—node2从”同步关系。
顺着这个思路,将node1与node2角色调换,执行一遍上述的命令,就能生成“node2主—node1从”的同步关系。
##8.测试主主同步
###8.1.node1同步到node2
在node1上面执行:
mysql> create database test1 default character set `utf8` collate `utf8_unicode_ci`;
Query OK, 1 row affected (0.02 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test1 |
+--------------------+
5 rows in set (0.00 sec)
到node2上面去查看:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test1 |
+--------------------+
5 rows in set (0.00 sec)
###8.2.node2同步到node1
在node2上面执行:
mysql> create database test2 default character set `utf8` collate `utf8_unicode_ci`;
Query OK, 1 row affected (0.05 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test1 |
| test2 |
+--------------------+
6 rows in set (0.00 sec)
到node1上面去查看:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test1 |
| test2 |
+--------------------+
6 rows in set (0.00 sec)
OK了,主主同步验证成功。下一讲,我们会将keepalived加进来,实现mysql+keepalived主主高可用、自动漂移架构。https://blog.csdn.net/haoding205/article/details/81508423
文中所提到的/etc/my.cnf配置文件可以在如下网盘中下载获取:
网盘下载地址:
链接:https://pan.baidu.com/s/1vSEYgemMNK3vGroRJKZ4-w