MySQL通过 XtraBackup 备份恢复单个库

1.概述

本文通过 XtraBackup 备份单个数据库,然后恢复到另一个实例,用于快速迁移大数据量,使用的软件版本为:

软件名

版本

MySQL

mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz

XtraBackup

percona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm

在2台主机分别安装一个MySQL实例:

主机

IP地址

端口号

MySQL-A

192.168.100.10

5508

MySQL-B

192.168.100.11

5508

2.在MySQL-A初始化数据

通过sysbench 初始化数据,10张表,每张表10000条记录

shell> sysbench src/lua/oltp_read_write.lua --mysql-db=sysbench --mysql-host=192.168.100.10 --mysql-port=5508 --mysql-user=greatsql --mysql-password='greatsql' --tables=10 --table_size=10000 --report-interval=2 --threads=50 --time=1000  --mysql_storage_engine=innodb --partitions=3 --skip_trx=0 --mysql-ignore-errors=all prepare

3.通过 xtrabackup 备份 MySQL-A 的 sysbench 库

shell> innobackupex --defaults-file=/mysql/conf/my5508.cnf  --user greatsql --password greatsql -H127.0.0.1 -P5508  --databases sysbench  /mysql/dbbackup
...
...
22122910:11:17 Executing UNLOCK TABLES
22122910:11:17 All tables unlocked
22122910:11:17[00] Copying ib_buffer_pool to /mysql/dbbackup/2022-12-29_10-11-07/ib_buffer_pool
22122910:11:17[00] ...done
22122910:11:17 Backup created in directory '/mysql/dbbackup/2022-12-29_10-11-07/'
MySQL binlog position: filename 'binlog.000005', position '190', GTID of the last change '3e362a47-8683-11ed-92e1-00163ed294ac:1-87'
22122910:11:17[00] Writing /mysql/dbbackup/2022-12-29_10-11-07/backup-my.cnf
22122910:11:17[00] ...done
22122910:11:17[00] Writing /mysql/dbbackup/2022-12-29_10-11-07/xtrabackup_info
22122910:11:17[00] ...done
xtrabackup: Transaction log of lsn (1123405728) to (1123405737) was copied.
22122910:11:17 completed OK!

4.备份 MySQL-A sysbench 库的表结构

shell>/mysql/svr/mysql/bin/mysqldump -ugreatsql -pgreatsql -h127.0.0.1-P5508 --single-transaction --set-gtid-purged=OFF --master-data=2  -d  -B sysbench > sysbench.sql
mysqldump:[Warning] Using a password on the command line interface can be insecure.

5.将备份的 sysbench 库的表结构导入 MySQL-B

shell>/mysql/svr/mysql/bin/mysql -ugreatsql -pgreatsql -h192.168.100.11-P5508 < sysbench.sql
mysql:[Warning] Using a password on the command line interface can be insecure.

6.登录 MySQL-B 生成丢弃/导入表空间的 SQL 语句

# 生成丢弃表空间的SQL
mysql>select concat('alter table ',table_schema,'.',TABLE_NAME ,' discard tablespace',';')from information_schema.tableswhere TABLE_SCHEMA ='sysbench'into outfile '/tmp/discard.sql';
Query OK,10 rows affected (0.00 sec)
# 生成导入表空间的SQL
mysql>select concat('alter table ',table_schema,'.',TABLE_NAME ,' import tablespace',';')from information_schema.tableswhere TABLE_SCHEMA ='sysbench'into outfile '/tmp/import.sql';
Query OK,10 rows affected (0.01 sec)

7.登录 MySQL-B 执行丢弃表空间的 SQL 语句

mysql> source /tmp/discard.sql;

8.查看 MySQL-B 底层数据文件

shell> ll -h /mysql/dbdata/data5508/data/sysbench/
total 124K
-rw-r----- 1 mysql mysql 67 Dec 29 10:25 db.opt
-rw-r----- 1 mysql mysql 8.5K Dec 29 10:25 sbtest10.frm
-rw-r----- 1 mysql mysql 8.5K Dec 29 10:25 sbtest1.frm
-rw-r----- 1 mysql mysql 8.5K Dec 29 10:25 sbtest2.frm
-rw-r----- 1 mysql mysql 8.5K Dec 29 10:26 sbtest3.frm
-rw-r----- 1 mysql mysql 8.5K Dec 29 10:26 sbtest4.frm
-rw-r----- 1 mysql mysql 8.5K Dec 29 10:26 sbtest5.frm
-rw-r----- 1 mysql mysql 8.5K Dec 29 10:26 sbtest6.frm
-rw-r----- 1 mysql mysql 8.5K Dec 29 10:26 sbtest7.frm
-rw-r----- 1 mysql mysql 8.5K Dec 29 10:26 sbtest8.frm
-rw-r----- 1 mysql mysql 8.5K Dec 29 10:26 sbtest9.frm

可以看到ibd文件已被丢弃

9.prepare 备份文件

注意这里需要加 –export 选项,它允许导出单个表以进行导入到另一个服务器

shell> innobackupex --apply-log --export /mysql/dbbackup/2022-12-29_10-11-07
xtrabackup: recognized server arguments:--innodb_checksum_algorithm=crc32 --innodb_log_checksum_algorithm=strict_crc32 --innodb_data_file_path=ibdata1:12M:autoextend --innodb_log_files_in_group=4 --innodb_log_file_size=33554432 --innodb_fast_checksum=0 --innodb_page_size=16384 --innodb_log_block_size=512 --innodb_undo_directory=/mysql/dbdata/data5508/log --innodb_undo_tablespaces=0 --server-id=2 --redo-log-version=1
xtrabackup: recognized client arguments:
22122910:56:58 innobackupex: Starting the apply-log operation

IMPORTANT: Please check that the apply-log run completes successfully.
At the end of a successful apply-log run innobackupex
prints "completed OK!".
...
...
xtrabackup: starting shutdown with innodb_fast_shutdown =0
InnoDB: FTS optimize thread exiting.
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 1123519528
22122910:57:13 completed OK!

10.查看备份文件目录

shell> ll -h /mysql/dbbackup/2022-12-29_10-11-07/sysbench/
total 271M
-rw-r----- 1 root root 67 Dec 29 10:11 db.opt
-rw-r----- 1 root root 8.5K Dec 29 10:11 sbtest10.frm
-rw-r--r-- 1 root root 578 Dec 29 10:57 sbtest10#P#p0.cfg
-rw-r----- 1 root root 16K Dec 29 10:57 sbtest10#P#p0.exp
-rw-r----- 1 root root 9.0M Dec 29 10:11 sbtest10#P#p0.ibd
-rw-r--r-- 1 root root 578 Dec 29 10:57 sbtest10#P#p1.cfg
-rw-r----- 1 root root 16K Dec 29 10:57 sbtest10#P#p1.exp
-rw-r----- 1 root root 9.0M Dec 29 10:11 sbtest10#P#p1.ibd
-rw-r--r-- 1 root root 578 Dec 29 10:57 sbtest10#P#p2.cfg
...

可以看到prepare备份文件后,多了 cfg,exp结尾的文件

11.传输备份文件

将准备好的备份文件中后缀名为cfg,ibd,exp的文件传输到MySQL-B实例的sysbench库下

shell> scp -r /mysql/dbbackup/2022-12-29_10-11-07/sysbench/*.ibd /mysql/dbbackup/2022-12-29_10-11-07/sysbench/*.cfg /mysql/dbbackup/2022-12-29_10-11-07/sysbench/*.exp [email protected]:/mysql/dbdata/data5508/data/sysbench/

12.修改传输过来的文件的属主属组

shell> chown -R mysql.mysql/mysql  

13.登录 MySQL-B 执行导入表空间的 SQL 语句

mysql> source /tmp/import.sql;

14.登录 MySQL-B 检查一张表是否正常

mysql>selectcount(*)from sysbench.sbtest1;
+----------+
|count(*)|
+----------+
|10000|
+----------+
1 row inset(0.01 sec)

15.使用 sysbench 进行压测 MySQL-B

shell> sysbench src/lua/oltp_read_write.lua--mysql-db=sysbench --mysql-host=192.168.100.11 --mysql-port=5508 --mysql-user=greatsql --mysql-password='greatsql' --tables=10 --table_size=10000 --report-interval=2 --threads=50 --time=300  --mysql_storage_engine=innodb --partitions=3 --skip_trx=0 --mysql-ignore-errors=all run
sysbench 1.1.0-df89d34 (using bundled LuaJIT 2.1.0-beta3)
...
...
SQL statistics:
queries performed:
read:1702400
write:486400
other:243200
total:2432000
transactions:121600(405.25 per sec.)
queries:2432000(8105.04 per sec.)
ignored errors:0(0.00 per sec.)
reconnects:0(0.00 per sec.)

Throughput:
events/s (eps):405.2522
time elapsed:300.0601s
total number of events:121600

Latency (ms):
min:9.04
avg:123.36
max:1512.19
95th percentile:590.56
sum:15000942.35

Threads fairness:
events (avg/stddev):2432.0000/58.48
execution time(avg/stddev):300.0188/0.01

压测正常

16.重启MySQL-B并查询一张表

mysql> shutdown;
shell>/mysql/svr/mysql/bin/mysqld_safe --defaults-file=/mysql/conf/my5508.cnf --user=mysql &
mysql>selectcount(*)from sysbench.sbtest2;
+----------+
|count(*)|
+----------+
|10000|
+----------+
1 row inset(0.04 sec)

总结

通过上述方法可以快速备份恢复大数据量的库,也可以同时指定多个库,单张表或多张表进行恢复。可参考官方文档 Partial Backups – Percona XtraBackup。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/304892.html<

(0)
管理的头像管理
上一篇2025-05-25 22:41
下一篇 2025-05-25 22:43

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注