数据库半同步模式

数据库半同步模式

数据库半同步复制模式

前置准备
  • 配置情况

    • 主机说明
      192.168.4.51主数据库服务器
      192.168.4.52从数据库服务器
      192.168.4.1从数据库服务器
  • 说明

    • 先搭建一主多从架构
  • 过程

#4.51备份数据给4.52 4.1 开启binlog日志
mysql -uroot -p
	create database db1;
	create table db1.s(id int auto_increment primary key, name varchar(10) not null);
	insert into db1.s(name) values('jack');
	exit

mysqldump -uroot -p -B db1 > 1db1.sql  #先备份一份
scp 1db1.sql root@192.168.4.52:/root/  #先给4.52一份

vim /etc/my.cnf
===================
[mysqld]
server_id=51
log-bin=db51
===============================
systemctl restart mysqld

mysqldump -uroot -p --master-data -B db1 > 2db2.sql #主要测试--master-data用处
scp 2db1.sql root@192.168.4.1:/root/ #这份给4.1

mysql -uroot -p
	grant replication slave on *.* to look@'%' identified by '123abc...A';
	#授权同步用户look
	
#4.52恢复数据 配置主从同步
mysql -uroot -p < 1db1.sql  #直接导入了

vim /etc/my.cnf
===============
[mysqld]
server_id=52  #配置不同id
=========================
systemctl restart mysqld #重启服务

mysql -uroot -p
	change master to
		master_host='192.168.4.51',
		master_user='look',
		master_password='123abc...A',
		master_log_file='db51.000001',
		master_log_pos=154   #主那边show master status  看
		
	start slave;  #开启
	show slave status; #查看IO  SQL是否启动


#4.1恢复数据  配置主从同步
mysql -uroot -p < 2db1.sql  #直接导入 
ERROR 1794 (HY000) at line 22: Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.
#--master-data 参数作用出来了。。。。没有配置server_id无法导入。。。

vim /etc/my.cnf
==================
[mysql]
server_id=1
==========================
systemctl restart mysqld
mysql -uroot -p < 2db1.sql   #现在可以成功导入了
grep 'CHANGE MASTER TO' 2db1.sql    #查看偏移量
CHANGE MASTER TO MASTER_LOG_FILE='db51.000001', MASTER_LOG_POS=154;


mysql -uroot -p
	change master to
		master_host='192.168.4.51',
		master_user='look',
		master_password='123abc...A',
		master_log_file='db51.000001',
		master_log_pos=154
	
	start slave; #启动
	show slave status;  #查看IO线程  SQL线程



#4.51测试
mysql -uroot -p
	insert into db1.s(name) values ('Tom');
	

#4.52查看
mysql -uroot -p
	select * from db1.s;
+----+------+
| id | name |
+----+------+
|  1 | jack |
|  2 | Tom  | 		#有了
+----+------+

#4.1查看
mysql -uroot -p
	select * from db1.s;
+----+------+
| id | name |
+----+------+
|  1 | jack |
|  2 | Tom  |	    #有了
+----+------+

说明 --master-data备份的数据会有主从语句 change master to master_log_file=xxxx master_log_pos=xxxx 这个语句 所以需要配置server_id才能导入 指定的时候这两个参数可以省略 因为已经有了

半同步配置过程

从mysql5.5开始,mysql以插件的形式支持半同步复制

区别
  • 对于异步复制:
    • 主库将事务binlog事件写入到binlog文件中,此时主库只会通知一下dump线程发送这些新的binlog,然后主库就会继续处理提交操作,而此时不会保证这些binlog传到任何一个从库节点上
  • 对于全同步复制:
    • 当主库提交事务之后,所有的从库节点必须全部收到,APPLY并且提交这些事务,然后主库线程才能继续做后续操作。这里面有一个很明显的缺点就是,主库完成一个事务的时间被拉长,性能降低。
  • 对于半同步复制:
    • 是介于全同步复制和异步复制之间的一种,主库只需要等待至少一个从库节点收到并且Flush binlog到relay-log文件即可,主库不需要等待所有从库给主库反馈。同时,这里只是一个收到的反馈,而不是已经完全执行并且提交的反馈,这样就节省了很多时间。
半同步复制具体特性
  • 从库会在连接到主库时告诉主库,它是不是配置了半同步
  • 如果半同步复制在主库端是开启的,并且至少有一个半同步复制的从库节点,那么此时主库的事务线程在提交时会被阻塞并等待,两种结果,要么至少一个从库节点通知它已经收到了所有这个事务的binlog事件,要么一直等待直到超过配置的某一个时间点为止,而此时,半同步复制将自动关闭,转换为异步复制
  • 从库节点只有在接收到某一个事务的所有binlog,并将其写入并Flush到relay-log文件之后,才会通知对应主库上面的等待线程
  • 如果在等待过程中,等待时间已经超过了配置的超时时间,没有任何一个节点通知当前事务,那么此时主库会自动转换为异步复制,当至少一个半同步从节点赶上来时,主库便会自动转换为半同步方式的复制
  • 半同步复制必须是在主库和从库两端都开启时才行,如果在主库上没有打开,或者在主库上开启了而在从库上没有开启,主库都会使用异步方式复制
#确认数据库允许动态加载模块
mysql -uroot -p
	show variables like 'have_dynamic_loading';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| have_dynamic_loading | YES   |
+----------------------+-------+

	install plugin rpl_semi_sync_master SONAME 'semisync_master.so';  #加载master模块
	install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so'; #加载slave模块
	
	select plugin_name, plugin_status from information_schema.plugins where plugin_name like '%semi%'   #查看模块是否安装成功
+----------------------+---------------+
| PLUGIN_NAME          | PLUGIN_STATUS |
+----------------------+---------------+
| rpl_semi_sync_master | ACTIVE         |        //模块安装成功
| rpl_semi_sync_slave  | ACTIVE         |        
+----------------------+---------------+

#启用半同步复制    安装后默认是关闭的
set global rpl_semi_sync_master_enabled=1; 	#启用master半同步复制
set global rpl_semi_sync_slave_enabled=1;	#启用slave半同步复制


#查看半同步复制模式是否启用
show variables like 'rpl_semi_sync_%_enabled';
+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| rpl_semi_sync_master_enabled | ON    |    //模块已启用
| rpl_semi_sync_slave_enabled  | ON    |
+------------------------------+-------+

可以修改配置文件,永久启用半同步复制

vim /etc/my.cnf
========================
[mysqld]
plugin-load='rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so'
rpl-semi-sync-master-enabled=1
rpl-semi-sync-slave-enabled=1
====================================================================================
systemctl restart mysqld

更加详细半同步内容https://www.cnblogs.com/kevingrace/p/10228694.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值