Linux之MySQL(主从复制、半同步复制)

1. 安装mysql

这里为了快速搭建,直接使用rpm安装包安装(编译安装太费时)

获取安装包

server1安装:

server2:

server3:

 

2. 基于二进制位置的主从复制

  • 主节点:server1:192.168.1.11
  • 从节点:server2:192.168.1.12

主节点:

vim /etc/my.cnf

启动mysql服务,并查看临时密码

cat /var/log/mysqld.log | grep password

安全初始化mysql数据库

更改密码,默认密码是刚才在日志中查到的临时密码。

注:这里的新密码有健壮性要求,用大小写字母、数字、符号混合

移除匿名用户登陆权限

禁止超户远程登陆

移除测试数据库

刷新权限表

登陆数据库

创建复制用户并授权(192.168.1网段huayu用户授权所有权限)

grant replication slave on *.* to huayu@'192.168.1.%' identified by 'Huayu+123';

查看master状态(这里的二进制文件和位置需要在从节点使用)

show master status;

 

从节点:

先测试是否可以远程登录主节点mysql

mysql -h 远程主机ip -u登陆用户身份 -p

退出(quit)

更改mysql配置文件

vim /etc/my.cnf

启动服务 

查看server2中mysql的临时密码,并安全初始化

初始化过程和主节点一样

登陆mysql

从库和主库建立连接,必须和主服务器里查看到的数据保持一致

查看从节点状态

主要是IO和SQL的状态是yes即可

测试:

在主节点创建数据库

创建表,插入数据

 

在从节点查看

可以看到,在主节点插入的数据,在从节点也可以看到,证明复制成功

 

3. 基于gtid的主从复制

优点:不需要知道复制哪个文件,也不需要知道从哪个号开始复制

因为之前的实验已经配置主从复制,在这里先停止slave

更改主节点配置文件,启用gtid

vim /etc/my.cnf

 重启服务,并授权

从节点更改配置文件,添加gtid

重启mysql,添加主节点配置

change master to master_host='192.168.1.11', master_user='huayu', master_password='Huayu+123', MASTER_AUTO_POSITION=1;

 

查看从节点状态

测试

主节点插入一条数据(注:可以看到二进制文件和位置都改变了)

在从节点查看

也可以查看gtid记录

 

3. 半同步复制

主库在执行完客户端提交的事务后不会立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟。

主库:

在主库安装半同步插件,查看插件是否加载

install plugin rpl_semi_sync_master soname 'semisync_master.so';
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS  WHERE PLUGIN_NAME LIKE '%semi%';

查看是否启用

show global variables like '%semi%'; 

显然没有启用

临时设置启用

set global rpl_semi_sync_master_enabled=1;

 

永久设置:编辑文件/etc/my.cnf写入rpl_semi_sync_master_enabled=1

设置超时时间(单位ms)

set global rpl_semi_sync_master_timeout=5000;

 

再次查看

查看半同步是否运行

show status like 'Rpl_semi_sync_master_status';

 

从库:

安装半同步从库插件

install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

启用插件

set global rpl_semi_sync_slave_enabled=1;

这里需要重启slave IO 否则半同步不生效

stop slave IO_THREAD;
start slave IO_THREAD;

查看半同步插件启用

show global variables like '%semi%';

查看半同步是否在运行(状态)

 show status like 'Rpl_semi_sync_slave_status';

 

测试:

正常情况下

主库插入一条数据

从库读取

可以看到成功复制

在主库查看半同步状态,可以看到成功复制一次,失败0次

停止从库slave

主节点再次插入

 

可以看到,耗时5s多,因为我们之前设置超时时间是5s

主库查看

主库成功插入

从库查看

从库没有数据

主库查看半同步状态

同步失败一次

从库启动slave,再查看

可以看到,数据又同步了

注:当半同步复制发生超时时(rpl_semi_sync_master_timeout参数,单位是毫秒,默认为10000,即10s,我之前设定为5s),会暂时关闭半同步复制,使用异步复制。当master dump线程发送完一个事务的所有事件之后,如果在超时时间内,收到了从库的响应,则主从又重新恢复为半同步复制。
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值