mysql主从复制

主从复制是数据库的一种复制技术,用于数据热备和读写分离。在主数据库更新后,变化会同步到从数据库。实现方式包括binlog日志和GTID方式。在binlog方式中,主从服务器配置binlog并同步位置;GTID方式则利用全局事务标识来跟踪和同步事务,无需指定日志位置。
摘要由CSDN通过智能技术生成

1.主从复制

概念

主从复制:一种数据库复制技术。主数据库 把更新操作同步复制到 从数据库,实现主从数据库拥有一样的数据库环境。

作用

  1. 对数据进行热备,如果主数据库出现故障无法正常工作时,从服务器可以接管服务,确保系统能正常运行。
  2. 读写分离。主数据库负责写操作,把读操作分摊到多个从服务器中。实现负载均衡,提高系统的性能。
  3. 数据备份。主从复制可以将主数据库的数据备份到从数据库中,从而保证数据的安全性和可恢复性。

实现方式

  1. 传统的binlong日志方式
  2. GTID方式

全局事务标识:global transaction identifiers
是用来代替传统复制的方法,GTID复制与普通复制模式的最大不同就是不需要指定二进制文件名和位置

具体实现步骤

(1)binlog日志方式

主机:

在/etc/my.cnf内,开启binlog日志,设置服务id号

vim /etc/my.cnf
log-bin=/var/log/mysql/mysql-bin  #设置binlog日志的存放目录
server-id=1
#修改存放目录的所属组与属主
chown mysql.mysql /var/log/mysql/
#重启mysql
systemctl restart mysqld

进入mysql, 查看master内的binlog日志的文件名、position
show master status\G
如下图:在这里插入图片描述

从机:

进入/etc/my.cnf,在[mysqld]下添加服务id号

vim /etc/my.cnf
server-id=2
#重启mysql

进入mysql,查看并修改master配置,开启slave,并检验

help change master to #查看master配置选项

如下图:
在这里插入图片描述
进入mysql

\e #进入编辑模式
CHANGE MASTER TO
  MASTER_HOST='主机ip',
  MASTER_USER='主机授权用户的名字',
  MASTER_PASSWORD='授权用户密码',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='存放binlog日志的文件名',
  MASTER_LOG_POS=154,   #主机master服务的positiion
  MASTER_CONNECT_RETRY=10
  
  start slave
  show slave status\G
  i/0线程和sql线程均为yes表示主从复制建立成功

(2)GTID方式

GTID工作原理

  1. master更新数据时,会在事务前产生GTID,一同记录到binlog日志中
  2. slave端的i/o 线程将变更的binlog,写入到本地的relay log中
  3. sql线程从relay log中获取GTID,然后对比slave端的binlog是否有记录
  4. 如果有记录,说明该GTID的事务已经执行,slave会忽略;如果没有记录,slave就会从relay log中执行该GTID的事务,并记录到binlog

主机

vim /etc/my.cnf   #在[mysqld]下添加如下内容
server-id=1   #定义server id master必写 
log-bin = mylog #开启binlog日志,master比写
gtid_mode = ON    #开启gtid
enforce_gtid_consistency=1   #强制gtid
[root@mysql-master ~]# systemctl restart mysqld   #重启
#进入mysql创建授权账户:
mysql> grant replication  slave,reload,super on *.*  to 'slave'@'%' identified by 'cqing@123';
mysql> flush privileges; #刷新

从机

vim /etc/my.cnf  #添加如下配置
server-id=2
gtid_mode = ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE
[root@mysql-slave ~]# systemctl restart mysqld

#进入mysql
mysql> \e
change master to
master_host='master1',      #主ip 地址  
master_user='授权用户',     #主服务上面创建的用户
master_password='授权密码', 
master_auto_position=1
-> ;
mysql> start slave; #启动从机
mysql> show slave status\G  #查看状态,验证sql和I/O是不是yes

cqing@123

持续更新中。。。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CQingzz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值