当前位置: 首页 > 科技观察

MySQL通过XtraBackup备份还原单个数据库

时间:2023-03-16 19:07:05 科技观察

1。概述本文使用XtraBackup备份单个数据库,然后将其恢复到另一个实例,以实现大量数据的快速迁移。使用的软件版本为:软件名称版本MySQLmysql-5.7.39-linux-glibc2.12-x86_64.tar.gzXtraBackuppercona-xtrabackup-24-2.4.26-1.el7.x86_64.rpm在两台主机上分别安装一个MySQL实例:主机IP地址端口号MySQL-A192.168.100.105508MySQL-B192.168.100.1155082。在MySQL-A中初始化数据,通过sysbench初始化数据,10张表,每张表10000条记录shell>sysbenchsrc/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=allprepare3。通过xtrabackupshell备份MySQL-A的sysbench库>innobackupex--defaults-file=/mysql/conf/my5508.cnf--usergreatsql--passwordgreatsql-H127.0.0.1-P5508--databasessysbench/mysql/dbbackup。.....22122910:11:17执行解锁表22122910:11:17所有表解锁22122910:11:17[00]复制ib_buffer_pool到/mysql/dbbackup/2022-12-29_10-11-07/ib_buffer_pool22122910:11:17[00]...done22122910:11:17在目录'/mysql/dbbackup/2022-12-29_10中创建的备份-11-07/'MySQLbinlogposition:filename'binlog.000005',position'190',GTIDofthelastchange'3e362a47-8683-11ed-92e1-00163ed294ac:1-87'22122910:11:17[00]写作/mysql/dbbackup/2022-12-29_10-11-07/backup-my.cnf22122910:11:17[00]...done22122910:11:17[00]写作/mysql/dbbackup/2022-12-29_10-11-07/xtrabackup_info22122910:11:17[00]...donextrabackup:lsn(1123405728)到(1123405737)的事务日志已复制。22122910:11:17已完成OK!4.备份MySQL-Asysbench表结构shell>/mysql/svr/mysql/bin/mysqldump-ugreatsql-pgreatsql-h127.0.0.1-P5508--single-transaction--set-gtid-purged=OFF--master-data=2-d-Bsysbench>sysbench.sqlmysqldump:[警告]在命令行界面上使用密码可能不安全。5.将备份的sysbench库的表结构导入MySQL-Bshell>/mysql/svr/mysql/bin/mysql-ugreatsql-pgreatsql-h192.168.100.11-P5508selectconcat('altertable',table_schema,'.',TABLE_NAME,'discardtablespace',';')frominformation_schema.tableswhereTABLE_SCHEMA='sysbench'intooutfile'/tmp/discard.sql';QueryOK,10rowsaffected(0.00sec)#GenerateSQLmysqlforimportingtablespace>selectconcat('altertable',table_schema,'.',TABLE_NAME,'importtablespace',';')frominformation_schema.tableswhereTABLE_SCHEMA='sysbench'intooutfile'/tmp/import.sql';QueryOK,10rowsaffected(0.01sec)7.登录MySQL-B,执行SQL删除表空间Statementmysql>source/tmp/discard.sql;8、查看MySQL-Bshell底层数据文件>ll-h/mysql/dbdata/data5508/data/sysbench/total124K-rw-r-----1mysqlmysql67Dec2910:25db.opt-rw-r-----1mysqlmysql8.5K12月29日10:25sbtest10.frm-rw-r-----1mysqlmysql8.5K12月29日10:25sbtest1.frm-rw-r-----1mysqlmysql8.5K12月29日10:25sbtest2.frm-rw-r-----1mysqlmysql8.5K12月29日10:26sbtest3.frm-rw-r-----1mysqlmysql8.5K12月29日10:26sbtest4.frm-rw-r-----1mysqlmysql8.5K12月29日10:26sbtest5.frm-rw-r-----1mysqlmysql8.5K12月29日10:26sbtest6.frm-rw-r-----1mysqlmysql8.5K12月29日10:26sbtest7.frm-rw-r-----1mysqlmysql8.5KDec2910:26sbtest8.frm-rw-r-----1mysqlmysql8.5KDec2910:26sbtest9.frm可以看到ibd文件已经被丢弃了9.preparebackup注意这里需要加上--export选项,允许导出单个表导入到另一个服务器shell>innobackupex--apply-log--export/mysql/dbbackup/2022-12-29_10-11-07xtrabackup:识别服务器参数:--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=1xtrabackup:识别客户端参数:22122910:56:58innobackupex:启动应用日志操作重要提示:请检查应用日志运行成功完成。在成功的应用日志运行结束时,innobackupex打印“完成OK!”......xtrabackup:开始关闭innodb_fast_shutdown=0InnoDB:FTS优化线程退出。InnoDB:开始关闭...InnoDB:关闭完成;logsequencenumber112351952822122910:57:13completedOK!10.查看备份文件目录shell>ll-h/mysql/dbbackup/2022-12-29_10-11-07/sysbench/total271M-rw-r-----1rootroot67Dec2910:11db.opt-rw-r-----1rootroot8.5KDec2910:11sbtest10.frm-rw-r--r--1rootroot578Dec2910:57sbtest10#P#p0.cfg-rw-r-----1rootroot16KDec2910:57sbtest10#P#p0.exp-rw-r-----1rootroot9.0MDec2910:11sbtest10#P#p0.ibd-rw-r--r--1根根57812月29日10:57sbtest10#P#p1.cfg-rw-r-----1rootroot16KDec2910:57sbtest10#P#p1.exp-rw-r-----1rootroot9.0MDec2910:11sbtest10#P#p1.ibd-rw-r--r--1rootroot578Dec2910:57sbtest10#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/*.exproot@192.168.100.11:/mysql/dbdata/data5508/data/sysbench/12.修改传输文件的属主和所属组shell>chown-Rmysql.mysql/mysql13、登录MySQL-B执行importtablespaceSQL语句mysql>source/tmp/import.sql;14、登录MySQL-B查看某表是否正常mysql>selectcount(*)fromsysbench.sbtest1;+----------+|计数(*)|+----------+|10000|+--------+1rowinset(0.01sec)15.使用sysbench进行压力测试MySQL-Bshell>sysbenchsrc/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=allrunsysbench1.1.0-df89d34(usingbundledLuaJIT2.1.0-beta3)......SQL统计:查询执行:读取:1702400写入:486400其他:243200总计:2432000事务:121600(每秒405.25次)查询:2432000(每秒8105.04次)忽略错误:0(每秒0.00次)重新连接:0(每秒0.00次)吞吐量:事件/秒(eps):405.2522经过的时间:300.0601s总数事件数:121600延迟(毫秒):最小值:9.04avg:123.36max:1512.1995thpercentile:590.56sum:15000942.35Threadsfairness:events(avg/stddev):2432.0000/58.48executiontime(avg/stddev):300.0188/0.01B压力测试-正常查询并重启MySQL表mysql>关闭;shell>/mysql/svr/mysql/bin/mysqld_safe--defaults-file=/mysql/conf/my5508.cnf--user=mysql&mysql>selectcount(*)fromsysbench.sbtest2;+----------+|计数(*)|+----------+|10000|+--------+1rowinset(0.04sec)总结通过以上方法可以快速备份和恢复数据量大的库,也可以指定多个库同时,恢复单个表或多个表。详情请参考官方文档PartialBackups-PerconaXtraBackup。