mysql 主从同步 与 半同步

mysql主从同步复制定义

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

使用主从同步的好处:

  1. 通过增加从服务器来提高数据库的性能,在主服务器上执行写入和更新,在从服务器上向外提供读功能,可以动态地调整从服务器的数量,从而调整整个数据库的性能。
  2. 提高数据安全-因为数据已复制到从服务器,从服务器可以终止复制进程,所以,可以在从服务器上备份而不破坏主服务器相应数据
  3. 在主服务器上生成实时数据,而在从服务器上分析这些数据,从而提高主服务器的性能

    半同步复制 ---- 解决数据丢失的问题
    并行复制 ---- 解决从库复制延迟的问题

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

半同步复制原理:

配置主从同步

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

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

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

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

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

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

一、配置主服务器

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

[[email protected] mysql]# vim /etc/my.cnf
    ......
log-bin=/data/binmysql/mysql-bin
server-id=1
    ......

[[email protected] ~]# mkdir /data/binmysql
[[email protected] ~]#chown  mysql:mysql -R  /data/binmysql 

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

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

[[email protected] mysql]# /usr/local/mysql57/support-files/mysql.server start
[[email protected] 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不一致可以不用改)

[[email protected] ~]# scp /etc/my.cnf 192.168.10.15:/etc/
[[email protected] ~]# vim /etc/my.cnf
    ......
log-bin=/data/binmysql/mysql-bin
server-id=2
    ......

[[email protected] ~]# mkdir /data/binmysql
[[email protected] ~]# chown  mysql:mysql  /data/binmysql

[[email protected] ~]# 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;

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

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

mysql 半同步复制

1.当Slave主机连接到Master时,能够查看其是否处于 半同步复制的机制。
2.当Master上开启半同步复制的功能时,至少应该有一个Slave开启其功能

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

  1. 同步复制:Master提交事务,直到事务在所有的Slave都已提交,此时才会返回客户端,事务执行完毕。缺点:完成一个事务可能会有很大的延迟。
  2. 异步复制:当Slave准备好才会向Master请求binlog。缺点:不能保证一些事件都能够被所有的Slave所接收。
  3. 半同步复制:半同步复制工作的机制处于同步和异步之间,Master的事务提交阻塞,只要一个Slave已收到该事务的事件且已记录。它不会等待所有的Slave都告知已收到,且它只是接收,并不用等其完全执行且提交 ... 所以,半同步复制最好在低延时的网络中使用

开启半同步复制

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

[[email protected] mysql]# vim /etc/my.cnf

plugin-load=rpl_semi_sync_master=semisync_master.so
rpl_semi_sync_master_enabled=1 

重启服务,察看

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

[[email protected] mysql]# vim /etc/my.cnf

plugin-load=rpl_semi_sync_slave=semisync_slave.so
rpl_semi_sync_slave_enabled=1 

重启服务,察看

测试观察

主服务器在线,所有从服务器离线
此时向主服务器插入数据,观察。。。

mysql> stop slave;
Query OK, 0 rows affected (0.31 sec)

插入数据花了 整整 10s

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

mysql> start slave;
Query OK, 0 rows affected (0.31 sec)

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 节点

[[email protected] mysql]# vim /etc/my.cnf
log-slave-updates=on
gtid-mode=on
enforce-gtid-consistency=ON

配置 slave 节点

[[email protected] 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 模式

同时支持 半同步复制

原文地址:http://blog.51cto.com/13481789/2335244

时间: 2024-10-26 16:37:42

mysql 主从同步 与 半同步的相关文章

MySQL多实例实现半同步复制

MySQL多实例实现半同步复制 主库1:192.168.40.150 主库2:192.168.40.161 从库(2个MySQL实例):192.168.40.162 一:分别在192.168.40.161和192.168.40.150使用[show master status;]记录当前的复制位置 如下所示 mysql> show master status; +--------------+----------+--------------+------------------+-------

MySQL运维进阶-MySQL双主(master-master)+半同步(Semisync Repl

MySQL --> MariaDB --> Percona-Server MySQL: oracle ,commutity : 社区版 5.5 5.6 5.7 8.0MariaDB:5.5 10.xPercona:Percona-ServerInnoDB --> XtraDBXtrabackuppercona-tools: 存储引擎:引擎:也称为表类型,表级别概念,不建议在同一个库中的表上使用不同的ENGINE:CREATE TABLE ... ENGINE STORAGE_ENGINE

深入MySQL复制(三):半同步复制

1.半同步复制 半同步复制官方手册:https://dev.mysql.com/doc/refman/5.7/en/replication-semisync.html 默认情况下,MySQL的复制是异步的,master将新生成的binlog发送给各slave后,无需等待slave的ack回复(slave将接收到的binlog写进relay log后才会回复ack),直接就认为这次DDL/DML成功了. 半同步复制(semi-synchronous replication)是指master在将新生

mysql主从和mysql主主和半同步复制

一.准备(主从都需要配置):     yum -y install mysql mysql-server #安装mysql   yum -y install ntpdate #安装时间同步   echo '*/1 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &>/dev/null' >>/var/spool/cron/root #配置网络时间同步   service mysqld start #启动服务   chkconfig --add 

Mysql的ssl主从复制+半同步主从复制

准备工作 1.主从服务器时间同步 [[email protected] ~]# crontab -e */30 * * * * /usr/sbin/ntpdate 172.16.0.1 &>/dev/null ? ? MariaDB(10以上版本)的编译安装 部署配置 2.mysql说明 (1) 主服务器 hostname:master ? ?IP:172.16.21.2 ? (1) 从服务器 hostname:master ? ?IP:172.16.21.3 ? (3) 数据目录 ? /m

mysql主从复制中的半同步复制

实验mysql借助google提供的插件,完成半同步复制模型: 物理机依然是win7系统,虚拟机为centos7: 主节点:192.168.255.2 从节点:192.168.255.3 先配置为主从复制模型: 在主节点: ]# vim /etc/my.cnf 从节点: ]# vim /etc/my.cnf 启动两节点的myslq服务: ]# systemctl start mariadb.service 在主节点: 配置有复制权限的账号: > GRANT REPLICATION SLAVE,R

基于MySQL实现数据库的半同步主从复制

首先我们来了解一下数据库常遇到的问题: 第一就是性能上的问题 1.向上拓展(硬件方面) scale up 个体本身 容易达到极限 2.向外拓展 scale out 第二就是可用性的问题 1.数据库服务中断 2.误操作数据损坏 3.硬件故障 4.数据库升级测试遭遇bug 5.黑客攻击 基于以上这些问题就有了一个比较好的解决方案,那就是实现数据库的主从复制.MySQL主从复制技术可以提高服务器的性能.除此之外MySQL复制还可以解决以下几个问题: 1.数据分布 (Data distribution

MySQL 5.6 搭建半同步复制

确定是否可以动态安装插件 show variables like '%have_dynamic_loading%'; ls /usr/local/mysql-5.6.38-linux-glibc2.12-x86_64/lib/plugin/semisync_* /usr/local/mysql-5.6.38-linux-glibc2.12-x86_64/lib/plugin/semisync_master.so /usr/local/mysql-5.6.38-linux-glibc2.12-x8

MySQL学习笔记12半同步复制

1.1.1. 相关概念 默认情况下,MySQL使用异步复制,即master上的事务执行与slave上的复制操作不需要同步,master不需要等待slave上的复制线程将Binary Log接收完毕即可执行其它事务. 半同步复制时,master上的事务执行与slave上的复制操作需要在某个步骤上进行同步,master需要等待slave上的复制线程接收完毕Binary Log. 异步复制的工作效率比较高,但是在特定条件下,有可能造成master和slave的数据不一致.半同步复制可以降低数据不一致的