innobackupex是一款MySQL备份工具,备份速度快(通过直接copy文件),而且支持压缩、流式传输、加密等功能。

其主要原理如下图(图片源于网络

 

备份开始便会有一个独立的线程追踪 redo log 。同时开始复制ibd文件,复制完成后会发出 FLUSH TABLES WITH READ LOCK 命令,之后再复制 frm,MYD 等文件,完成后会停止追踪 redo log 并 UNLOCK TABLES 。

innobackupex 备份恢复主要分3步,第1步备份文件,第2步是apply-log,第3步恢复,恢复的时候可以指定--copy-back或者--move-back。

可以使用 innobackupex --help 查看详细的说明。

1. 备份

命令如下:

innobackupex --defaults-file=/mysqldatadir/etc/my.cnf --ibbackup=./xtrabackup --user=root --password=xxxxxx --slave-info  /mysqlBackupDir/mysqldb/

其中 --defaults-file 指定MySQL的配置文件, 最后的/mysqlBackupDir/mysqldb/是备份目标位置,默认情况下会在该位置生成一个带时间戳的目录,将备份文件放至该目录下,输出:

211004 23:21:52 innobackupex: Starting the backup operation

IMPORTANT: Please check that the backup run completes successfully.
           At the end of a successful backup run innobackupex
           prints "completed OK!".

211004 23:21:53  version_check Connecting to MySQL server with DSN 'dbi:mysql:;mysql_read_default_group=xtrabackup;port=3306;mysql_socket=/mysqldatadir/tmp/mysql.sock' as 'root'  (using password: YES).
211004 23:21:53  version_check Connected to MySQL server
211004 23:21:53  version_check Executing a version check against the server...
211004 23:21:53  version_check Done.
211004 23:21:53 Connecting to MySQL server host: localhost, user: root, password: set, port: 3306, socket: /mysqldatadir/tmp/mysql.sock
Using server version 5.7.18-log
/xtrabackup/bin/innobackupex version 2.4.5 based on MySQL server 5.7.13 Linux (x86_64) (revision id: e41c0be)
xtrabackup: uses posix_fadvise().
xtrabackup: cd to /mysqldatadir/data
xtrabackup: open files limit requested 65535, set to 65535
xtrabackup: using the following InnoDB configuration:
xtrabackup:   innodb_data_home_dir = /mysqldatadir/data
xtrabackup:   innodb_data_file_path = ibdata1:1G:autoextend
xtrabackup:   innodb_log_group_home_dir = /mysqldatadir/redolog
xtrabackup:   innodb_log_files_in_group = 2
xtrabackup:   innodb_log_file_size = 536870912
xtrabackup: using O_DIRECT
InnoDB: Number of pools: 1
211004 23:21:53 >> log scanned up to (2589848)
InnoDB: Opened 6 undo tablespaces
InnoDB: 0 undo tablespaces made active
xtrabackup: Generating a list of tablespaces
InnoDB: Allocated tablespace ID 27 for sys/sys_config, old maximum was 6
211004 23:21:53 [01] Copying /mysqldatadir/data/ibdata1 to /mysqlBackupDir/mysqldb//2021-10-04_23-21-52/ibdata1
211004 23:21:54 >> log scanned up to (2589848)
211004 23:21:55 >> log scanned up to (2589848)
211004 23:21:56 >> log scanned up to (2589848)
211004 23:21:57 >> log scanned up to (2589848)
211004 23:21:58 >> log scanned up to (2589848)
211004 23:21:59 >> log scanned up to (2589848)
211004 23:21:59 [01]        ...done
211004 23:21:59 [01] Copying /mysqldatadir/undo/undo001 to /mysqlBackupDir/mysqldb//2021-10-04_23-21-52/undo001
211004 23:21:59 [01]        ...done
211004 23:21:59 [01] Copying /mysqldatadir/undo/undo002 to /mysqlBackupDir/mysqldb//2021-10-04_23-21-52/undo002
<..skip..>
211004 23:21:59 [01] Copying ./mysql/help_topic.ibd to /mysqlBackupDir/mysqldb//2021-10-04_23-21-52/mysql/help_topic.ibd
211004 23:22:00 [01]        ...done
211004 23:22:00 >> log scanned up to (2589848)
211004 23:22:00 [01] Copying ./mysql/time_zone_name.ibd to /mysqlBackupDir/mysqldb//2021-10-04_23-21-52/mysql/time_zone_name.ibd
211004 23:22:00 [01]        ...done
211004 23:22:00 [01] Copying ./mysql/innodb_table_stats.ibd to /mysqlBackupDir/mysqldb//2021-10-04_23-21-52/mysql/innodb_table_stats.ibd
211004 23:22:00 [01]        ...done
211004 23:22:00 [01] Copying ./mysql/slave_master_info.ibd to /mysqlBackupDir/mysqldb//2021-10-04_23-21-52/mysql/slave_master_info.ibd
211004 23:22:00 [01]        ...done
211004 23:22:00 [01] Copying ./xiaoyan/mqst2.ibd to /mysqlBackupDir/mysqldb//2021-10-04_23-21-52/xiaoyan/mqst2.ibd
211004 23:22:00 [01]        ...done
211004 23:22:00 [01] Copying ./xiaoyan/mqst1.ibd to /mysqlBackupDir/mysqldb//2021-10-04_23-21-52/xiaoyan/mqst1.ibd
211004 23:22:00 [01]        ...done
211004 23:22:00 [01] Copying ./xiaoyan/t1.ibd to /mysqlBackupDir/mysqldb//2021-10-04_23-21-52/xiaoyan/t1.ibd
211004 23:22:00 [01]        ...done
211004 23:22:00 Executing FLUSH NO_WRITE_TO_BINLOG TABLES...
211004 23:22:00 Executing FLUSH TABLES WITH READ LOCK...
211004 23:22:00 Starting to backup non-InnoDB tables and files
211004 23:22:00 [01] Copying ./sys/x@0024memory_global_total.frm to /mysqlBackupDir/mysqldb//2021-10-04_23-21-52/sys/x@0024memory_global_total.frm
211004 23:22:00 [01]        ...done
211004 23:22:00 [01] Copying ./sys/statements_with_runtimes_in_95th_percentile.frm to /mysqlBackupDir/mysqldb//2021-10-04_23-21-52/sys/statements_with_runtimes_in_95th_percentile.frm
<..skip..>
211004 23:22:02 [01] Copying ./mysql/proxies_priv.frm to /mysqlBackupDir/mysqldb//2021-10-04_23-21-52/mysql/proxies_priv.frm
211004 23:22:02 [01]        ...done
211004 23:22:02 [01] Copying ./xiaoyan/t1.frm to /mysqlBackupDir/mysqldb//2021-10-04_23-21-52/xiaoyan/t1.frm
211004 23:22:02 [01]        ...done
211004 23:22:02 [01] Copying ./xiaoyan/db.opt to /mysqlBackupDir/mysqldb//2021-10-04_23-21-52/xiaoyan/db.opt
211004 23:22:02 [01]        ...done
211004 23:22:02 [01] Copying ./xiaoyan/mqst2.frm to /mysqlBackupDir/mysqldb//2021-10-04_23-21-52/xiaoyan/mqst2.frm
211004 23:22:02 [01]        ...done
211004 23:22:03 [01] Copying ./xiaoyan/mqst1.frm to /mysqlBackupDir/mysqldb//2021-10-04_23-21-52/xiaoyan/mqst1.frm
211004 23:22:03 [01]        ...done
211004 23:22:03 Finished backing up non-InnoDB tables and files
Failed to get master binlog coordinates from SHOW SLAVE STATUS
This means that the server is not a replication slave. Ignoring the --slave-info option
211004 23:22:03 [00] Writing xtrabackup_binlog_info
211004 23:22:03 [00]        ...done
211004 23:22:03 Executing FLUSH NO_WRITE_TO_BINLOG ENGINE LOGS...
xtrabackup: The latest check point (for incremental): '2589839'
xtrabackup: Stopping log copying thread.
.211004 23:22:03 >> log scanned up to (2589848)

211004 23:22:03 Executing UNLOCK TABLES
211004 23:22:03 All tables unlocked
211004 23:22:03 [00] Copying ib_buffer_pool to /mysqlBackupDir/mysqldb//2021-10-04_23-21-52/ib_buffer_pool
211004 23:22:03 [00]        ...done
211004 23:22:03 Backup created in directory '/mysqlBackupDir/mysqldb//2021-10-04_23-21-52'
MySQL binlog position: filename 'mysql-bin.000026', position '2906', GTID of the last change 'b0dd0ee8-ffd9-11e9-8d1c-005056aa8c82:1-164,
fa36ec12-ffd9-11e9-94c6-005056aabf2e:1-3'
211004 23:22:03 [00] Writing backup-my.cnf
211004 23:22:03 [00]        ...done
211004 23:22:03 [00] Writing xtrabackup_info
211004 23:22:03 [00]        ...done
xtrabackup: Transaction log of lsn (2589839) to (2589848) was copied.
211004 23:22:03 completed OK!

 

 2. --apply-log

这一步中,需要apply的日志已经在备份目录中了,因此不一定需要在备份的主机上发该命令,而是任一台机器上都可以。命令如下
innobackupex --apply-log --ibbackup=./xtrabackup --user=root --password=xxxxxx /mysqlBackupDir/mysqldb//2021-10-04_23-21-52/

输出:

211004 23:23:34 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/bin/innobackupex version 2.4.5 based on MySQL server 5.7.13 Linux (x86_64) (revision id: e41c0be)
xtrabackup: cd to /mysqlBackupDir/mysqldb//2021-10-04_23-21-52/
xtrabackup: This target seems to be not prepared yet.
InnoDB: Number of pools: 1
xtrabackup: xtrabackup_logfile detected: size=8388608, start_lsn=(2589839)
xtrabackup: using the following InnoDB configuration for recovery:
...
xtrabackup: starting shutdown with innodb_fast_shutdown = 1
InnoDB: FTS optimize thread exiting.
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 2590248
211004 23:23:40 completed OK!

注意,该步骤可以重复执行,第2次执行的时候会在输出中看到 "This target seems to be already prepared." 字样

3. 恢复

恢复的时候需要指定--copy-back 或者--move-back,前者是copy,后者是mv。(注:如果目标文件已经存在,那不会覆盖)
/xtrabackup/bin/innobackupex --defaults-file=/mysqldatadir/etc/my.cnf  --user=root --password=xxxxxx --copy-back  /mysqlBackupDir/mysqldb//2021-10-04_23-21-52/

参考:

https://www.it610.com/article/1223290569036500992.htm

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐