mysql 半同步_mysql 主从同步 与 半同步

mysql主从同步复制定义

主从同步使得数据可以从一个数据库服务器复制到其他服务器上,在复制数据时,一个服务器充当主服务器(master),其余的服务器充当从服务器(slave)。通过配置文件,可以指定复制所有的数据库,某个数据库,甚至是某个数据库上的某个表。

使用主从同步的好处:

通过增加从服务器来提高数据库的性能,在主服务器上执行写入和更新,在从服务器上向外提供读功能,可以动态地调整从服务器的数量,从而调整整个数据库的性能。

提高数据安全-因为数据已复制到从服务器,从服务器可以终止复制进程,所以,可以在从服务器上备份而不破坏主服务器相应数据

在主服务器上生成实时数据,而在从服务器上分析这些数据,从而提高主服务器的性能

半同步复制 ---- 解决数据丢失的问题

并行复制 ---- 解决从库复制延迟的问题

主从复制--异步复制原理:

1a8d05ebb34c679bb58c7356ef2c4154.png

半同步复制原理:

90e5a370a46c5d365c2dd52d29718aec.png

配置主从同步

有很多种配置主从同步的方法,可以总结为如下的步骤:

1.主、从服务器都开启二进制模块功能,每台服务器都有独立的 ID 不可重复

2.修改 从服务器的 UUID不可相同

3.按照该配置文件,在从服务器上建立相关的 目录

4.同步主服务器的数据内容,分别同步到各个从服务器中(所有服务器的数据保持一致性)

5.查看二进制文件所在的位置和名称,以便主从同步数据一致

5c59b2b2a3811208fbafc109c13bc46e.png

一、配置主服务器

1、添加二进制模块,并创建对应的目录

[root@rehl-10 mysql]# vim /etc/my.cnf

......

log-bin=/data/binmysql/mysql-bin

server-id=1

......

[root@rehl-10 ~]# mkdir /data/binmysql

[root@rehl-10 ~]#chown mysql:mysql -R /data/binmysql

2、创建数据库的用户,授权可以进行复制、操作的账户:

启动数据库,进入数据库。创建用户 “mary“ 密码 “123123” ,授权给 192.168.10.% 段的 ip,并刷新时期生效

[root@rehl-10 mysql]# /usr/local/mysql57/support-files/mysql.server start

[root@rehl-10 mysql]# /usr/local/mysql57/bin/mysql -uroot

Mysql> grant all on *.* to 'mary'@'192.168.10.%' identified by “123123”;

Mysql> flush privileges;

查看是否生效:

mysql> select host,user from mysql.user;

+--------------+---------------+

| host | user |

+--------------+---------------+

| 192.168.10.% | mary |

| 192.168.10.% | root |

| localhost | mysql.session |

| localhost | mysql.sys |

| localhost | root |

+--------------+---------------+

5 rows in set (0.25 sec)

mysql>

3、备份数据,复制数据到从服务器中

利用 innobackupex 备份或者 LVM 快照备份

4、查看当前的二进制文件

当前二进制文件名字为 000026 位置已到 797 ;

mysql> show master status;

| File | Position |

| mysql-bin.000026 | 797 |

二、配置从服务器

1、复制配置文件到从服务器,检查是否开启二进制文件,修改配置文件中的 ID 和 UUID(UUID不一致可以不用改)

[root@rehl-10 ~]# scp /etc/my.cnf 192.168.10.15:/etc/

[root@rehl-15 ~]# vim /etc/my.cnf

......

log-bin=/data/binmysql/mysql-bin

server-id=2

......

[root@rehl-15 ~]# mkdir /data/binmysql

[root@rehl-15 ~]# chown mysql:mysql /data/binmysql

[root@rehl-15 ~]# vim /mysql/auto.cnf

[auto]

server-uuid=0c45e903-c4c4-11e8-8fa1-000c296bd14d

2、 登录从服务器的 mysql 客户端

mysql> stop slave;

mysql> reset slave;

mysql> change master to master_host='192.168.10.10',master_user='mary',master_password='123123',master_log_file='mysql-bin.000026',master_log_pos=797;

mysql> start slave; #开始启动从服务器功能

3、 查看从服务器信息

mysql> show slave status \G;

62edb54a4f4f29244d99c329423ab403.png

4、测试观察,在主服务器中插入数据,在从服务器上进行察看

517451b2ba6aff018e2d300cc8c71e34.png

注意:从数据库只能读,并不能写。

mysql 半同步复制

1.当Slave主机连接到Master时,能够查看其是否处于 半同步复制的机制。

2.当Master上开启半同步复制的功能时,至少应该有一个Slave开启其功能

同步(社区增强半同步),异步,半同步复制的比较:

同步复制:Master提交事务,直到事务在所有的Slave都已提交,此时才会返回客户端,事务执行完毕。缺点:完成一个事务可能会有很大的延迟。

异步复制:当Slave准备好才会向Master请求binlog。缺点:不能保证一些事件都能够被所有的Slave所接收。

半同步复制:半同步复制工作的机制处于同步和异步之间,Master的事务提交阻塞,只要一个Slave已收到该事务的事件且已记录。它不会等待所有的Slave都告知已收到,且它只是接收,并不用等其完全执行且提交 ... 所以,半同步复制最好在低延时的网络中使用

8b5150119257c35ac1121469617afb52.png

开启半同步复制

在主服务器节点上安装相关的插件(在配置文件上添加相关的模块)

[root@rehl-10 mysql]# vim /etc/my.cnf

plugin-load=rpl_semi_sync_master=semisync_master.so

rpl_semi_sync_master_enabled=1

重启服务,察看

cdc652065ea175d097ff2d91fa1b92dd.png

在从服务器节点上安装相关的插件(在配置文件上添加相关的模块)

[root@rehl-10 mysql]# vim /etc/my.cnf

plugin-load=rpl_semi_sync_slave=semisync_slave.so

rpl_semi_sync_slave_enabled=1

重启服务,察看

bbdfcb9261ae7393be37d9061c785168.png

测试观察

主服务器在线,所有从服务器离线,

此时向主服务器插入数据,观察。。。

mysql> stop slave;

Query OK, 0 rows affected (0.31 sec)

b8ec556b0ec5cf496ac7c6f7dc0d8065.png

插入数据花了 整整 10s

当再次插入数据的时候;或者在从服务器恢复半同步复制。再次观察,没有了延时

mysql> start slave;

Query OK, 0 rows affected (0.31 sec)

b017db40e17bed9aa76cbee349ace1eb.png

GTID 的工作原理

1、当一个事务在主库端执行并提交时,产生GTID,一同记录到 主 的 binlog日志中。

2、binlog传输到slave,并存储到slave的 relaylog后,读取这个GTID的这个值设置gtid_next变量,即告诉Slave,下一个要执行的GTID值。

3、从服务器的 sql线程从relay log 中获取GTID,然后对比 slave 自己的 binlog 是否有该 GTID。

4、如果有记录,说明该GTID的事务已经执行,slave会忽略。

5、如果没有记录,slave就会执行该 GTID事务,并记录该 GTID 到自身的 binlog,在读取执行事务前会先检查其他session持有该GTID,确保不被重复执行。

6、在解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描。

GTID 的优势

1、更简单的实现failover,不用以前那样在需要找 log_file 和 log_pos。

2、更简单的搭建主从复制。

3、比传统的复制更加安全。

4、GTID是连续的没有空洞的,保证数据的一致性,零丢失。

配置 master 节点

[root@rehl-10 mysql]# vim /etc/my.cnf

log-slave-updates=on

gtid-mode=on

enforce-gtid-consistency=ON

配置 slave 节点

[root@rehl-15 mysql]# vim /etc/my.cnf

gtid-mode=ON

enforce-gtid-consistency=ON

log-slave-updates=ON

MASTER_AUTO_POSITION=1

设置指点服务器

在slave从服务器上设置将从服务器指向主服务器,并启动复制线程:

mysql> CHANGE MASTER TO MASTER_HOST='192.168.10.71', MASTER_USER='mary', MASTER_PASSWORD='123123', MASTER_AUTO_POSITION=1;

mysql> start slave;

mysql> show slave status \G;

支持 GTID 模式

e5c9b50df27d81f6b175396d2fe9c2a4.png

同时支持 半同步复制

eff761f1cce44f20a5cc5ad991ed71db.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506924.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql内存数据库性能_Mysql内存表配置及性能测试

centos7 mysql数据库安装和配可以参考一下文章,基本照做就可以了(我选的方法二):http://www.cnblogs.com/starof/p/4680083.html说到内存表,首先有两个概念简单区分下:1.临时表;2.内存表;临时表与内存表的区…

mysql字符集排序规则_MySQL原理 - 字符集与排序规则

任何计算机存储数据,都需要字符集,因为计算机存储的数据其实都是二进制编码,将一个个字符,映射到对应的二进制编码的这个映射就是字符编码(字符集)。这些字符如何排序呢?决定字符排序的规则就是排序规则。查看内置字符…

mysql服务器默认操作字符集,如何在mysql中找到默认服务器字符集?

Using MySQL on FreeBSD 8.2. How do I find out the default server character set? Is there some command I can run or file I can check?UPDATEActually I want to know how to find both the default server character set and the current server character set.解决方…

mysql异常修复_MySQL错误修复:Table xx is marked as crashed and last (automatic?) repair failed...

问题一 Table xx is marked as crashed and last (automatic?) repair failed有开发找到我,说数据库坏了,连不上数据库,看了下 MySQL 的错误日志,报错如下:Error: Table ./db_name/table_name is marked as crashed a…

mysql 改变表的类型吗_mysql中修改表类型所带来的问题探讨

对于MySQL数据库,如果你要使用事务以及行级锁就必须使用INNODB引擎。如果你要使用全文索引,那必须使用myisam,那如何修改修改MySQL的引擎为INNODB呢,下面介绍一个修改方法。对于MySQL数据库,如果你要使用事务以及行级锁就必须使用…

mysql 字符串 截取字母_MySQL字符串函数:字符串截取

MySQL 字符串截取函数:left(), right(), substring(), substring_index()。还有 mid(), substr()。其中,mid(), substr() 等价于 substring() 函数,substring() 的功能非常强大和灵活。1. 字符串截取:left(str, length)mysql> …

建立学生选课表 mysql 语句_学生选课数据库SQL语句45道练习题整理及mysql常用函数(20161019)...

学生选课数据库SQL语句45道练习题:一、 设有一数据库,包括四个表:学生表(Student)、课程表(Course)、成绩表(Score)以及教师信息表(Teacher)。四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表(一)~表(四)…

java mysql jsp分页代码_JAVA/JSP学习系列之六(MySQL翻页例子)

JAVA/JSP学习系列之六(MySQL翻页例子)更新时间:2006年10月13日 00:00:00 作者:一、运行前准备下载了mysql的jdbc驱动(一个jar文件)并加载在CLASSPATH(方法见《JAVA/JSP学习系列之一(JDK安装) 》)(如果找不到,请从本站下载)建一个MySQL数据库…

mysql内置含糊_mySQL入门04 内置函数

【欢迎关注,点赞,收藏,私信交流】字符串函数查看字符的ascii码值ascii(str),str是空串时返回0select ascii(a);查看ascii码值对应的字符char(数字)select char(97);拼接字符串concat(str1,str2...)select concat(12,34,ab);包含字…

mysql与citespace_CiteSpace与MySQL数据库的连接-科学网—博客.PDF

CiteSpace与MySQL数据库的连接-科学网—博客.PDFCiteSpace与MySQL数据库的连接1,2 3李杰 ,陈超美1.上海海事大学海洋科学与工程学院2.上海海事大学科技情报研究所3. Drexel University- College of Computing and InformaticsCiteSpace科技文本挖掘及可视化知识分享…

gcn代码pytorch_GCN的简单实现(pytorch)

import torch import torch.nn as nn import torch.nn.functional as Fimport networkx as nxdef normalize(A , symmetricTrue):# A AIA A torch.eye(A.size(0))# 所有节点的度d A.sum(1)if symmetric:#D D^-1/2D torch.diag(torch.pow(d , -0.5))return D.mm(A).mm(D)e…

mysql的check语言_check在SQL语句中的意思是什么?

展开全部在SQL中 CHECK 的意思:约束CHECK 约束用于限制列中的值的范围。如果对单个列定义 CHECK 约束,那么32313133353236313431303231363533e58685e5aeb931333365646261该列只允许特定的值。如果对一个表定义 CHECK 约束,那么此约束会在特定…

当电压放大电路的开路增益和输出电阻固定后_放大器的设计基础

放大器是电子电路(尤其是模拟电路)中的主要构件之一,使用放大器,它们会提高信号电平。放大器是一个术语,用于描述增加输入信号强度的电路。放大器广泛用于从音频应用到射频应用的各个领域中。但是,对于所有放大器,无论…

mysql数据库 auto_increment_mysql数据库 auto_increment

MySQL内核月报 2014.09-MySQL 捉虫动态auto_increment背景:Innodb引擎使用B_tree结构保存表数据,这样就需要一个唯一键表示每一行记录(比如二级索引记录引用)。Innodb表定义中处理主键的逻辑是:1.如果表定义了主键,就使用主键唯一…

javascript 嵌入python_通过Python将区块链数据嵌入Javascript,这是正确的方法吗?

你说得对。此页面是使用JavaScript异步填充的,因此BeautifulSoup和类似的工具将无法看到您试图获取的特定内容。但是,如果您记录浏览器的网络流量,您可以看到一些(XHR)httpget请求被发送到restapi,restapi以JSON形式提供其结果。这个JSON恰好包含您要查找的信息。它实际上会向不…

linux 嵌入式 快照_Linux 系统之Systemd

标签:子贡问为仁。子曰:“工欲善其事,必先利其器。居是邦也,事其大夫之贤者,友其士之仁者。”——孔子(春秋)《论语卫灵公》【工欲善其事,必先利其器】掌握一门技术,知道其发展历程是非常重要的…

mysql php 乱码问题_解决php与mysql中文乱码问题

感兴趣的小伙伴,下面一起跟随编程之家 jb51.cc的小编两巴掌来看看吧!MysqL对中文的支持程度还是很有限的,尤其是新手,但凡出现乱码问题,就会头大。乱码问题1:用PHPmyAdmin操作MysqL数据库汉字显示正常&…

mysql xdevapi_MySql Connector/C++8简介

MySql Connector/C8是一个用于连接MySQL服务器的C应用程序。Connector/C8可用于访问实现文档存储的 MySQL服务器,或者使用SQL查询以传统方式访问。它支持使用XDevAPI开发C 应用程序,或使用XDevAPI for C开发纯C应用程序,同时Connector/C8还支…

mysql随机选择记录表_Mysql表中取随机记录

RAND()是Mysql中的取随机数函数,该函数返回一个float型数值v,v的值为0 例如: mysql> SELECT RAND(); -> 0.9233482386203 mysql> SELECT RAND(20); -> 0.15888261251047 mysql> SELECT RAND(20); -> 0.15888261251047 mysq…

国家缩写大全 mysql_各个国家的名称缩写和时区列表

A字头AE-阿联酋(UNITED EMIRATES)AF-阿富汗(AFGHANISTAN)AL-阿尔巴尼亚(ALBANIA)AM-亚美尼亚(ARMENIA)AO-安哥拉(ANGOLA)AR-阿根廷(ARGENTINA)AT-奥地利(AUSTRIA)AU-澳大利亚(AUSTRALIA)AZ-阿塞拜疆(AZERBAIJAN(REPUBLIC))B字头BD-孟加拉(BANGLADESH)BE-比利时(BELGIUM)BF-布基…