MySQL中主从复制是什么

  介绍

这篇文章主要介绍了MySQL中主从复制是什么,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。

前言:

在MySQL中,主从架构应该是最基础,最常用的一种架构了。后续的读写分离,多活高可用架构等大多都依赖于主从复制。主从复制也是我们学习MySQL过程中必不可少的一部分,关于主从复制的文章有很多,笔者也来凑凑热闹,写写这方面的内容吧,同时分享下自己的经验和方法。

主从复制(也称AB复制)是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中。对于多级复制,数据库服务器既可充当主机,也可充当从机.MySQL默认采用异步复制方式。

主从复制的过程及原理可以总结如下:

    <李>主服务器将数据的改变记录二进制binlog日志,当主人上的数据发生改变时,则将其改变写入二进制日志中。 <李>奴隶服务器会在一定时间间隔内对主二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/OThread请求主二进制事件。李 <>李同时主节点为每个I/O线程启动一个转储线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致。

 MySQL中主从复制是什么

,

基于二进制文件位置的主从复制又可以称为传统复制,即从服务器依赖于主服务器的binlog文件位置,当主库发生数据变更时,binlog pos位点会增长,从库会感应到变化来完成同步。

配置主从复制,我们首先要准备至少两台MySQL实例,一台充当主服务器,一台充当从服务器。由于主从复制依赖于binlog,所以主库必须开启binlog,且主从要配置不同的server_id、下面具体展示下配置过程:

<强> 2.1确认主从库配置参数

MySQL主从服务器建议有如下配置,可以先确认下,如果未配置,则需要修改配置文件然后重启。

 #主库参数配置要有以下参数
  vim/etc/my.cnf
  (mysqld)
  log-bin=binlog//启用二进制日志
  服务器ID=137//服务器唯一ID,默认值是1,一般设置为IP地址的最后一段数字
  binlog_format=行//bilog设置为连续模式防止复制出的错
  
  #从库建议配置以下参数
  vim/etc/my.cnf
  (mysqld)
  relay-log=relay-bin
  服务器id=138 

<强> 2.2确定主库二进制位置,创建同步账号

若主从库都是刚刚初始化完成,且主库无操作时,从库可不用同步主库的数据,直接确定主库的binlog位置即可。

 #查看主库binlog文件位置
  显示主状态;
  
  #主库创建同步账号
  创建用户& # 39;repl # 39; @ # 39; % & # 39;被& # 39;123456 & # 39;;
  格兰特复制奴隶> #主库创建同步账号
  创建用户& # 39;repl # 39; @ # 39; % & # 39;被& # 39;123456 & # 39;;
  格兰特复制奴隶> #进入从库MySQL命令行执行修改主语句连接主库
  #二进制文件名及pos位置由上面步骤获得
  修改主MASTER_HOST=& # 39; MySQL主服务器IP地址& # 39;,
  MASTER_PORT=3306,
  MASTER_USER=& # 39; repl # 39;
  MASTER_PASSWORD=& # 39; 123456 & # 39;
  MASTER_LOG_FILE=& # 39; binlog.000002& # 39;
  MASTER_LOG_POS=154;
  
  #开启主从复制并坚持状态
  开始的奴隶;
  显示奴隶状态\ G//查看奴隶状态确保Slave_IO_Running:是的Slave_SQL_Running:是的

GTID是MySQL 5.6的新特性,其全称是全局事务标识符,可简化MySQL的主从切换以及Failover.GTID用于在binlog中唯一标识一个事务。当事务提交时,MySQL服务器在写binlog的时候,会先写一个特殊的binlog事件,类型为GTID_Event,指定下一个事务的GTID,然后再写事务的binlog。

在基于GTID的复制中,首先从服务器会告诉主服务器已经在从服务器执行完了哪些事务的GTID值,然后主库会有把所有没有在从库上执行的事务,发送到从库上进行执行,并且使用GTID的复制可以保证同一个事务只在指定的从库上执行一次,这样可以避免由于偏移量的问题造成数据不一致。也就是说,无论是级联情况,还是一主多从的情况,都可以通过GTID自动找位置,而无需像之前那样通过File_name和File_position找主库binlog位置了。

基于GTID的主从复制与上面基于二进制文件位置的主从复制搭建步骤类似,同样简单展示下搭建过程:

MySQL中主从复制是什么