mysql主从备份自动备份_企业 - MySQL主从备份

本文详细介绍了MySQL主从备份的原理、工作流程及其实现方式,包括双机热备的好处、主从同步机制、复制过程以及GTID的工作原理。通过设置主服务器的binlog和从服务器的I/O线程、SQL线程,实现了数据的自动同步。此外,文中还提供了实验环境配置和权限授权的步骤,帮助理解MySQL主从备份的全过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、mysql主从备份原理

一、双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步。对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库中的数据一致。 这样做有如下几点好处:

1. 可以做灾备,其中一个坏了可以切换到另一个。

2. 可以做负载均衡,可以将请求分摊到其中任何一台上,提高网站吞吐量。  对于异地热备,尤其适合灾备。

二、mysql 主从备份工作原理

简单的说就是把 一个服务器上执行过的sql语句在别的服务器上也重复执行一遍, 这样只要两个数据库的初态是一样的,那么它们就能一直同步。

二、实现方式

MYSQL主从同步是在MySQL主从复制(Master-Slave Replication)基础上实现的,通过设置在Master上的binlog,使其处于打开状态;Slave通过一个I/O线程从Master上读取binlog,然后传输到Slave的中继日志中,然后使用SQL线程读取中继日志,并应用到自身数据库中,从而实现主从数据同步功能。

有两个服务器,演示了从一个主服务器(master)把数据同步到从服务器(slave)的过程。

对于一个mysql服务器,一般有两个线程来负责复制和被复制。当开启复制这个开关之后(start slave)

1. 作为主服务器Master,会把自己的每一次改动都记录到 二进制日志 Binarylog 中。 (从服务器会负责来读取这个log,然后在自己那里再执行一遍。)

2. 作为从服务器Slave,会用master上的账号登陆到master上,去读取master的Binarylog,  然后写入到自己的中继日志Relaylog,然后自己的sql线程会负责读取这个中继日志,并执行一遍。到这里主服务器上的更改就同步到从服务器上了。

在mysql上可以查看当前服务器的主,从状态。 其实就是当前服务器的 Binary(作为主服务器角色)状态和位置。以及其RelayLog(作为从服务器)的复制进度。

三、复制的过程

4bb9f879a92822174da1e63d47c924d7.png

该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的

写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。

下一步就是slave将master的binary

log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog

dump process。Binlog dump

process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中

继日志。        SQL slave

thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数

据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。

此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制

过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。

实验

实验环境

server2   master

server3   slave

master上下载包

mysql-5.7.17-1.el6.x86_64.rpm-bundle.tar

安装数据库

[root@server2~]# yum install -y mysql-community-client-5.7.17-1.el6.x86_64.rpm mysql-community-common-5.7.17-1.el6.x86_64.rpm mysql-community-libs-5.7.17-1.el6.x86_64.rpm mysql-community-libs-compat-5.7.17-1.el6.x86_64.rpm mysql-community-server-5.7.17-1.el6.x86_64.rpm

09e33b4ade11d802c8bf1adfa9b04600.png

[root@server3 ~]# yum install -y *

修改mysql的配置文件

[root@server2 ~]# vim /etc/my.cnfserver-id = n给服务器分配一个唯一的ID编号

log-bin [= filename]把对数据进行修改的所有SQL命令(也就是INSERT、UPDATE和DELETE命令)以二进制格式记入日志(二进制变更日志,binary update log)。这种日志的文件名是filename.n或默认的hostname.n,其中n是一个6位数字的整数(日志文件按顺序编号)。

c84a536b50e3d2afcfb650cafba85bca.png

开启服务

5a9aed8a58a60f63f41a13c386c6b1d4.png

0946bc9c3f905529a0d11512989177f8.png

修改slave配置文件server-id = n给服务器分配一个唯一的ID编号

[root@server3 ~]# vim /etc/my.cnf

d34489b71c2cdeaae8c4d875dd6ab3dc.png

开启服务

432b776f9c63c9e9faeb5f71ab036efb.png

查看密码

699ec5664dfcafc404174900bb17aabe.png

安全配置向导

8f790dd1e07ffae2af935435aa65a22f.png

8e3132859d3310e501db509fc900aa1b.png

6e3c220247649709f89f9dfb1486b6b5.png

如下方法修改slave密码

mysql> alter user root@localhost identified by 'LH=redhat123';

c2b3c56f7d6fa686867c056013be3084.png

master上进行授权

mysql> grant replication slave on *.* to cara@'192.168.122.13' identified by 'LH@redhat123' ;      用户授权

mysql> flush privileges;  刷新

f6946e4e3a0fb70d6376bed5bbbe9b81.png

master授权后,slave可以远程登录

0f678d65e0970c3a843a5dd80e016725.png

master端查看

cde8c7481f4d66b964e7a988e0f6d8b2.png

使 slave 与 master 建立连接,从而同步:mysql> change master to master_host='192.168.122.12',master_user='cara',master_password='LH=redhat123',master_log_file='mysql-bin.000003',master_log_pos=1706;

slave端  mysql -p 登录

022f13d554d22beef2341e5c5f071b5c.png

查看

[root@server3 mysql]# pwd

/var/lib/mysql

[root@server3 mysql]# cat master.info

98c2e1066997aebce8fc87a30a60c050.png

[root@server3 mysql]# cat server3-relay-bin.index

eb482241a0098fd9b2d48074342356ae.png

mysql> show slave status\G;  查看slave状态

fa1f758c305205aa3d443530c4906105.png

mysql> start slave;  开启slave

cbef6ca56e578e2bd335a0cf5bc39201.png

创建库westos,创建表usertb

f8c61f50be2f00b4b5fdcb9665820550.png

在表中插入数据

62310db844241dc9e8f5c4a863a5381b.png

更改密码

d218e674af218cefe077c6d57552755d.png

删除表中数据

f5649e11745c923dc669f9ad8d933367.png

[root@server2 mysql]# mysqlbinlog mysql-bin.000003   可查看master所做的操作

4b3db33d8a31ba057e28794bc7dc5111.png

在slave上也可查看master上数据

97828b801619b9d39dd1421a7490073c.png

5184193d234ec459a3434d232b4dc470.png

深入了解复制-全局事务标识符(GTID)

1)什么是GTID

GTID(Global Transaction

ID)是对于一个已提交事务的编号,并且是一个全局唯一的编号。GTID实际上是由UUID+TID组成的。其中UUID是一个MySQL实例的唯一标

识,保存在mysql数据目录下的auto.cnf文件里。TID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增。下面是一个GTID的具

体形式:3E11FA47-71CA-11E1-9E33-C80AA9429562:23。

2)GTID的作用

根据GTID可以知道事务最初是在哪个实例上提交的

GTID的存在方便了Replication的Failover

3)GTID比传统复制的优势

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

更简单的搭建主从复制。

比传统复制更加安全。

GTID是连续没有空洞的,因此主从库出现数据冲突时,可以用添加空事物的方式进行跳过。

4)GTID的工作原理:

master更新数据时,会在事务前产生GTID,一同记录到binlog日志中。

slave端的i/o线程将变更的binlog,写入到本地的relay log中。

sql线程从relay log中获取GTID,然后对比slave端的binlog是否有记录。

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

如果没有记录,slave就会从relay log中执行该GTID的事务,并记录到binlog。

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

先关掉slave

6a29d760db16725453ed33d206a7b7d3.png

修改配置文件/etc/my.cof

master

ce04fd287dfd82a2f9f790a8f31d8f31.png

slave

1e3e85b028990adebc849e5a8486e849.png

重启服务

90d7b61fcfc2e1ad84582f873345d550.png

caa50ff56fb0e9dcc2073c248212e68b.png

更录数据库,查看

master

320e3acd7ec696a0ed931e989318dcbf.png

449e7624fb7d0c65ed3de20f04c0d029.png

a90519b6efab05090b57e0d0a61fad5e.png

slave

50eba8231ed5414d5abdd2ad6d91583b.png

f3b19d51bae8f0dc058ad6ed695c3a04.png

9d41949e1329025c0b319bc5893cb1b9.png

change master to master_host='192.168.122.12',master_user='cara',master_password='LH=redhat123',master_auto_position=1;

8f602ef5aa9de9c6e466300327ac8ee7.png

c2bc048df9578e50c65a01a2a7f68ce0.png

--------------------------------------------------------------------master端--------------------------------------------------------------------

d51048c5c23a44f09f5613ac758eac98.png

df8c62a5a03d1aa3cb544d4d25b2316a.png

--------------------------------------------------------------------slave端--------------------------------------------------------------------

545a5eec0bef7d26acac683f5832576e.png

e7346e13e6e0b3e2e921a82ab81f1ba2.png

85afa2a156f8027082a7b1ee00cea1cc.png

f735ec0305f9dc2376b115d2799148b3.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值