阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL双主复制详解

194次阅读
没有评论

共计 4176 个字符,预计需要花费 11 分钟才能阅读完成。

本文简单介绍 MySQL 双主复制原理及 1 个简单是双主复制验证。

一.MySQL 双主复制原理

1. 双主复制原理

master-master复制的两台服务器,既是 master,又是另一台服务器的slave 本质上互为主从。

二.验证环境

1. 操作系统

CentOS-6.7-x86_64

2. MySQL 版本

MySQL 版本是 5.6.36:https://cdn.mysql.com//Downloads/MySQL-5.6/mysql-5.6.36.tar.gz

3. 拓扑图

MySQL 双主复制详解

  1. 采用 VMware ESXi 虚拟出的 2 台服务器 master/backup,地址 10.11.4.196/197;
  2. MySQL 已安装并配置完成,可参考:http://www.cnblogs.com/netonline/p/7327409.html 中的 MySQL 部分;
  3. 主从配置可参考:http://www.linuxidc.com/Linux/2017-10/147550.htm

三.master 配置

1. my.cnf 配置

#在主从复制配置文件的基础上增加 3 个参数项
[root@master ~]# vim /etc/my.cnf
[mysqld]
server_id = 196
log_bin = /mysql/mysql-bin
max_binlog_size = 1G
sync_binlog = 0
binlog-format = mixed
binlog-ignore-db = information_schema,mysql,performance_schema,test

# 中继日志执行之后将变化写入自己的 binlog 文件, 即从库从主库复制的文件默认不会写入自己的 binlog 文件, 需要开启后才生效;
# 通常此从库同时作为主库时, 即链式复制时, 需要开启此参数;
# 默认参数为 0, 表示 OFF, 设置为 1 表示 ON, 参数可直接带 OFF 或 ON.
log-slave-updates = 1

# 做双主时, 每台数据库都可能在同一个表中插入数据, 如果表有一个自动增长的主键, 那么就会在多服务器上出现主键冲突; 解决方案是让每个数据库的自增主键不连续;
# 参数 auto_increment_increment 表示自增值, 一般有 n 台主库, 自增值就采用 n;
# auto_increment_offset 表示起始序号, 一般 offset 不超过自增值, 且各主库的自增值不一样.
auto_increment_increment = 2
auto_increment_offset = 1

#使用 --skip-slave-start 启动,可以不立即启动从库的复制线程,方便后续配置操作
[root@master ~]# service mysqld stop
[root@master ~]# mysqld_safe --skip-slave-start & 

2. 创建复制用户

#在主库上 10.11.4.0 网段的主机授权,从库用户 repl 获得 REPLICATION SLAVE 权限      
[root@master ~]# mysql -uroot -p
Enter password:

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.11.4.%' IDENTIFIED  BY 'repl';
mysql> flush privileges;

3. 获取 master binlog 文件名与偏移量

[root@master ~]# mysql -uroot -p
Enter password:

mysql> show master status;

MySQL 双主复制详解

  1. 获取到 binlog 文件名与偏移量,可为从库设定同步复制点。

4. iptables

[root@master ~]# vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
[root@master
~]# service iptables restart

四.backup 配置

1. my.cnf 配置

#将主库服务器上的 my.cnf 文件拷贝到从库服务器
[root@master ~]# scp /usr/local/mysql/my.cnf backup:/usr/local/mysql/
root@backup's password:

#修改 server id 值与主库服务器不同;
#auto_increment_offset 参数,各服务器的 offset 值应不一样
[root@backup ~]# vim /etc/my.cnf
[mysqld]
server_id = 197

auto_increment_increment = 2
auto_increment_offset = 2

#使用 --skip-slave-start 启动,可以不立即启动从库的复制线程,方便后续配置操作
[root@backup ~]# service mysqld stop
[root@backup ~]# mysqld_safe --skip-slave-start &

2. 创建复制用户

#在主库上 10.11.4.0 网段的主机授权,从库用户 repl 获得 REPLICATION SLAVE 权限      
[root@backup ~]# mysql -uroot -p
Enter password:

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.11.4.%' IDENTIFIED  BY 'repl';
mysql> flush privileges;

3. 获取 master(backup 节点) binlog 文件名与偏移量

[root@backup ~]# mysql -uroot -p
Enter password:

mysql> show master status;

MySQL 双主复制详解

  1. 获取到 binlog 文件名与偏移量,可为从库设定同步复制点。

4. iptables

[root@backup ~]# vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
[root@backup
~]# service iptables restart

五.同步复制

1. master 配置同步复制

#配置从库向主库提交的参数,如果参数有错误,可以重新配置;
# master-host、master-user、master-password、master-port 等也可在 my.cnf 文件中指定;
#”start slave“启动复制
[root@master ~]# mysql -uroot -p
Enter password:

mysql> change master to 
       master_host = '10.11.4.197', 
       master_user = 'repl', 
       master_password = 'repl', 
       master_log_file = 'mysql-bin.000009',
       master_log_pos = 1306;
mysql> start slave;

2. backup 配置同步复制

[root@backup ~]# mysql -uroot -p
Enter password:

mysql> change master to 
       master_host = '10.11.4.196', 
       master_user = 'repl', 
       master_password = 'repl', 
       master_log_file = 'mysql-bin.000003',
       master_log_pos = 2462;
mysql> start slave;

六.验证

1. 查看线程 

1)master 服务器

[root@master ~]# mysql -uroot -p
Enter password:

mysql> show processlist;

MySQL 双主复制详解

  1. master 服务器做为主库的 binlog dump 线程已由 backup 服务器从库的 repl 用户启动;
  2. master 服务器做为从库的 I / 0 线程与 SQL 线程由系统用户启动。 

2)backup 服务器

[root@backup ~]# mysql -uroot -p
Enter password:

mysql> show processlist;

MySQL 双主复制详解

  1. backup 服务器做为主库的 binlog dump 线程已由 master 服务器从库的 repl 用户启动;
  2. backup 服务器做为从库的 I / 0 线程与 SQL 线程由系统用户启动。

2. 查看从库状态 

1)master 服务器

[root@master ~]# mysql -uroot -p
Enter password:

mysql> show slave status\G;

MySQL 双主复制详解

  1. 重点关注 Slave_IO_Running 与 Slave_SQL_Running,状态均为 YES 时正常。 

2)backup 服务器

[root@backup ~]# mysql -uroot -p
Enter password:

mysql> show slave status\G;

MySQL 双主复制详解

3. 查看新建数据数据库同步情况

1)在 master 服务器新建数据库与表

[root@master ~]# mysql -uroot -p
Enter password:

mysql> create database dbtest2;
mysql> use dbtest2;
mysql> create table tabtest2(id int);
mysql> insert into tabtest2() values(1),(2);

MySQL 双主复制详解

2)在 backup 服务器查看数据库与表 

[root@backup ~]# mysql -uroot -p
Enter password:

(1)查看数据库

mysql> show databases;

MySQL 双主复制详解

(2)查询表

mysql> select * from dbtest2.tabtest2;

MySQL 双主复制详解

3)在 backup 服务器修改数据表 

[root@backup ~]# mysql -uroot -p
Enter password:

mysql> use dbtest2;
mysql> insert into tabtest2() values(3),(4);

MySQL 双主复制详解

4)在 master 服务器查看修改后的数据表 

[root@master ~]# mysql -uroot -p
Enter password:

mysql> select * from dbtest2.tabtest2;

MySQL 双主复制详解

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-10/147549.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计4176字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中