Mysql的ab复制

mysql复制在业界里有叫:mysql同步,ab复制等。专业名称就是叫:复制。复制是单向的异步复制,从一个Mysql(Master)复制到另一个Mysql(Slave)。实现整个主从复制,需要由Master服务器上的IO进程,和Salve服务器上的Sql进程和IO进程共同完成。

要实现主从复制,首先必须打开Master端的二进制日志(bin-log)功能,因为整个Mysql复制过程实际上就是Slave从Master端获取相应的二进制日志文件,然后在根据相应的Position号在自己Slave端完全的执行日志中所记录的各种操作,(二进制日志文件是用sql语句写成的所以可以直接在Slave机上直接执行)。

主从复制的基本过程如下:

1、Mysql Slave端的IO进程链接上Master,向Master请求指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;

2、Master接受来自Slave的IO进程的请求后,负责复制的IO进程根据Slave的请求信息,读取相应日志内容,返回给Slave 的IO进程。并将本次请求读取的bin-log文件名及位置一起返回给Slave端。

3、Slave的IO进程接受到信息后,将接受到的日志内容写入relay-log文件中,并将读取到的Master端的二进制日志文件名后Position号记录在Master-info文件中,下次根据记录的日志文件名和Position号从Master上继续复制。以确保数据的一致性。

4、Slave的Sql进程检测到relay-log中新增加的内容后,会马上解析relay-log的内容,并在自身执行。

这种传统的复制方法由于在Master端是多线程写入的,而在Slave端是单线程的复制,往往会造成很高的延迟,同时在配置的时候需要找到binlog和pos点,然后change master to指向,不是很有经验的运维,往往会找错,造成主从同步复制报错。而从Mysql5.6开始支持的gtid模式的主从复制从而很大程度上解决了这些问题。

TID:Transaction ID,事务的ID号:也就是说在mysql复制中每一个事务都有自己的ID号(随机数)

GTID:Global Transaction ID,全局事务ID,在整个事务架构中每一个事务ID号是全局唯一的,不止是在一个节点上而是整个主从复制架构中每任何两个事务的ID号都不会相同。是mysql对写入二进制日志的每个事务所作的标记。由server_uuid和事务id组成。

简单来讲GTID能够保证让一个从服务器到其他的从服务器那里实现数据复制而且能够实现数据整合的。一个事务对应一个唯一ID,一个GTID在一个服务器上只会执行一次,相对于行复制来讲数据安全性更高,故障切换更简单。

GTID也有它的限制,不支持非事务引擎;不支持create table … select 语句复制;不允许在一个SQL同时更新一个事务引擎和非事务引擎的表; 在一个复制组中,必须要求统一开启CTID或是关闭GTID,开启DTID后,就不在使用原来的传统的复制方式,对于createtemporary table 和drop temporary table语句不支持,不支持sqlslaveskip_counter。

Mysql是默认是异步复制、Master在将事件写入binlon时不知道Slave是否已经接受,此时Master宕机的,Slave可能会丢失事务。在这中情况下我们可以采用半同步复制,即一个线程在Master上提交事务将受到阻塞,直到得知一个已开启半同步复制功能的Slave已收到此事务的所有事件,或等待超时。

以下是mysql主从复制的一些简单配置

传统ab复制(mysql版本为rhel6.5自带的mysql):

在master主机上:

vim /etc/my.cnf
  server-id=1
  log-bin=mysql-bin #启动二进制日志系统
/etc/init.d/mysqld restart
cd /var/lib/mysql

可以通过mysqlbinlog指令来插看二进制日志文件

创建同步帐户,并给予权限

mysql -p
mysql> GRANT REPLICATION SLAVE ON *.* TO [email protected]‘172.25.254.3‘ IDENTIFIED BY ‘Westos+123‘ ;

查看master状态

show master status;

记录File和Position的值,在slave配置时会用到。

在slave主机上

查看能否远程登陆master主机的mysql

mysql -h 172.25.254.2 -uexample -pWestos+123

vim /etc/my.cnf
  server-id=2 #从服务器ID号,不要和主ID相同也不要与其他从服务器相同
/etc/init.d/mysqld restart
mysql -p

mysql> change master to
    -> master_host=‘172.25.254.2‘, #指定主服务器ip地址
    -> master_user=‘example‘,      #指定在主服务器上可以进行同步的用户名
    -> master_password=‘Westos+123‘, #同步用户的密码
    -> master_log_file=‘mysql-bin.000003‘, #上面看到的master的日志文件
    -> master_log_pos=1007;          #master机的position值
mysql> start slave;   #开启同步
mysql> show slave status\G #查看slave状态

看到以下两个yes就表示同步开启成功

 Slave_IO_Running: Yes
 Slave_SQL_Running: Yes

我们可以通过slave状态中的延迟时间是否为0和pos号是否与master主机一致来查看同步是否完成。

。。。
Seconds_Behind_Master: 0
Exec_Master_Log_Pos: 1007
。。。

Mysql的GTID复制:(mysql为5.7社区版)

在Master主机上:

vim /etc/my.cnf
  server-id=1 
  log-bin=mysql-bin 
  gtid-mode=on   #开启gtid
  enforce-gtid-consistency=on #强制GTID的一致性
/etc/init.d/mysqld restart
mysql -p
mysql> GRANT REPLICATION SLAVE ON *.* TO [email protected]‘172.25.254.3‘ IDENTIFIED BY ‘Westos+123‘ ;

在slave主机上

vim /etc/my.cnf
  server-id=2
  log-slave-updates #更新是否记入日志,当slave主机作为master主机是必须要有
  gtid-mode=on
  enforce-gtid-consistency=on
  slave-parallel-type=LOGICAL_CLOCK #MySQL 5.6的多线程同步仅在有多个数据库时才有明显的性能提升,MySQL 5.7.2之后,可以通过配置slave-parallel-type为LOGICAL_CLOCK来避开这个限制.
  slave-parallel-workers=16 #从服务器的SQL线程数,一个数据库同一时间只能有一个worker线程来进行工作。master_info_repository=TABLE #主服信息记录库=表/文件relay_log_info_repository=TABLE #中继日志信息记录库relay_log_recovery=ON   #在CRASH后自动放弃所有未执行的relay-log,并且重新从MASTER获取日志;保证relay-log的完整
/etc/init.d/mysqld restart
mysql -p
mysql> change master to 
    -> master_host=‘172.25.254.2‘,
    -> master_user=‘example‘,
    -> master_password=‘Westos+123‘,
    -> master_auto_position=1;
mysql> start slave;
mysql> show processlist; #可以看到开启了多个线程

这样简单的配置就完成了,检测的方法就是在Master主机上创建一个数据库看Slave机上是否会同步。

时间: 2024-08-07 06:08:24

Mysql的ab复制的相关文章

MYSQL 的 AB 复制(主从,双机热备)

MYSQL 的 AB 复制(主从,双机热备)     在实际的应用中,我们经常需要制作一个备份数据库.当我们的主数据库发生问题导致无法正常相应的时候,我们可以 把备用的从数据库街上来顶替主库,以达到不间断服务,热备的作用.在实际应用中从库和主库的数据必须同步,保持一致, 对主库的任何操作通要引发从库上的同样操作. 实现原理: 从库以一定的频率去读取主库的二进制日志文件,按照日志中记录对从库进行同样的操作,以达到同步效果. 注意版本影响: 实现双机的热备首先要了解主从数据库服务器的版本的需求.首先

Mysql的AB复制(主从复制)原理及实现

Mysql复制(replication)是一个异步的复制,从一个Mysql 实例(Master)复制到另一个Mysql 实例(Slave).实现整个主从复制,需要由Master服务器上的IO进程,和Slave服务器上的Sql进程和IO进程共从完成.         要实现主从复制,首先必须打开Master端的binary log(bin-log)功能,因为整个MySQL 复制过程实际上就是Slave从Master端获取相应的二进制日志,然后再在自己slave端完全顺序的执行日志中所记录的各种操作

学习笔记--mysql的AB复制

MySQL 提供了数据库的同步功能,这对我们实现数据库的冗灾.备份.恢复.负载均衡等都是有极大帮助的. 客户端的数据全部写入mysql主服务器中,主服务器将数据同步至从服务器,当用户读取数据时在从服务器中进行读取,极大降低了主服务器的压力,提高了整体业务的水平 实验环境:master:server6 slave:server7 Mysql版本:Ver 14.14 Distrib 5.1.71 Master 配置: vim   /etc/my.cnf 在[mysqld]下添加一下参数 log-bi

Mysql数据库AB复制简单实现

Mysql 主 从 复 制 在实际企业应用环境当中,单台mysql数据库是不足以满足日后业务需求的.譬如服务器发生故障,没有备份服务器来提供服务的话,业务就得停止.介于这种情况,我们可以对mysql数据库进行主从复制,mysql直接的主从复制需版本相同,可以跨平台进行主从复制操作. 一.使用mysql主从复制的好处有: 1.采用主从服务器这种架构,稳定性得以提升.如果主服务器发生故障,我们可以使用从服务器来提供服务. 2.在主从服务器上分开处理用户的请求,可以提升数据处理效率. 3.将主服务器上

mysql AB复制

AB复制又称主从复制,实现的是数据同步.如果要做MySQL AB复制,数据库版本尽量保持一致.如果版本不一致,从服务器版本高于主服务器,但是版本不一致不能做双向复制.MySQL AB复制有什么好处呢?有两点,第一是解决宕机带来的数据不一致,因为MySQL AB复制可以实时备份数据:第二点是减轻数据库服务器压力,这点很容易想到,多台服务器的性能一般比单台要好.但是MySQL AB复制不适用于大数据量,如果是大数据环境,推荐使用集群. 然后我们来看看MySQL复制的 3 个主要步骤: 1)主服务器把

mysql AB复制理论

Mysql AB复制(主从复制)理论 MySQL 支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.即从Master复制到一个或多个Slave上. 实现整个主从复制需要由Master上的IO进程,和Slave上的sql进程和IO进程共同完成.首先打开Master上的 binary log (bin-log)功能(修改配置文件),因为整个复制实际就是slave从master端获取相应的二进制日志,然后在slave端按顺序执行日志中的各种操作.(二进制日志几乎

Mysql 主从复制(AB复制)

Mysql的主从复制又叫做AB复制,主要作用就是将主服务器上的数据及时复制到从服务器上,来实现数据的同步,这样做的好处有,在进行数据备份时,可以减轻主服务器的运行压力,另外即使主服务器宕机了,也能从从服务器上取得主服务器的数据,从而保证数据不会丢失.这对于一个企业来说是至关重要的.一般在实际生产环境中,由单台mysql作为独立的数据库是完全不能满足实际需要的,无论在安全性,高可用性以及高并发等方面,一般是通过主从复制(Master-Slave)的方式来同步数据,再通过keepalived组件或者

MySql ---- ab复制(主从复制)

ab复制(主从复制)可以让mysql实现:1.数据的备份(主服务器的数据全部同步到从服务器)2.可以负载均衡减小主服务器的压力3.真正实现mysql的读写分离 配置方法主服务器:1. 主服务器 my.cnf 配置cat /etc/my.cnf[mysqld]log-bin=mysql_binserver-id=1    不允许重复2. 授权,指定从服务器只能复制binlog,从服务器的ipgrant replication slave on *.* to 'slave'@'192.168.1.1

使用binlog日志, XtraBackup备份工具 ,MySQL AB复制

使用binlog日志 1.1 问题 利用binlog恢复库表,要求如下: 启用binlog日志 创建db1库tb1表,插入3条记录 删除tb1表中刚插入的3条记录 使用mysqlbinlog恢复删除的3条记录 1.2 步骤 实现此案例需要按照如下步骤进行. 步骤一:启用binlog日志 1)调整/etc/my.cnf配置,并重启服务 [[email protected] ~]# vim /etc/my.cnf [mysqld] .. .. log-bin-index=mysql-bin