mysql全量,增量备份与恢复

发布于:2025-05-13 ⋅ 阅读:(5) ⋅ 点赞:(0)

目录

mysql数据库备份

数据备份的重要性

数据库备份类型

从物理与逻辑角度分类

从数据库的备份策略角度分类

常见的备份方法

物理冷备份

专用的备份工具musqldump或mysqlhotcopy

通过启用二进制日志进行增量备份

通过第三方工具备份

数据库完全备份操作

物理冷备份与恢复

备份数据库

恢复数据库

mysqldump备份与恢复

备份数据库

查看备份文件

恢复数据库

mysql增量备份与恢复

增量备份的特点

mysql二进制日志对备份的意义

mysql增量恢复

msyql企业备份案例

一般恢复

基于位置恢复

基于时间点恢复

制定企业备份策略的思路

mysql的GTID

配置GTID并进行恢复全量等操作

xtrabackup应用在恢复操作中的案例


mysql数据库备份

在当今数据驱动的时代,数据库作为企业和个人数据存储与管理的核心,其安全性至关重要。数据一旦丢失,可能会给企业带来巨大的经济损失和声誉损害,因此,数据库备份成为保障数据安全的关键环节。MySQL 作为一款广泛使用的开源关系型数据库管理系统,深入了解其备份相关知识,对数据库管理员和开发者而言都十分必要。

数据备份的重要性

数据是企业的核心资产,它包含了业务运营、客户信息、交易记录等关键内容。数据备份是应对数据丢失风险的重要手段,它能够在数据库遭遇硬件故障、软件错误、人为误操作、恶意攻击(如勒索软件)等情况时,快速恢复数据,确保业务的连续性。例如,一家电商企业如果因为数据库崩溃而丢失了用户订单和支付记录,不仅会导致客户不满,还可能面临法律纠纷和经济赔偿。而定期进行数据备份,就可以在灾难发生后,将数据库恢复到正常状态,减少损失。

数据库备份类型

从物理与逻辑角度分类

物理备份:物理备份是对数据库文件(如数据文件、日志文件等)的直接复制。这种备份方式直接操作数据库的物理文件,备份速度快,恢复时也能快速还原数据,因为它直接将文件复制回原来的位置。但它与特定的数据库管理系统和操作系统相关,移植性较差。​

逻辑备份:逻辑备份是将数据库中的数据以 SQL 语句或特定格式导出,例如使用mysqldump工具生成的 SQL 文件。逻辑备份文件可读性强,可以方便地查看和编辑其中的数据,并且具有较好的移植性,可以在不同的数据库环境中导入。但逻辑备份和恢复的速度相对较慢,因为它需要解析和执行 SQL 语句。

从数据库的备份策略角度分类

完全备份:完全备份是对整个数据库进行完整的备份,包含了数据库中的所有数据和对象。这种备份方式可以独立进行恢复,恢复过程简单直接。但由于每次都要备份全部数据,备份所需时间长,占用存储空间大。​

增量备份:增量备份只备份自上次备份(可以是完全备份或上一次增量备份)以来发生变化的数据。增量备份的优点是备份速度快,占用空间小,因为它只处理变化的数据。但恢复时需要依次应用多个备份文件,恢复过程相对复杂。​

差异备份:差异备份备份自上次完全备份以来发生变化的数据。与增量备份相比,差异备份在恢复时只需要上次完全备份和本次差异备份两个文件,恢复过程相对简单,但备份数据量比增量备份大。

常见的备份方法

物理冷备份

物理冷备份是在数据库处于关闭状态下,直接复制数据库的物理文件。这种方式适用于对数据库可用性要求不高的场景。在进行物理冷备份前,需要确保数据库服务已停止,以保证数据的一致性。备份完成后,可以将文件存储在安全的存储设备中,如磁盘阵列或云存储。

专用的备份工具musqldump或mysqlhotcopy

mysqldump:mysqldump是 MySQL 自带的逻辑备份工具,它通过执行 SQL 语句将数据库中的数据和结构导出为 SQL 文件。mysqldump可以灵活地指定备份的数据库、表,还可以设置各种选项,如添加锁表、忽略错误等。它适用于各种 MySQL 版本,使用广泛。​

mysqlhotcopy:mysqlhotcopy是一个快速的物理备份工具,它只能在数据库运行在 MyISAM 存储引擎时使用。mysqlhotcopy通过复制数据库文件来实现备份,并且可以在数据库运行时进行备份,不会阻塞数据库的读写操作。但由于其对存储引擎的限制,使用场景相对较窄。

通过启用二进制日志进行增量备份

MySQL 的二进制日志记录了数据库的所有更改操作,启用二进制日志后,可以利用它进行增量备份。通过定期备份二进制日志文件,并结合完全备份,可以实现基于时间点的恢复。这种方式能够在数据丢失时,将数据库恢复到指定的时间点,最大程度地减少数据损失。

通过第三方工具备份

除了 MySQL 自带的备份工具,还有许多第三方备份工具可供选择,如 XtraBackup、Backup,Exec 等。这些工具通常提供了更强大的功能,如图形化界面、自动化备份策略、数据压缩等,可以满足不同用户的需求。

数据库完全备份操作

物理冷备份与恢复

备份数据库

备份数据库:首先停止 MySQL 服务,在 Linux 系统下可以使用命令service mysql stop。然后将数据库的数据目录(通常是/var/lib/mysql)复制到备份目录中,例如使用命令cp -r /var/lib/mysql /backup/mysql_backup。

创建一个/backup 目录作为备份数据存储路径,使用tar创建备份文件。

[root@localhost ^]# systemctl stop mysqld
[root@localhost~]# mkdir /backup
[root@localhost~]# tar zcf /backup/mysql_all-$(date +%F).tar.gz /usr/local/mysql/data/
[root@localhost~]# 1s -1 /backup/

恢复数据库

恢复数据库:先停止 MySQL 服务,删除当前的数据目录内容,然后将备份目录中的数据文件复制回原来的数据目录,最后启动 MySQL 服务。

执行下面操作将数据库文件/usr/local/mysql/data/转移至bak 目录下,模拟故障。

[root@localhost `]# mkdir bak
[root@localhost ^]# mv/usr/local/mysql/data//root/bak/
[root@localhost ^]# mkdir restore

[root@localhost ^]# tar zxf /backup/mysql_all-2025-03-22. tar. gz -C restore/
[root@localhost ^]# mv restore/usr/local/mysql/data/ /usr/llocal/mysql/
[root@localhost ^]# systemctl start mysqld

mysqldump备份与恢复

备份数据库

备份数据库:使用命令mysqldump -u [用户名] -p [数据库名] > backup_file.sql,输入密码后即可将指定数据库备份为 SQL 文件。

例如

mysqldump -u root -p mydatabase >  mydatabase_backup.sql。

查看备份文件

查看备份文件:可以使用文本编辑器打开备份的 SQL 文件,查看其中的 SQL 语句和数据。

通过 mysqldump工具导出的SQL脚本是文本文件,其中"/*......./部分或以"一"开头的行表示注释信息。使用 grep、less、cat等文本工具可以查看脚本内容。例如,执行以下操作可以过滤出test.sql脚本中的数据库操作都

[root@localhost ^]# grep -v ^--" test.sql | grep -v "^/" | grep -v
ČREATE DATABASE /*!32312 IF NOT EXISTS*/ 'test` 
/*!40100 DEFAULT
CHARACTER SET utf8mb3 */ /*!80016 DEFAULT ENCRYPTICN='N' */:
USE `test`;
DROP TABLE IF EXISTS
employee";
CREATE TABLE employee
id` int NOT NULL AUTO_INCREMENT,

恢复数据库

恢复数据库:先创建一个空的数据库,然后使用命令mysql -u [用户名] -p [数据库名] < backup_file.sql,输入密码后即可将备份数据导入到新创建的数据库中。

例如,执行以下操作可以从备份文件mysql-user.sql中将表导入test库。其中"-e"选项是用于指定连接 MySQL后执行的命令,命令执行完后自动退出。

[root@localhost ^]# mysql -u root -p test < mysql-user.sq1
Enter password:
[root@localhost ^]# mysql -u root -p -e 'SHOW TABLESFROM test;

Enter password:

Tables_in_test|
user

mysql增量备份与恢复

增量备份的特点

增量备份只备份变化的数据,因此备份速度快,占用空间小,适合对数据变化频繁的数据库进行备份。但增量备份的恢复过程依赖于之前的备份文件,需要按照顺序依次应用多个备份文件,增加了恢复的复杂性和时间成本。

mysql二进制日志对备份的意义

MySQL 的二进制日志记录了数据库的所有更改操作,包括数据的插入、更新、删除等。通过分析二进制日志文件,可以获取到数据库在某个时间段内的所有变化,从而实现基于时间点的恢复。在进行增量备份时,结合二进制日志文件,可以确保备份数据的完整性和一致性。

列:log-bin=/usr/local/mysql/mysql-bin,然后重启MySQL服务就可以在指定路径下查看二进制日志文件了。默认情况下,二进制日志文件的扩展又是一个六位的数字,如mysql-bin.0000001。

[root@localhost ^]# vim /etc/my.cnf
[mysqld]
log-bin=/usr/local/mysql/data/mysql-bin 

binlog_format = MIXED
server-id=1
[root@localhost^]# systemctl restart mysqld

[root@localhost ^]# ls -1 /usr/local/mysql/data/mysql-bin.*

mysql增量恢复

在进行增量恢复时,首先需要恢复上次的完全备份,然后依次应用后续的增量备份文件和二进制日志文件。例如,先恢复完全备份文件,然后按照时间顺序应用增量备份 1、增量备份 2,最后通过二进制日志文件将数据库恢复到指定的时间点。

msyql企业备份案例

一般恢复

假设企业的数据库因为硬件故障导致数据丢失,首先使用上次的完全备份文件进行恢复。如果完全备份之后还有增量备份,再依次应用增量备份文件,使数据库恢复到接近故障发生时的状态。这种恢复方式适用于大多数常规的数据丢失情况,能够快速恢复数据库的基本功能。

格式:mysqlbinlog[--no-defaults]增量备份文件 | mysql-u用户名-p密码

基于位置恢复

在某些情况下,企业可能需要将数据库恢复到特定的操作位置。例如,发现某个错误的 SQL 语句执行后导致数据异常,此时可以通过二进制日志文件定位到该 SQL 语句执行的位置,然后从上次完全备份开始,应用备份文件和二进制日志文件直到该位置,实现基于位置的恢复,避免错误操作带来的影响扩散。

格式(恢复到指定位置)mysqlbinlog --stop-position='操作 id'二进制日志|mysql-u用月户名-p 密码

格式(从指定位置开始恢复) mysqlbinlog--start-position='操作 id'二进制日志|mysql-u用户名-p密码

基于时间点恢复

当企业需要将数据库恢复到某个特定的时间点时,如误删除数据前的时刻,可以利用二进制日志文件和备份文件实现基于时间点的恢复。首先恢复完全备份,然后根据时间戳应用增量备份和二进制日志文件,将数据库恢复到指定的时间点,最大程度地减少数据丢失。

格式(从日志开头截止到某个时间点的恢复)

mysqlbinlog [--no-defaults] --stop-datetime='年-月-日小时:分钟:私进制日志|mysql-u用户名-p密码

 格式(从某个时间点到日志结尾的恢复)

mysqlbinlog [--no-defaults] --start-datetime='年-月-日小时:分钟:秒二进制日志|mysql-u用户名-p密码

格式(从某个时间点到某个时间点的恢复)

mysqlbinlog [--no-defaults] --start-datetime='年-月-日小时:分钟:秒--stop-datetime='年-月-日小时:分钟:秒'二进制日志|mysql-u用户名-p密码

制定企业备份策略的思路

制定企业备份策略需要综合考虑多个因素,包括数据的重要性、业务的连续性要求、备份和恢复的时间成本、存储成本等。对于关键业务数据库,应采用高频次的完全备份和增量备份相结合的方式,以确保数据的安全性和快速恢复能力。同时,要定期测试备份的有效性和恢复过程,避免在实际需要恢复时出现问题。此外,还应考虑将备份数据存储在不同的地理位置,以防止自然灾害等不可抗力因素导致备份数据也丢失。

需要注意的是,不是备份完就万事大吉,最好确认备份是否可用,所以备份之后的恢复测试是非常有必要的。同时备份时间也要灵活调整,如 

数据更新频繁,则应该频繁地备份。
数据的重要性,在有适当更新时进行备份。
在数据库压力小的时间段进行备份,如一周一次完全备份每天进行增量备份。
中小公司,完全备份一般一天一次即可。
大公司可每周进行一次完全备份,每天进行一次增量备份 
尽量为企业实现主从复制架构,以增加数据的可用性。

mysql的GTID

GTID(Global Transaction Identifier)是 MySQL 5.6 版本引入的新特性,它为每个事务分配一个唯一的标识符,用于标识事务在整个复制环境中的唯一性。GTID 使得复制和恢复操作更加简单和可靠,它可以确保在主从复制环境中,事务的执行顺序和一致性。

配置GTID并进行恢复全量等操作

在 MySQL 配置文件中启用 GTID,添加配置项gtid_mode=ON和enforce_gtid_consistency=ON。启用 GTID 后,在进行全量恢复时,可以更方便地确定事务的执行顺序,确保恢复的数据一致性。例如,在从库故障后恢复时,通过 GTID 可以快速定位到主库上的事务位置,从正确的位置开始复制数据,提高恢复效率和准确性。

通过下面的实验,了解基于gtid的增量备份和恢复

配置my.cnf开启gtid

[root@localhost ^]# vim /etc/my.cnf
[mysqld]
gtid_mode = ON
enforce_gtid_consistency=ON 

[root@localhost ^]# systemctl restart mysqld

 [root@localhost ^]# mysql -uroot -p
mysql> SHOW GLOBAL VARIABLES LIKEgtid_mode';

 创建基本测试库、表、数据

mysql>resetmaster;
mysql> show master status;

xtrabackup应用在恢复操作中的案例

XtraBackup 是一款开源的 MySQL 热备份工具,它可以在数据库运行时进行物理备份,支持 InnoDB 和 XtraDB 存储引擎。以下是一个 XtraBackup 应用在恢复操作中的案例:​

TypeScript

取消自动换行复制

innobackupex --apply-log /backup/full_backup​

innobackupex --copy-back /backup/full_backup​

--apply-log选项用于准备备份数据,使其可以用于恢复;--copy-back选项用于将备份数据复制到数据库的数据目录中。最后,启动 MySQL 服务,数据库即可恢复到备份时的状态。​

如果需要基于时间点进行恢复,可以结合二进制日志文件。在进行全量备份后,继续备份二进制日志文件。在恢复时,先进行全量恢复,然后通过二进制日志文件将数据库恢复到指定的时间点,实现更精确的数据恢复。​

总之,MySQL 数据库备份是保障数据安全的重要环节,通过了解不同的备份类型、方法和恢复操作,以及制定合理的备份策略,企业可以有效地保护数据,确保业务的连续性和稳定性。同时,合理运用 GTID 和 XtraBackup 等工具,可以进一步提高备份和恢复的效率与可靠性。

全量备份:执行以下命令进行全量备份

xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --backup --target-dir=/root/backup/full

 模拟数据变更:在数据库中创建一个测试表并插入一些数据

CREATE TABLE test_table (id INT PRIMARY KEY, name VARCHAR(20));

INSERT INTO test_table VALUES (1, 'John'),(2, 'Alice');

增量备份:执行以下命令进行增量备份

xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental --incremental-basedir=/root/backup/full --target-dir=/root/backup/incr1

 再次模拟数据变更:向测试表中插入新的数据。

INSERT INTO test_table VALUES (3, 'Bob');

再次增量备份:执行以下命令进行第二次增量备份

xtrabackup --defaults-file=/etc/my.cnf --user=root --password=123456 --incremental --incremental-basedir=/root/backup/incr1 --target-dir=/root/backup/incr2

模拟数据丢失:误删除测试表

DROP TABLE test_table;

恢复操作

停止数据库服务执行systemctl stop mysqld命令

备份当前数据目录和 binlog 文件将当前的数据目录进行备份,执行mv /var/lib/mysql /var/lib/mysql.bak命令。同时,备份 binlog 文件,使用cp /var/lib/mysql/mysql - bin.* /path/to/binlog_backup/命令,将 binlog 文件复制到指定的备份目录

准备全量备份:执行以下命令准备全量备份

xtrabackup --prepare --apply-log-only --target-dir=/root/backup/full

应用增量备份:按照顺序应用增量备份。先应用第一次增量备份:

xtrabackup --prepare --apply-log-only --target-dir=/root/backup/full --incremental-dir=/root/backup/incr1

再应用第二次增量备份(最后一个增量备份不需要--apply - log - only参数)

xtrabackup --prepare --target-dir=/root/backup/full --incremental-dir=/root/backup/incr2

将数据恢复到 MySQL 数据目录:执行以下命令将恢复后的数据复制回 MySQL 的数据目录

xtrabackup --copy-back --target-dir=/root/backup/full

执行systemctl start mysqld命令启动 MySQL 服务,查询测试表,确认数据是否恢复成功。