当前位置: 首页 > news >正文

MySQL全量、增量备份与恢复

目录

一:MySQL数据库备份概述

1.数据备份的重要性

2.数据库备份类型

2.1从物理与逻辑的角度分类

物理备份

逻辑备份

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

完全备份

差异备份

增量备份

3.常见的备份方法

3.1物理冷备份

3.2专用备份工具 MySQL dump或MySQL hotcopy

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

3.4通过第三方工具备份

二:数据库完全备份操作

1.物理冷备份与恢复

1.1备份数据库

1.2恢复数据库

2.MySQL dump备份与恢复

2.1备份数据库

格式1:备份指定库中的部份表

格式2:备份一个或多个完整的库

格式3:备份MySQL服务器中所有的库

2.2查看备份文件

2.3恢复数据库

3.MySQL增量备份与恢复

3.1MySQL增量备份概述

(1)增量备份的特点

(2)MySQL二进制日志对备份的意义

3.2MySQL增量恢复

一般恢复

基于位置的恢复

格式1:恢复数据到指定位置

格式2:从指定的位置开始恢复数据

基于时间点的恢复

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

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

格式3:从某个时间点到某个时间点恢复

3.3MySQL启用备份案例

1.一般恢复

(1)添加数据库,表,录入信息

(2)先进行一次完全备份

(3)继续录入新的数据并进行增量备份

(4)模拟误操作删除user_info表

(5)恢复操作

2.基于位置恢复

3.基于时间点恢复

三:制定企业备份策略的思路

四:扩展:MySQL和GTID和XtraBackup

1.MySQL的GTID

(1)配置my.cnf开启gtid

(2)创建基本测试库,表,数据

(3)全量备份

(4)插入新数据

(5)模拟数据误删除

(6)导出增量数据

(7)恢复全量

(8)恢复增量

2.XtraBackup

(1)安装XtraBackup

(2)安装apress

(3)完整备份与恢复

备份

恢复(恢复数据的时候要先关闭MySQL,清理数据存储目录)

(4)增量备份与恢复

备份

增量恢复


一:MySQL数据库备份概述

1.数据备份的重要性

数据备份是防止数据丢失的最后一道防线。在实际应用中,数据丢失的原因多种多样,例如硬件故障(硬盘损坏、服务器崩溃等)、软件错误(数据库崩溃、应用程序漏洞导致数据损坏)、人为误操作(误删除表、误修改数据)、自然灾害(火灾、地震等)以及恶意攻击(黑客入侵、勒索软件加密数据)等。

2.数据库备份类型

2.1从物理与逻辑的角度分类

物理备份

物理备份是对数据库文件(如数据文件、日志文件等)进行直接拷贝。它备份的是数据库的物理存储结构,备份文件可以直接用于恢复数据库。物理备份的优点是恢复速度快,因为它直接拷贝物理文件,不需要重新执行 SQL 语句来重建数据结构和数据。缺点是备份文件与数据库版本紧密相关,不同版本的数据库可能无法使用同一备份文件进行恢复,而且备份文件占用空间较大。

逻辑备份

逻辑备份是通过执行 SQL 语句来生成包含数据库对象(如表、视图、存储过程等)定义和数据的文件。常见的逻辑备份工具如MySQL dump。逻辑备份的优点是备份文件通用性强,不受数据库版本影响,可以在不同版本的 MySQL 数据库上恢复数据,而且备份文件可以方便地进行编辑和查看。缺点是恢复时需要重新执行 SQL 语句,恢复速度相对较慢,尤其是在数据量较大的情况下。

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

完全备份

完全备份是对整个数据库进行完整的备份,包括所有的数据文件、日志文件和数据库对象。它是最基本的备份方式,优点是恢复简单,只需将备份文件恢复到指定位置即可。缺点是备份时间长,占用存储空间大,每次备份都需要拷贝所有数据,即使数据没有发生变化。

差异备份

差异备份是基于上一次完全备份,只备份自上一次完全备份以来发生变化的数据。与完全备份相比,差异备份的备份时间较短,占用空间较小。缺点是随着时间推移,差异备份文件会越来越大,因为它包含了从上次完全备份到当前的所有变化数据。

增量备份

增量备份是基于上一次备份(可以是完全备份或增量备份),只备份自上一次备份以来发生变化的数据。它是最节省空间和时间的备份方式,但恢复过程相对复杂,需要依次恢复上一次完全备份和所有的增量备份。

3.常见的备份方法

3.1物理冷备份

物理冷备份是在数据库关闭状态下进行的物理备份。它的优点是备份速度快,因为数据库处于关闭状态,不会有数据写入和修改操作,避免了数据不一致的问题。

3.2专用备份工具 MySQL dump或MySQL hotcopy

MySQL dump是 MySQL 官方提供的逻辑备份工具,它通过执行 SQL 语句将数据库对象和数据导出到文件中。MySQL hotcopy是一个用于快速备份 MySQL 数据库的脚本,它通过直接拷贝数据库文件来实现备份,但要求数据库必须使用 MyISAM 存储引擎。

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

MySQL 的二进制日志记录了所有对数据库进行修改的 SQL 语句,通过启用二进制日志,可以实现基于时间点或基于位置的增量备份和恢复。这种方式可以在不停止数据库服务的情况下进行备份,并且能够精确恢复到指定的时间点或操作位置。

3.4通过第三方工具备份

除了 MySQL 官方提供的备份工具外,还有许多第三方备份工具可供选择,如 XtraBackup、Percona XtraBackup 等。这些工具通常具有更强大的功能,如热备份(在数据库运行状态下进行备份)、增量备份、并行备份等,可以满足不同用户的需求。

二:数据库完全备份操作

1.物理冷备份与恢复

1.1备份数据库

创建一个/backup目录作为备份数据存储路径,使用 tar创建备份文件。
整个数据库文件夹备份属于完全备份。

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

1.2恢复数据库

执行下面操作将数据库文件/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/local/mysql/
[root@localhost ^]# systemctl start mysqld

2.MySQL dump备份与恢复

2.1备份数据库

格式1:备份指定库中的部份表

假设要备份test数据库中的table1和table2表,可以使用以下命令:

mysqldump -u [username] -p test table1 table2 > /backup/test_table1_table2.sql​

 执行命令后,会提示输入密码,输入正确密码后,备份文件将保存到/backup/test_table1_table2.sql。​

格式2:备份一个或多个完整的库

备份test数据库,可以使用以下命令:​

mysqldump -u [username] -p test > /backup/test_full.sql​
​
备份test和test2两个数据库:​
​
mysqldump -u [username] -p test test2 > /backup/test_test2_full.sql​
格式3:备份MySQL服务器中所有的库
mysqldump -u [username] -p --all-databases > /backup/all_databases.sql​

2.2查看备份文件

备份文件是 SQL 格式的文本文件,可以使用文本编辑器(如vim、nano等)打开查看。例如,使用vim打开备份文件:​

vim /backup/test_full.sql​

在文件中可以看到创建数据库对象和插入数据的 SQL 语句。​
 

2.3恢复数据库

使用mysqldump命令导出的SQL备份脚本,在需要恢复时可以通过mysql命令对其进行导入操作,命令格式如下所示。
mysql[选项][库名][表名]</备份文件名
当备份文件中只包含表的备份,而不包含创建的库的语句时,执行导入操作时必须指定库名,且目标库必须存在。
例如,执行以下操作可以从备份文件mysql-user.sql中将表导入test库。其中"-e"选项是用于指定连接 MySQL后执行的命令,命令执行完后自动退出。

[root@localhost ~]# mysql -u root -p test < mysql-user.s(q)
Enter password:
[root@localhost~]# mysql -u root -p -e 'SHOW TABLES FROM test;'//验证
导入结果
Enter password:
Tables_in_test|
user
若备份文件中已经包括完整的库信息,则执行导入操作时无多顺指定库名

 例如,执行以下操作可以从备份文件test.sgl恢复test库3。

[root@localhost ^]# mysql -u root -p -e 'DROP DATABASE test国
//删除 test数据库,模拟故障
Enter password:
[root@localhost ^]# mysql -u root -p -e 'SHOW DATABASES;
//查看test数据库是否存在
Enter password:
[root@localhost data]# mysql -u root -p <^/test.sql
//执行导入恢复操作
Enter password:
[root@localhost ^]# mysql -u root -p -e 'SHOW DATABASES;'
//确认恢复后结果
Enter password:

除了使用mysql命令结合"<"恢复数据外,还可以使用ssource命令恢复数
据,具体用法如下

[root@localhost `]# mysql -u root -p
Enter password:
mysql> source /root/test.sql
Query OK, O rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)

3.MySQL增量备份与恢复

3.1MySQL增量备份概述

(1)增量备份的特点

增量备份只备份自上一次备份以来发生变化的数据,因此备份时间短、占用空间小。但恢复时需要依次应用上一次完全备份和所有的增量备份,恢复过程相对复杂。​

(2)MySQL二进制日志对备份的意义

MySQL 的二进制日志记录了所有对数据库进行修改的 SQL 语句,通过分析二进制日志,可以确定自上一次备份以来发生的变化,从而实现增量备份和基于时间点或基于位置的恢复。​

3.2MySQL增量恢复

一般恢复

一般恢复是依次应用上一次完全备份和所有的增量备份。​基于位置的恢复​

基于位置的恢复

数据库管理员在操作数据库时可能在同一时间点既有错误的操作也有正确的操作,通过基于位置进行恢复可以更加精准,命令格式如下所示。

格式1:恢复数据到指定位置

假设要恢复到二进制日志mysql-bin.000001的第1000个字节位置,可以使用以下命令:​
 

mysqlbinlog --stop-position=1000 /var/log/mysql/mysql-bin.000001 | mysql -u [username] -p​
​
格式2:从指定的位置开始恢复数据

从指定的位置开始恢复数据:从二进制日志mysql-bin.000001的第1000个字节位置开始恢复数据:​
 

mysqlbinlog --start-position=1000 /var/log/mysql/mysql-bin.000001 | mysql -u [username] -p​
​
基于时间点的恢复

跳过某个发生错误的时间点实现数据恢复,而基于时间点的恢复可以分成三种情况

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

假设要恢复到2025-01-01 12:00:00这个时间点,可以使用以下命令:

mysqlbinlog --stop-datetime="2025-01-01 12:00:00" /var/log/mysql/mysql-bin.* | mysql -u [username] -p​
格式2:从某个时间点到日志结尾的恢复

从2025-01-01 12:00:00这个时间点到日志结尾恢复数据:​

mysqlbinlog --start-datetime="2025-01-01 12:00:00" /var/log/mysql/mysql-bin.* | mysql -u [username] -p​
格式3:从某个时间点到某个时间点恢复

从2024-01-01 12:00:00到2025-01-01 13:00:00恢复数据:​

mysqlbinlog --start-datetime="2025-01-01 12:00:00" --stop-datetime="2025-01-01 13:00:00" /var/log/mysql/mysql-bin.* | mysql -u [username] -p​

3.3MySQL启用备份案例

1.一般恢复
(1)添加数据库,表,录入信息

到 MySQL 命令行,创建数据库和表,并插入数据:

CREATE DATABASE test;​
USE test;​
CREATE TABLE user_info (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), age INT);​
INSERT INTO user_info (name, age) VALUES ('John', 25), ('Alice', 30);​
(2)先进行一次完全备份

为方便验证二进制日志的增量恢复功能,在插入三条用户数据后先对client数据库的user_info表进行一次完全备份。然后在1Linux 系统命令行下执行"mysqladmin-uroot-pflush-logs"命令或在"myssql>"命令提示符下执行"flushlogs;"生成新的二进制日志。

[root@localhost ~]# mkdir /mysql_bak
[root@localhost~]#    mysqldump    -uroot    clientuser_info    >/mysql_bak/client_userinfo-$(date+%F). sql
Enter password:
[root@localhost~]# ls /mysql_bak/
client_userinfo-2025-03-24. sql
[root@localhost ~]# mysqladmin -uroot -p flush-logs
Enter password:
[root@localhost ~]# ls -1 /usr/local/mysql/data/mysql-bin. *
(3)继续录入新的数据并进行增量备份

继续录入两个用户的数据,并执行"mysqladmin-uroot-pflush-logs命令刷新二进制日志,进行增量备份。如此,二进制日志文件mysql-bin. 0000002中仅保留插入两个用户数据的操作。

mysql>USE client;
Database changed
mysql>INSERT INTO user_info VALUES('00009','019', '37')
Query OK, I row affected (0.02 sec)
mysql>INSERT INTO user_info VALUES('000010',,'孙七','男',020',36')
Query OK, I row affected (0.02 sec)
mysql>SELECT * FROM user_info;
[root@localhost ~]# mysqladmin -uroot -p flush-logs
Enter password:
[root@localhost~]# ls -l /usr/local/mysql/data/mysql-bin.*
[root@localhost~]#
/bin/cp /usr/local/mysql/data/mysql-bin.000002
mysql_baky
(4)模拟误操作删除user_info表
[root@localhost~]# mysql -uroot -p -e 'DROP TABLE client.user_info;'
Enter password:
[root@localhost ~]# mysql -uroot -p -e ' SELECT * FROM client.user_info;
Enter password:
ERROR 1146 (42S02) at line 1: Table 'client.user_info'doesn't exist
(5)恢复操作

再执行恢复操作时,需要先恢复完全备份,然后恢复增量备份。

[root@localhost~]#mysql -uroot -p  client  </mysql_bak/client_userinfo-2025-03-24. sql
//恢复完全备份
Enter password:
[root@localhost ~]# mysql -uroot -p -e ' SELECT * FROMclient.user_info;
Enter password:
[root@localhost~]# mysqlbinlog  --no-defaults/mysql_bak/mysql-bin.00000002| mysql -u root -p
//恢复增量备份
Enter password:
[root@localhost `]# mysql -uroot -p -e 'SELECT * FROM client. user_info;
Enter password:
2.基于位置恢复

由于前面已经做过备份操作,接下来直接进行模拟故障与数敢据恢复的操作。

[root@localhost~]# mysql -uroot -p -e 'DROP TABLE client.user_info;
//模拟误操作删除user_info表
Enter password:
[root@localhost ^]# mysql -uroot -p -e 'SELECT * FROM client. user_info;
//查看user_info表是否存在
Enter password:
ERROR 1146 (42S02) at line 1: Table 'client.user info'doesn't exist
[root@localhost~]#mysql  -uroot   -p   client  </mysql_bak/client_userinfo-2025-03-24. sql
//恢复完全备份
Enter password:

想要实现基于位置或时间点恢复数据,必须先通过查看二进制日志文件确定恢复的位置或时间点。使用"mysqlbinlog--no-defaults二进制日志文件"可以查看二进制日志文件的具体内容。

[root@localhost~] # mysqlbinlog --no-defaults /mysql_bak/mysql-bin.0000002
3.基于时间点恢复

基于时间点的数据恢复所使用的选项是"--stop-datetime",指定的时间同样也是查询二进制日志所得。执行以下操作可以实现仅恢复到16:41:24之前的数据,即不恢复"孙七"的信息。

[root@localhost ^]# mysql -uroot -p -e 'DROP TABLE client. user_info;
Enter password:
[root@localhost~]# mysql -uroot -p  client </mysql_bak/client_userinfo-2025-03-24. sql
Enter password:
[root@localhost~]#mysqlbinlog --no-defaults --stop-datetime=' 2025-03-24-19:29:28'/mysql_bak/mysql-bin.0000002
--no-defaults mysql -uroot -p
Enter password:
[root@localhost ^]# mysql -uroot -p -e ' SELECT * FROM cl;ient.user_info;
Enter password:

 执行以下操作可以实现仅恢复孙七的信息,跳过赵六的信息恢复。

[root@localhost ^]# mysql -uroot -p -e ' DROP TABLE client.user info;
Enter password:
[root@localhost~]# mysql -uroot -p client </mysql_bak/client_userinfo-2025-03-24. sql
Enter password:
[root@localhost~]#mysqlbinlog --no-defaults --start-datetime=' 2025-03-24 19:29:28'/mysql_bak/mysql-bin.0000002|mysql -uroot -p
Enter password:
[root@localhost ^]# mysql -uroot -p -e ' SELECT * FROM c]lient.user_info;
Enter password:

三:制定企业备份策略的思路

在企业中备份策略并不是千篇一律的,而是根据每个企业上的实际生产环境与业务需求制定合适的备份策略。无论是选择完全备份,还是选择增量备份,都需考虑它们的优缺点,是否适合当前的生产环境。

在进行热备份时,备份操作和应用服务在同时运行,这样就十分消耗系统资源了,导致数据库服务性能下降,这就需要选择一个合适的时间(如在应用负担很小的时候)再来进行备份操作。

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

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

四:扩展:MySQL和GTID和XtraBackup

1.MySQL的GTID

GTID(Global Transaction Identifier)是 MySQL 5.6 版本引入的一个新特性,它为每个事务分配一个唯一的标识符,用于标识事务的来源和执行顺序。通过 GTID,可以更方便地进行主从复制、数据恢复和故障转移。​

(1)配置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 LIKE
gtid_mode'

(2)创建基本测试库,表,数据

mysql>reset master;#初始化master,会清除所有binlog和gtid信意
mysql>show master status;
创建测试库test,测试表user,并导入3条数据
mysql> create database test;
Query OK, I row affected (0.00 sec)
mysql> use test;
Database changed
mysql> create table user(id int);
Query OK, O rows affected (0.07 sec)
mysql> insert into user values(l);
Query OK, I row affected (0.14 sec)
mysql> insert into user values(2);
Query OK, 1 row affected (0.00 sec)
mysql> insert into user values(3);
Query OK, I row affected (0.00 sec)
mysql> show master status;

(3)全量备份

[root@localhost ^]# mysqldump -u root--databases test >test. sql
关于数据一致性的提醒的警告信息,可忽略
[root@localhost ^]# grep -i gtid test.sql
GTID state at the beginning of the backup
SET
@GLOBAL.GTID_PURGED=/*!80000+' */
d780a5a6-055f-11f0-b6e6-000c29078b04:1-5';

(4)插入新数据

[root@localhost ^]# mysql -uroot -p
mysql> use test;
Database changed
mysql> insert into user values(4);
Query OK, I row affected (0.00 sec)
mysql> insert into user values(5);
Query OK, I row affected (0.00 sec)
mysql> select * from test.user;
mysql> show master status;

(5)模拟数据误删除

mysql> drop database test;
Query OK, I row affected (0.00 sec)
mysql> show master status;

(6)导出增量数据

[root@localhost~]#mysqlbinlog
--include-gtids='d780a5a6-055f-11f0-b6e6-000c29078b04:3-7
/usr/local/mysql/data/mysql-bin.000000001 >/mysqlbak. sql
这里把3-7的事务导出,也就是全量备份后,新插入的两条数据,第8个事务不
能导除,因为它是dropdatabase的误删除语句

(7)恢复全量

[root@localhost ^]#mysql -u root -p -e "RESET MASTER;"
#清空GTID历
史,不然恢复全量备份时会产生冲突,生产环境谨慎操作须提前备份
[root@localhost~]# mysql -uroot -p <test. sql
[root@localhost~]# mysql -uroot -p -e "select * from test.user;
Enter password:

(8)恢复增量

[root@localhost ^]# mysql -uroot -p <mysqlbak.sql
[root@localhost ^]# mysql -uroot -p -e "select * from test. user;"
Enter password:

2.XtraBackup

MySQL冷备、mysqldump、MySQL热拷贝都无法实现对数据库进行增量备份。在实际生产环境中增量备份是非常实用的,如果数据大于50G或100G,存储空间足够的情况下,可以每天进行完整备份,如果每天产生的数据量较大,需要定制数据备份策略。例如每周实用完整备份,周一到周六实用增量备份。而Percona-Xtrabackup就是为了实现增量备份而出现的一款主流备份工具,xtrabakackup有2个工具,分别是xtrabakup、innobakupe。

Percona-xtrabackup是Percona公司开发的一个用于MySQL数据库物理热备的备份工具,支持MySQL、Percona server和MariaDB,开源免费,是目前较为受欢迎的主流备份工具。xtrabackup只能备份innoDB和xtraDB两种数据引擎的表,而不能备份MyISAM数据表。

(1)安装XtraBackup

[root@localhost~]#wgethttps://downloads.percona.com/downToads/Percona
-XtraBackup-8.0/Percona-XtraBackup-8.0.35-30/binary/tarba11/percona-x
trabackup-8.0.35-30-Linux-x86_64.glibc2.17. tar. gz
[root@localhost~]#tar xzf percona-xtrabackup-8.0.35-30-Linux-x86_64.glibc2.177. tar. gz
[root@localhost~]#mv percona-xtrabackup-8. 0.35-30-Linux-x86_64.glibc2.17 /usr/local/xtrabackup
[root@localhost~]#echo 'export PATH=$PATH:/usr/local/xtrabackup/bin' >> /etc/profile source
[root@localhost ^]#/etc/profile

(2)安装apress

qpress是解压缩需要用到的工具
[root@localhost~]#wget -d --user-agent="Mozilla/5.0 (Windows NT x.y
rv:10.0)   Gecko/20100101
Firefox/10.0'
https://docs-tencentdb-1256569818. cos. ap-guangzhou.myqclfoud. com/gpres
s-11-linux-x64.tar
[root@localhost~]#tar -xf_qpress-11-linux-x64. tar -C /usr/local/bin
source /etc/profile

(3)完整备份与恢复

备份
[root@localhost~]#bakdir="/backup/fullbackups/$(date'+%F')"
[root@localhost`]#mkdir -p $bakdir
#--backup备份
#--compress压缩 
[root@localhost`]#xtrabackup --defaults-file=/etc/my.cnf --user=bkpuser --password=s3cret --backup --compress --target-dir=$bakdir
恢复(恢复数据的时候要先关闭MySQL,清理数据存储目录)
解压备份数据
[root@localhost~]#xtrabackup --defaults-file=/etc/my.cnf
-user=bkpuser --password=s3cret --decompress --target-dir=$bakdir
#准备备份文件以供恢复
[root@localhost~]#xtrabackup --prepare --target-dir=$baakdir
#恢复数据
[root@localhost~]#xtrabackup --defaults-file=/etc/my.cnf
--user=bkpuser --password=s3cret --copy-back --target-dir=$bakdir
#修改权限,替换成自己的数据存储目录
[root@localhost~]#chown -R mysql:mysql /var/lib/mysql
#然后启动MySQL即可
[root@localhost`]#systemctl start mysqld

(4)增量备份与恢复

备份
[root@localhost~]#fulldir="/backup/fullbackups/$(date
[root@localhost~]#incdir="/backup/incrementalbackups/$(datee, +%F,)
[root@localhost~]#mkdir -p $fulldir
[root@localhost~]#mkdir -p $incdir
准备基础数据后进行全量备份
[root@localhost~]#xtrabackup --defaults-file=/etc/my.cnf --user=bkpuser             --password=s3cret --backup --compress --target-dir=$fulldir
插入新数据后进行增量备份
[root@localhost~]#xtrabackup --defaults-file=/etc/my.cnf --user=bkpuser             --password=s3cret --backup --compress --target-dir=$incdir --incremental-basedir=$fullddir
在备份的目录里面会有xtrabackup_checkpoints文件
增量恢复
恢复数据的时候要先关闭MySQL,清理数据存储目录
#解压备份数据
[root@localhost~]#xtrabackup --defaults-file=/etc/my.cnf --user=root
--password= --decompress --target-dir=$fulldir
[root@localhost~]#xtrabackup --defaults-file=/etc/mycnf --user=root
--password= --decompress --target-dir=$incdir
#准备数据
[root@localhost~]#xtrabackup --prepare --apply-log-only --target-dir=$fulldir
#把增量备份的数据合并到完整备份里面
[root@localhost~]#xtrabackup --prepare --apply-log-only --target-dir=$fulldir       --incremental-dir=$incdir
#完整重放日志
[root@localhost~]#xtrabackup --prepare --target-dir=$ifulldir
#恢复数据
[root@localhost~]#xtrabackup --defaults-file=/etc/my.cnf --user=root
--password= --copy-back --target-dir=$fulldir
#修改权限,替换成自己的数据存储目录
[root@localhost~]#chown -R_mysql:mysql /usr/local/myse1/data
#然后启动MySQL即可
[root@localhost`]#systemctl start mysqld

相关文章:

MySQL全量、增量备份与恢复

目录 一&#xff1a;MySQL数据库备份概述 1.数据备份的重要性 2.数据库备份类型 2.1从物理与逻辑的角度分类 物理备份 逻辑备份 2.2从数据库的备份策略角度分类 完全备份 差异备份 增量备份 3.常见的备份方法 3.1物理冷备份 3.2专用备份工具 MySQL dump或MySQL hot…...

rust 全栈应用框架dioxus server

接上一篇文章dioxus全栈应用框架的基本使用&#xff0c;支持web、desktop、mobile等平台。 可以先查看上一篇文章rust 全栈应用框架dioxus&#x1f448; 既然是全栈框架&#xff0c;那肯定是得有后端服务的&#xff0c;之前创建的服务没有包含后端服务包&#xff0c;我们修改…...

Clinica集成化的开源平台-神经影像研究

Clinica集成化的开源平台-神经影像研究 &#x1f31f; Clinica集成化的开源平台-神经影像研究引言 &#x1f6e0;️ 一、环境搭建与数据准备1. 安装Clinica&#xff08;附避坑指南&#xff09;2. 数据标准化&#xff08;BIDS格式处理&#xff09; &#x1f9e0; 二、sMRI预处理…...

LabVIEW中算法开发的系统化解决方案与优化

在 LabVIEW 开发环境中&#xff0c;算法实现是连接硬件数据采集与上层应用的核心环节。由于图形化编程范式与传统文本语言存在差异&#xff0c;LabVIEW 中的算法开发需要特别关注执行效率、代码可维护性以及与硬件资源的适配性。本文从算法架构设计、性能优化到工程实现&#x…...

【Pandas】pandas DataFrame cov

Pandas2.2 DataFrame Computations descriptive stats 方法描述DataFrame.abs()用于返回 DataFrame 中每个元素的绝对值DataFrame.all([axis, bool_only, skipna])用于判断 DataFrame 中是否所有元素在指定轴上都为 TrueDataFrame.any(*[, axis, bool_only, skipna])用于判断…...

【递归、搜索与回溯】专题一:递归(一)

&#x1f4dd;前言说明&#xff1a; 本专栏主要记录本人递归&#xff0c;搜索与回溯算法的学习以及LeetCode刷题记录&#xff0c;按专题划分每题主要记录&#xff1a;&#xff08;1&#xff09;本人解法 本人屎山代码&#xff1b;&#xff08;2&#xff09;优质解法 优质代码…...

pythonocc 拉伸特征

micromamba install -c conda-forge pythonocc-core opencascade.js安装不起来&#xff0c;ai用pythonocc练个手 拉伸线框 线成面 from OCC.Core.gp import gp_Pnt, gp_Dir, gp_Vec from OCC.Core.BRepBuilderAPI import BRepBuilderAPI_MakeEdge, BRepBuilderAPI_MakeWire f…...

防爆手机与普通手机有什么区别

在石油化工、矿山能源、危化品运输等特殊行业中&#xff0c;一部手机的选择可能直接关系到生产安全与人员生命。防爆手机作为工业安全通信的核心工具&#xff0c;与日常使用的普通手机存在本质差异。本文将从技术原理、安全标准、功能设计及适用场景等维度&#xff0c;解析二者…...

动手学深度学习12.3.自动并行-笔记练习(PyTorch)

以下内容为结合李沐老师的课程和教材补充的学习笔记&#xff0c;以及对课后练习的一些思考&#xff0c;自留回顾&#xff0c;也供同学之人交流参考。 本节课程地址&#xff1a;无 本节教材地址&#xff1a;12.3. 自动并行 — 动手学深度学习 2.0.0 documentation 本节开源代…...

第二十二天打卡

数据预处理 import pandas as pd from sklearn.model_selection import train_test_splitdef data_preprocessing(file_path):"""泰坦尼克号生存预测数据预处理函数参数:file_path: 原始数据文件路径返回:preprocessed_data: 预处理后的数据集""&quo…...

SET NX互斥功能的实现原理

Redis 的 SET key value NX 命令通过其原子性和底层数据结构的特性实现互斥功能&#xff0c;具体实现如下&#xff1a; 1. 互斥功能的实现原理 SET NX 的核心是 原子性操作&#xff1a;当且仅当键&#xff08;key&#xff09;不存在时&#xff0c;才会设置键的值。Redis 的单线…...

前端 CSS 样式书写与选择器 基础知识

1.CSS介绍 CSS是Cascading Style Sheet的缩写&#xff0c;中文意思为"层叠样式表"&#xff0c;它是网页的装饰者&#xff0c;用来修饰各标签 排版(大小、边距、背景、位置等)、改变字体的样式(字体大小、字体颜色、对齐方式等)。 2.CSS书写位置 2.1 样式表特征 层…...

一小时学会Docker使用!

文章目录 前言一、安装ssh连接工具二、安装docker三、Docker常见命令四、docker-compose使用 前言 Docker&#xff1a; Docker简单来说就是简化环境配置的&#xff0c;我们配置环境只需要简单的docker pull&#xff0c;docker run即可&#xff0c;而删除环境也很容易&#xff…...

android studio开发aar插件,并用uniapp开发APP使用这个aar

android studio开发aar插件&#xff0c;并用uniapp开发APP使用这个aar 使用android studio打包aar和Unity导入aar详解...

操作系统实战——QEMU模拟器搭建【rCore 操作系统】

操作系统大作业——QEMU模拟器搭建rCore操作系统 按照本篇步骤走&#xff0c;帮你少走很多弯路&#xff01;博主在自己做的过程中踩了很多坑&#xff0c;过程还是很痛苦的&#xff0c;走了很多弯路&#xff0c;现在都已经在文章中把坑填平了&#xff0c;把弯路修直了。 创作不易…...

web:InfiniteScroll 无限滚动

InfiniteScroll 无限滚动 分页加载 <div class"data-box" v-infinite-scroll"loadMore"> <li v-fori in dataList></li> </div>form: {current: 1,size: 10,}loadMore(){console.log(this.dataList.length, this.total ,8888)if…...

【Redis 进阶】哨兵模式

思维导图&#xff1a; 一、哨兵模式概述 &#xff08;一&#xff09;传统主从复制模式的局限性 在传统的Redis主从复制架构中&#xff0c;若主节点发生故障&#xff0c;运维人员需手动执行故障转移操作&#xff0c;将一个从节点提升为新主节点&#xff0c;并逐一通知所有客户…...

告别卡顿,图片查看界的“速度与激情”

嘿&#xff0c;小伙伴们&#xff01;今天电脑天空给大家介绍一款超好用的图片查看神器——ImageGlass&#xff01;这可不是普通的图片查看软件哦&#xff0c;它简直就是图片界的“全能王”。首先&#xff0c;它能打开的图片格式多到让你眼花缭乱&#xff0c;什么PNG、JPEG、GIF…...

02_线性模型(回归分类模型)

用于分类的线性模型 线性模型也广泛应用于分类问题&#xff0c;可以利用下面的公式进行预测&#xff1a; $ \widehat y w[0]*x[0]w[1]*x[1]…w[p]*x[p]b > 0$ 公式看起来与线性回归的公式非常相似&#xff0c;但没有返回特征的加权求和&#xff0c;而是为预测设置了阈值…...

力扣2094题解

记录&#xff1a; 2025.5.12 题目&#xff1a; 思路&#xff1a; 暴力遍历。 解题步骤&#xff1a; 1.统计数字出现次数&#xff1a;使用数组cnt来记录输入数组中每个数字的出现次数。 2.生成三位偶数&#xff1a;通过循环从100开始&#xff0c;每次递增2&#xff0c;生成…...

人物角色设定机制

模块一&#xff1a;角色塑造进阶技巧 将角色设定(Character Headcanon)提升至更高层次 当您通过Character Headcanon Generator生成基础设定后&#xff0c;可运用以下专业技巧深化角色塑造&#xff1a; 情感核心图谱分析法 解构角色情感驱动机制及其情境表现&#xff1a; 主…...

Python动态渲染页面抓取之Selenium使用指南

目录 一、Selenium技术架构解析 二、环境搭建与基础配置 1. 组件安装 2. 驱动配置 3. 基础操作模板 三、动态内容抓取核心策略 1. 智能等待机制 2. 交互行为模拟 3. 反爬应对方案 四、实战案例&#xff1a;电商评论抓取 五、性能优化与异常处理 2. 异常捕获 六、进…...

智能手表 MCU 任务调度图

智能手表 MCU 任务调度图 处理器平台&#xff1a;ARM Cortex-M33 系统架构&#xff1a;事件驱动 多任务 RTOS RTOS&#xff1a;FreeRTOS&#xff08;或同类实时内核&#xff09; 一、任务调度概览 任务名称优先级周期性功能描述App_MainTask中否主循环调度器&#xff0c;系统…...

【C++】cout的格式输出

目录 一、cout的格式输出1、控制宽度和填充2、控制数值格式3、控制整数格式4、控制对齐方式 个人主页<—请点击 C专栏<—请点击 一、cout的格式输出 printf函数在输出数据的时候&#xff0c;可以指定格式来输出&#xff0c;比如&#xff1a;指定宽度、指定小数点后的位…...

私域流量新阵地:掌握Telegram私域运营全方法

在流量获取成本不断上升的今天&#xff0c;越来越多企业和品牌开始将目光转向“私域流量”——一条可以长期沉淀用户、反复转化的可持续增长之路。而在全球化趋势下&#xff0c;Telegram作为一款以高自由度、强隐私性著称的即时通讯平台&#xff0c;正在成为私域运营的新阵地。…...

Python Day23 学习

继续SHAP图绘制的学习 1. SHAP特征重要性条形图 特征重要性条形图&#xff08;Feature Importance Bar Plot&#xff09;是 SHAP 提供的一种全局解释工具&#xff0c;用于展示模型中各个特征对预测结果的重要性。以下是详细解释&#xff1a; 图的含义 - 横轴&#xff1a;表示…...

《ATPL地面培训教材13:飞行原理》——第12章:飞行力学基础

翻译&#xff1a;Leweslyh&#xff1b;工具&#xff1a;Cursor & Cluade 3.7&#xff1b;过程稿 第12章&#xff1a;飞行力学基础 目录 引言直线水平稳定飞行尾翼和升降舵直线稳定爬升爬升角重量、高度和温度的影响带动力下降紧急下降滑翔滑翔下降率转弯非对称推力飞行最…...

数据中台整体建设方案规划设计方案,数据中台建设汇报方案(PPT)

中台建设背景 在数字化转型浪潮下&#xff0c;企业需通过客户需求精准化、营销策略智能化、管理体系数字化三大核心方向构建竞争优势。本项目以渠道数据整合为基础&#xff0c;围绕客户精准化运营、营销智能化决策、管理数字化赋能三大目标&#xff0c;打造支撑一线业务场景的数…...

嵌入式软件--stm32 DAY 6 USART串口通讯(下)

1.寄存器轮询_收发字符串 通过寄存器轮询方式实现了收发单个字节之后&#xff0c;我们趁热打铁&#xff0c;争上游&#xff0c;进阶到字符串。字符串就是多个字符。很明显可以循环收发单个字节实现。 然后就是接收字符串。如果接受单个字符的函数放在while里&#xff0c;它也可…...

Flask如何读取配置信息

目录 一、使用 app.config 读取配置 二、设置配置的几种方式 1. 直接设置 2. 从 Python 文件加载 3. 从环境变量加载 4. 从字典加载 5. 从 .env 文件加载&#xff08;推荐开发环境用&#xff09; 三、读取配置值 四、最佳实践建议 在 Flask 中读取配置信息有几种常见方…...

AWS EC2源代码安装valkey命令行客户端

sudo yum -y install openssl-devel gcc wget https://github.com/valkey-io/valkey/archive/refs/tags/8.1.1.tar.gz tar xvzf 8.1.1.tar.gz cd valkey-8.1.1/ make distclean make valkey-cli BUILD_TLSyes参考 Connecting to nodes...

项目全栈实战-基于智能体、工作流、API模块化Docker集成的创业分析平台

目录 思维导图 前置知识 Docker是什么&#xff1f; Docker的核心概念&#xff1a; Docker在本项目中的作用 1. 环境隔离与一致性 2. 简化部署流程 3. 资源管理与扩展性 4. 服务整合与通信 5. 版本控制和回滚 6. 开发与生产环境一致性 总结 前端 1.小程序 2.web …...

如何快速入门大模型?

学习大模型的流程是什么 &#xff1f; 提示词工程&#xff1a;只需掌握提问技巧即可使用大模型&#xff0c;通过优化提问方式获得更精准的模型输出套壳应用开发&#xff1a;在大模型生态上开发业务层产品&#xff08;如AI主播、AI小助手等&#xff09;&#xff0c;只需调用API…...

《Flutter社交应用暗黑奥秘:模式适配与色彩的艺术》

暗黑模式已从一种新奇的功能演变为用户体验中不可或缺的一环。对于Flutter开发者而言&#xff0c;如何在社交应用中完美实现暗黑模式适配与色彩对比度优化&#xff0c;是一场充满挑战与惊喜的技术探索之旅。 暗黑模式&#xff0c;绝非仅仅是将界面颜色反转这么简单。从用户体验…...

【秣厉科技】LabVIEW工具包——OpenCV 教程(21):CUDA 加速方案

文章目录 前言一、方案总述二、改造步骤三、编程范例四、应用移植总结 前言 需要下载安装OpenCV工具包的朋友&#xff0c;请前往 此处 &#xff1b;系统要求&#xff1a;Windows系统&#xff0c;LabVIEW>2018&#xff0c;兼容32位和64位。 一、方案总述 为了保持轻量化与普…...

flutter使用命令生成BinarySize分析图

flutter build ios --analyze-size 生成的文件&#xff0c;使用dev tools 可以分析具体的包大小...

高并发场景下的BI架构设计:衡石分布式查询引擎与缓存分级策略

在电商大促、金融交易时段或IoT实时监控场景中&#xff0c;企业BI系统常面临瞬时万级并发查询的冲击——运营团队需要实时追踪GMV波动&#xff0c;风控部门需秒级响应欺诈检测&#xff0c;产线监控需毫秒级反馈设备状态。传统单体架构的BI系统在此类场景下极易崩溃&#xff0c;…...

web 自动化之 selenium 下拉鼠标键盘文件上传

文章目录 一、下拉框操作二、键盘操作三、鼠标操作四、日期控件五、滚动条操作六、文件上传七、定位windows窗口及窗口的元素总结&#xff1a;页面及元素常用操作 一、下拉框操作 from selenium.webdriver.support.select import Select import time from selenium.webdriver.…...

Qt Creator 配置 Android 编译环境

Qt Creator 配置 Android 编译环境 环境配置流程下载JDK修改Qt Creator默认android配置文件修改sdk_definitions.json配置修改的内容 Qt Creator配置异常处理删除提示占用编译报错 环境 Qt Creator 版本 qtcreator-16.0.1Win10 嗯, Qt这个开发环境有点难折腾,搞了我三天… 配…...

主流编程语言中ORM工具全解析

在不同编程语言中&#xff0c;ORM&#xff08;Object-Relational Mapping&#xff0c;对象关系映射&#xff09;工具的设计目标都是简化数据库操作。 以下是主流语言中最常用的 ORM 工具&#xff0c;按语言分类介绍其特点、适用场景和典型案例。 一、Python 生态 Python 社区…...

详解RabbitMQ工作模式之发布确认模式

​​​​​​​ 目录 发布确认模式 概述 消息丢失问题 发布确认的三种模式 实现步骤 应用场景 代码案例 引入依赖 常量类 单条确认 运行代码 批量确认 运行代码 异步确认 运行代码 对比批量确认和异步确认模式 发布确认模式 概述 发布确认模式用于确保消息已…...

Power BI 实操案例,将度量值转化为切片器(动态切换分析指标)

Power BI 实操案例&#xff0c;将度量值转化为切片器&#xff08;动态切换分析指标&#xff09; 想要在Power BI中让度量值也能像维度一样灵活筛选&#xff1f;没问题&#xff0c;这里就为你揭秘如何将度量值转化为切片器&#xff08;动态切换分析指标&#xff09;的实用方法&…...

利用散点图探索宇航员特征与太空任务之间的关系

利用散点图探索宇航员特征与太空任务之间的关系 import matplotlib.pyplot as plt import numpy as np import pandas as pdfrom flexitext import flexitext from matplotlib.patches import FancyArrowPatchplt.rcParams.update({"font.family": "Corbel&quo…...

人工智能的哲学与社会影响

人工智能&#xff08;AI&#xff09;的快速发展对人类社会的方方面面产生了深远的影响。在这部分中&#xff0c;我们将探讨AI对人与机器关系的影响、AI对就业和经济的潜在影响&#xff0c;以及人类与AI共存的可能性和道德议题。同时&#xff0c;我们还将针对大众对AI的一些常见…...

MySQL 中 UPDATE 结合 SELECT 和 UPDATE CASE WHEN 的示例

概述 以下是 MySQL 中 UPDATE 结合 SELECT 和 UPDATE CASE WHEN 的示例&#xff1a; 一、UPDATE 结合 SELECT&#xff08;跨表更新&#xff09; 场景&#xff1a;根据 orders 表中的订单总金额&#xff0c;更新 users 表中用户的 total_spent 字段。 -- 创建测试表 CREATE T…...

FPGA前瞻篇-计数器设计与实现实例

这是本篇文章的设计目标如下所示&#xff1a; 这个 Counter 模块是一个LED 闪烁计数器&#xff0c;设计目标是&#xff1a; 当输入时钟 clk 为 50 MHz 时&#xff0c;每 0.5 秒翻转一次 LED 灯状态。 随后我们开始补充理论知识。 计数是一种最简单基本的运算&#xff0c;计数器…...

运行Spark程序-在Idea中(二)

&#xff08;四&#xff09;使用Maven创建新项目 核心的操作步骤如下&#xff1a; 1.启动idea,选择新建项目。 2.将Scala添加到全局库中。 3.设置maven依赖项。修改pom.xml文件&#xff0c;添加如下&#xff1a; 4.下载依赖。添加完成之后&#xff0c;刷新Maven&#xff0c;它…...

Mosaic数据增强技术

Mosaic 数据增强技术是一种在计算机视觉领域广泛应用的数据增强方法。下面是Mosaic 数据增强技术原理的详细介绍 一、原理 Mosaic 数据增强是将多张图像&#xff08;通常是 4 张&#xff09;按照一定的规则拼接在一起&#xff0c;形成一张新的图像。在拼接过程中&#xff0c;会…...

Kafka、RabbitMQ 和 RocketMQ区别及上手难度

Kafka、RabbitMQ 和 RocketMQ 是三种流行的消息中间件&#xff0c;它们在设计理念、使用场景和上手难度上有显著差异。以下是它们的核心区别和上手难度分析&#xff1a; 1. 核心区别 特性KafkaRabbitMQRocketMQ设计目标高吞吐、分布式日志流处理通用的消息队列&#xff0c;强调…...

.NET 8 + Angular WebSocket 高并发性能优化

.NET 8 Angular WebSocket 高并发性能优化。 .NET 8 WebSocket 高并发性能优化 WebSocket 是一种全双工通信协议&#xff0c;允许客户端和服务端之间保持持久连接。在高并发场景下&#xff0c;优化 WebSocket 的性能至关重要。以下是针对 .NET 8 中 WebSocket 高并发性能优化…...