麒麟v10 上部署 TiDB v5.1.2 生产环境优化实践
924
2023-04-17
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=*** --mysql-password='***' --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 库
4.备份 MySQL-A sysbench 库的表结构
5.将备份的 sysbench 库的表结构导入 MySQL-B
6.登录 MySQL-B 生成丢弃/导入表空间的 SQL 语句
# 生成丢弃表空间的SQLmysql> select concat('alter table ',table_schema,'.',TABLE_NAME , ' discard tablespace', ';') from information_schema.tables where TABLE_SCHEMA = 'sysbench' into outfile '/tmp/discard.sql';Query OK, 10 rows affected (0.00 sec)# 生成导入表空间的SQLmysql> select concat('alter table ',table_schema,'.',TABLE_NAME , ' import tablespace', ';') from information_schema.tables where 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 选项,它允许导出单个表以进行导入到另一个服务器
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 root@192.168.100.11:/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> select count(*) from sysbench.sbtest1;+----------+| count(*) |+----------+| 10000 |+----------+1 row in set (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=*** --mysql-password='***' --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 runsysbench 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: 121600Latency (ms): min: 9.04 avg: 123.36 max: 1512.19 95th percentile: 590.56 sum: 15000942.35Threads 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> select count(*) from sysbench.sbtest2;+----------+| count(*) |+----------+| 10000 |+----------+1 row in set (0.04 sec)
总结
通过上述方法可以快速备份恢复大数据量的库,也可以同时指定多个库,单张表或多张表进行恢复。可参考官方文档 Partial Backups - Percona XtraBackup。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。