Mysql中如何实现半同步复制

63次阅读
没有评论

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

本篇文章为大家展示了 Mysql 中如何实现半同步复制,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

一、环境准备:

centos 系统服务器 2 台、一台用户做 Mysql 主服务器,一台用于做 Mysql 从服务器,配置好 yum 源、防火墙关闭、各节点时钟服务同步、各节点之间可以通过主机名互相通信

192.168.41.145   master

192.168.41.137  slave

二、准备步骤:

1、iptables -F setenforce 清空防火墙策略,关闭 selinux

2、①vim /etc/hosts

192.168.41.145   master     #各节点之间可以通过主机名互相通信

192.168.41.137  slave

② ntpdate 172.17.0.1  # 各节点时钟服务同步

3、拿两台服务器都使用 yum 方式安装 Mysql 服务,要求版本一致

4、分别启动两台服务器 mysql 服务,确保服务正常.

三、实现步骤:

1、配置 master 主服务器

对 master 进行配置,包括打开二进制日志,指定唯一的 servr ID。例如,在配置文件加入如下值。

vim /etc/my.cnf

server-id=1 #配置 server-id,让主服务器有唯一 ID 号

log-bin=mysql-bin #打开 Mysql 日志,日志格式为二进制

skip-name-resolve# 关闭名称解析,(非必须)

2.创建复制帐号

在 Master 的数据库中建立一个备份帐户:每个 slave 使用标准的 MySQL 用户名和密码连 master。进行复制操作的用户会授予 REPLICATION SLAVE 权限。

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO slave@ 192.168.%.% IDENTIFIED BY ke

3.查看主服务器状态

在 Master 的数据库执行 show master status,查看主服务器二进制日志状态

4、配置 slave 从服务器

对 slave 进行配置,打开中继日志,指定唯一的 servr ID,设置只读权限。在配置文件加入如下值

server-id=2 #配置 server-id,让从服务器有唯一 ID 号

relay_log = mysql-relay-bin #打开 Mysql 日志,日志格式为二进制

read_only = 1 #设置只读权限

log_bin = mysql-bin #开启从服务器二进制日志

log_slave_updates = 1 #使得更新的数据写进二进制日志中

5.启动从服务器复制线程

①stop  slave;

②reset slave;

③让 slave 连接 master,并开始重做 master 二进制日志中的事件。

CHANGE MASTER TO

MASTER_HOST= 192.168.41.145 ,

MASTER_USER= slave ,

MASTER_PASSWORD= ke ,【主从密码要一致】

MASTER_LOG_FILE= mysql-bin.000001 ,

MASTER_LOG_POS=278;

※注意

IP 为 master 的 IP;

密码和 master 设置一致;

POS 设置查看 master 得到:show master status

④start slave;# 启动复制线程。

6、查看从服务器状态

可使用 SHOW SLAVE STATUS\G 查看从服务器状态,如下所示,也可用 show processlist \G 查看当前复制状态:

Slave_IO_Running: Yes #IO 线程正常运行

Slave_SQL_Running: Yes #SQL 线程正常运行

【两者必须同时 YES,才算启动成功】

附:主从同步出现一下错误:

Slave_IO_Running: Connecting

Slave_SQL_Running: Yes

解决方法:

导致 lave_IO_Running 为 connecting 的原因主要有以下 3 个方面:

  1、网络不通

2、密码不对

3、pos 不对

四、验证

在 master 上插入数据,查看 slave 上是否可以同步

create database liuke;# 建数据库

use liuke;

create table mini_tb(id int(3),name char(10));  # 建表

insert into mini_tb values(001, candy #插入数据

select*from mini_tb;     #查看表内容

在 slave 上查看,可以同步则成功。

五、添加新 slave 服务器

假如 master 已经运行很久了,想对新安装的 slave 进行数据同步,甚至它没有 master 的数据。

此时,有几种方法可以使 slave 从另一个服务开始,例如,从 master 拷贝数据,从另一个 slave 克隆,从最近的备份开始一个 slave。为了加快 Slave 与 master 同步,可

用以下方式先进行数据同步:

(1)master 的某个时刻的数据快照;

(2) 数据库的备份数据

(3)master 的二进制日志文件。

————–mysql 实现数据库主主复制 —————-

一、原理

主主复制即在两台 MySQL 主机内都可以变更数据,而且另外一台主机也会做出相应的变更。

如何实现:就是将两个主从复制有机合并起来。

配置的时候需要注意的问题:主键重复,server-id 不能重复。

二、实验步骤

master:192.168.41.145   slave:192.168.41.137

1、配置文件

定义 master 使用奇数 id

vim   /etc/my.cnf

auto_increment_offset=1    # 起始值。一般填第 n 台主 MySQL。此时为第一台主 MySQL

auto_increment_increment=2    # 步进值 auto_imcrement。一般有 n 台主 MySQL 就填 n

slave 使用偶数 id

auto_increment_offset=2

auto_increment_increment=2

2、  因为主主复制是两个主从复制组合一起,所以就接着上面主从复制接着配置。

(1)

①在 slave 上创建一个 192.168.41.145 主机可以登录的 MySQL 用户。

用户:bubu   密码:123

②创建:create user bubu @ 192.168.41.145 IDENTIFIED BY 123

授权:grant replication slave on *.* to bubu @ 192.168.41.145 IDENTIFIED BY 123

mysql FLUSH PRIVILEGES;

③在 192.168.41.137 上查看二进制名和位置:show master status;

(3)告知二进制文件名与位置

在 192.168.41.145 中执行:

change master to  master_host= 192.168.41.137 ,

master_user= bubu ,

master_password= 123 ,

master_log_file= mysql-bin.000004 ,

master_log_pos=601;

主主复制配置完成。

三、测试

(1)

两个主机分别启动 slave:start slave;

分别查看 slave 状态:

192.168.41.145    【replicate-do-db=aa #要同步的数据库,默认所有库】

192.168.41.137

Mysql 中如何实现半同步复制

当看到 Slave_IO_Running: YES、Slave_SQL_Running: YES 才表明状态正常

(2)

①192.168.41.145

MariaDB [mysql] use jesper;

create table tab1(id int);

insert into tab1  values(66

select*from tab1;

②192.168.41.145

MariaDB [mysql] use jesper;

insert into tab1  values(99

select*from tab1;

查看数据:两个主机数据结果一样!

Mysql 中如何实现半同步复制Mysql 中如何实现半同步复制

※注意:

1、主主复制配置文件中 auto_increment_increment 和 auto_increment_offset 只能保证主键不重复,却不能保证主键有序。

2、当配置完成 Slave_IO_Running、Slave_SQL_Running 不全为 YES 时,show slave status\G 信息中有错误提示,可根据错误提示进行更正。

常见出错点:

1、两台数据库都存在 db 数据库,而第一台 MySQL db 中有 tab1,第二台 MySQL db 中没有 tab1,那肯定不能成功。

2、已经获取了数据的二进制日志名和位置,又进行了数据操作,导致 POS 发生变更。在配置 CHANGE MASTER 时还是用到之前的 POS。

3、stop slave 后,数据变更,再 start slave。出错。

终极更正法:重新执行一遍 CHANGE MASTER 就好了

————–MySQL 实现数据库半同步复制 ————-

半同步复制模式必须在主服务器和从服务器同时中开启,否则将会默认为异步复制模式。

一、环境准备

①需要安装方可使用:

mysql INSTALL PLUGIN plugin_name SONAME shared_library_name

半同步复制:

semisync_master.so

semisync_slave.so

②检查是否有自动加载功能

MariaDB [(none)] show variables like have_dynamic_loading

Mysql 中如何实现半同步复制Mysql 中如何实现半同步复制

③主从复制已经配置好,并且已经工作。

二、实验步骤

1、主节点设置:

①安装:INSTALL PLUGIN rpl_semi_sync_master SONAME semisync_master.so

②查看:MariaDB [mydb] SHOW GLOBAL VARIABLES LIKE rpl_semi% #查看半同步复制文件

+————————————+——-+

| Variable_name | Value |

+————————————+——-+

| rpl_semi_sync_master_enabled | OFF |

| rpl_semi_sync_master_timeout | 10000 |

| rpl_semi_sync_master_trace_level | 32 |

| rpl_semi_sync_master_wait_no_slave | ON |

+————————————+——-+

③MariaDB [mydb] SET GLOBAL rpl_semi_sync_master_enabled=ON;【0:关闭;1:开启】

# 开启半同步复制,默认是关闭的。

2、从节点设置:

①INSTALL PLUGIN rpl_semi_sync_slave SONAME semisync_slave.so

②MariaDB [mydb] SHOW GLOBAL VARIABLES LIKE rpl_semi% #查看是否加载成功

+———————————+——-+

| Variable_name | Value |

+———————————+——-+

| rpl_semi_sync_slave_enabled | OFF |

| rpl_semi_sync_slave_trace_level | 32 |

+———————————+——-+

③重启从服务器 IO 线程,手动将异步模式换成半同步模式

MariaDB [mydb] STOP SLAVE IO_THREAD;

MariaDB [mydb] SET GLOBAL  rpl_semi_sync_slave_enabled = ON ;

MariaDB [mydb] SHOW GLOBAL VARIABLES LIKE rpl_semi%

MariaDB [mydb] START SLAVE IO_THREAD;

※可查看从库错误日志观察是否生效

3、配置文件修改

主从配置文件都添加:

vim /etc/my.cnf

rpl_semi_sync_master_enabled=1 #表示以后启动 MySQL 将会自动开启半同步复制

三、测试

摸拟 slave 挂掉,master 等待 10s 仍没接收到反馈信号,则转为异步复制模式,继续执行。

首先同步创建数据库 aa

1、slave 执行 stop slave; 关闭主从复制

2、master 在 aa 数据库中创建表 aihao,没接收到反馈信号,等待十秒后(Rpl_semi_sync_master_timeout=1000 等待超时),继续执行

master:

Mysql 中如何实现半同步复制Mysql 中如何实现半同步复制

slave:

Mysql 中如何实现半同步复制Mysql 中如何实现半同步复制

3、master 在数据库中再创建 tab2,不需要等待反馈,直接执行

【当反馈超时时,master 将切换到异步复制模式。此时是异步模式,不需要等待】

Mysql 中如何实现半同步复制Mysql 中如何实现半同步复制

4、slave 执行 start slave,数据开始同步,建立 aihao、tab2,反馈给 master,并切换为半同步复制

Mysql 中如何实现半同步复制Mysql 中如何实现半同步复制

5、slave 执行 stop slave; 关闭主从复制

6、master 在数据库中创建表 tab3,此时需要等待 10s,接收 slave 反馈信号;等待超时,切换为异步复制模式,继续执行【步骤 4 时,数据同步已经反馈给 master,此时 master 已经是半同步复制模式】

Mysql 中如何实现半同步复制Mysql 中如何实现半同步复制

上述内容就是 Mysql 中如何实现半同步复制,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注丸趣 TV 行业资讯频道。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计5519字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)