前言
在xtrabackup使用的过程中,主要会有以下几个文件生成,本文就这几个文件的内容以及作用进行记录和说明。
xtrabackup_binlog_info
xtrabackup_binlog_pos_innodb
xtrabackup_checkpoints
xtrabackup_info
xtrabackup_logfile
xtrabackup_slave_info
backup-my.cnf
实验过程
· 在备份前,确认binlog的位点。
master [localhost] {msandbox} ((none)) > show master status\G
*************************** 1. row ***************************
File: mysql-bin.000011
Position: 1549
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
· 备份的时候,插入两条数据,模拟备份的时候有新的数据产生,备份在插入之前开始,插入完后备份结束。
master [localhost] {msandbox} (test) > insert into test values(1,'zhangsan');
Query OK, 1 row affected (0.04 sec)
master [localhost] {msandbox} (test) > insert into test values(2,'lisi');
Query OK, 1 row affected (0.04 sec)
· 插入完成后查看binlog位点。
master [localhost] {msandbox} ((none)) > show master status\G
*************************** 1. row ***************************
File: mysql-bin.000011
Position: 2140
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
· 备份命令如下:
innobackupex --socket=/tmp/mysql_sandbox21489.sock \
--user=msandbox \
--password=msandbox \
--no-timestamp \
--slave-info \
/data/full
· 以下为xtrabackup的输出日志
170305 21:24:27 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!".
....
xtrabackup: using the following InnoDB configuration:
xtrabackup: innodb_data_home_dir = ./
xtrabackup: innodb_data_file_path = ibdata1:12M:autoextend
xtrabackup: innodb_log_group_home_dir = ./
xtrabackup: innodb_log_files_in_group = 2
xtrabackup: innodb_log_file_size = 50331648
# 这里的信息会被记录到backup-my.cnf 文件中,backup-my.cnf 是启动备份集所需要的最小参数。
....
xtrabackup: Transaction log of lsn (2142985143) to (2142987473) was copied.
# 我们可以看到我们当时插入的数据的redo log已经被拷贝
170305 21:24:33 completed OK!
· 同样的,我们可以看到备份完的时候的LSN 为2142987473,符合预期
master [localhost] {msandbox} (test) > show engine innodb status\G
....
---
LOG
---
Log sequence number 2142987473
Log flushed up to 2142987473
Pages flushed up to 2142987473
Last checkpoint at 2142987473
Max checkpoint age 80826164
Checkpoint age target 78300347
...
· xtrabackup_binlog_info 文件记录的是备份完成的那个时间点的binlog位点。
[root@COS-DEV-MySQL full]# cat xtrabackup_binlog_info
mysql-bin.000011 2140
· xtrabackup_checkpoints 文件记录的是备份类型,如是全量备份还是增量,当前备份集的状态,是否已经prepare过。如果是全量备份,backup_type = full-backuped,如果是增量是backup_type = incremental。备份集的状态在apply log后会改变,后面会说明
[root@COS-DEV-MySQL full]# cat xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0 # 由于是全量备份,所以数据是从LSN=0开始的
to_lsn = 2142987473
last_lsn = 2142987473
compact = 0
recover_binlog_info = 0
· xtrabackup_info 文件记录的是你备份的时候的一些参数,脚本版本,数据库版本,备份时间,binlog,是否压缩,备份增量还是全量等信息
[root@COS-DEV-MySQL full]# cat xtrabackup_info
uuid = 231d9d80-01a9-11e7-bcb1-080027a1fd1c
name =
tool_name = innobackupex
tool_command = --socket=/tmp/mysql_sandbox21489.sock --user=msandbox --password=... --no-timestamp --slave-info /data/full
tool_version = 2.3.7
ibbackup_version = 2.3.7
server_version = 5.6.24-72.2-log
start_time = 2017-03-05 21:39:14
end_time = 2017-03-05 21:39:20
lock_time = 0
binlog_pos = filename 'mysql-bin.000011', position '2140'
innodb_from_lsn = 0
innodb_to_lsn = 2142987473
partial = N
incremental = N
format = file
compact = N
compressed = N
encrypted = N
· 然后,我们进行apply log
[root@COS-DEV-MySQL full]# innobackupex --apply-log .
170305 21:42:17 innobackupex: Starting the apply-log operation
...
InnoDB: Shutdown completed; log sequence number 2142991038
170305 21:42:21 completed OK!
· apply log 完成之后,我们发现多了个xtrabackup_binlog_pos_innodb文件,内容和xtrabackup_binlog_info一样,xtrabackup_binlog_pos_innodb只是记录的innodb和xtradb的binlog位点,如果你还有其他存储引擎,例如myisam,那么需要读取xtrabackup_binlog_info的位点作为备份集的准确binlog位点。
[root@COS-DEV-MySQL full]# cat xtrabackup_binlog_pos_innodb
mysql-bin.000011 2140
[root@COS-DEV-MySQL full]# cat xtrabackup_binlog_info
mysql-bin.000011 2140
· 我们试一下myisam引擎的表进行数据插入的时候备份。在备份的时候,对test_myisam表进行数据插入,然后进行apply log,看看两个文件的差异
master [localhost] {msandbox} (test) > show create table test_myisam\G
*************************** 1. row ***************************
Table: test_myisam
Create Table: CREATE TABLE `test_myisam` (
`id` int(11) DEFAULT NULL,
`name` varchar(10) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
master [localhost] {msandbox} (test) > insert into test_myisam values(2,'aa');
Query OK, 1 row affected (0.00 sec)
....
master [localhost] {msandbox} (test) > show master status\G
*************************** 1. row ***************************
File: mysql-bin.000011
Position: 3120
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
[root@COS-DEV-MySQL master]# innobackupex --socket=/tmp/mysql_sandbox21489.sock \
> --user=msandbox \
> --password=msandbox \
> --no-timestamp \
> --slave-info \
> /data/full2
170305 22:07:42 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!".
MySQL binlog position: filename 'mysql-bin.000011', position '3120'
170305 22:07:49 [00] Writing backup-my.cnf
170305 22:07:49 [00] ...done
170305 22:07:49 [00] Writing xtrabackup_info
170305 22:07:49 [00] ...done
xtrabackup: Transaction log of lsn (2142987473) to (2142987473) was copied.
# 我们发现myisam表由于是非事务型存储引擎,中间的事务日志没有产生,因此没有产生redo拷贝
# 此时只有xtrabackup_binlog_info文件生成,没有xtrabackup_binlog_pos_innodb
[root@COS-DEV-MySQL full2]# cat xtrabackup_binlog_info
mysql-bin.000011 3120
[root@COS-DEV-MySQL full2]# innobackupex --apply-log .
....
InnoDB: Starting shutdown...
InnoDB: Shutdown completed; log sequence number 2142990651
170305 22:08:39 completed OK!
[root@COS-DEV-MySQL full2]# cat xtrabackup_binlog_pos_innodb
mysql-bin.000011 2140
[root@COS-DEV-MySQL full2]# cat xtrabackup_binlog_info
mysql-bin.000011 3120
# 我们发现xtrabackup_binlog_pos_innodb中的位置和xtrabackup_binlog_info不一样,因为xtrabackup_binlog_pos_innodb只是记录innodb和xtradb的binlog位点,myisam产生的binlog不会计算在内,因此xtrabackup_binlog_pos_innodb的信息和第一次全备的xtrabackup_binlog_info文件中的信息是一致的。
所以如果存在多种存储引擎,需要利用xtrabackup_binlog_info 来确定备份的完成那个时刻的binlog位点。
· 在apply log完成之后,我们发现xtrabackup_checkpoints 中的backup_type从 full-backuped变成了 full-prepared
[root@COS-DEV-MySQL full]# cat xtrabackup_checkpoints
backup_type = full-prepared
from_lsn = 0
to_lsn = 2142987473
last_lsn = 2142987473
compact = 0
recover_binlog_info = 0
· 我们再来看下MySQL从库备份出现的文件xtrabackup_slave_info 又是有什么用途呢?
slave1 [localhost] {msandbox} ((none)) > show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
Master_User: rsandbox
Master_Port: 21489
Connect_Retry: 60
Master_Log_File: mysql-bin.000011
Read_Master_Log_Pos: 3120
# slave1 和主库是实时同步,位点为11号binlog的3120位点。
slave1 [localhost] {msandbox} ((none)) > show master status\G
*************************** 1. row ***************************
File: mysql-bin.000007
Position: 120
# 此时的slave的 binlog位点
· 针对slave1 进行全备,我们主要查看xtrabackup_slave_info 信息,其他文件和从主库全备基本一致。
[root@COS-DEV-MySQL full_slave]# cat xtrabackup_binlog_info
mysql-bin.000007 120
# xtrabackup_binlog_info 记录的是从库的binlog位点。
[root@COS-DEV-MySQL full_slave]#
[root@COS-DEV-MySQL full_slave]# cat xtrabackup_slave_info
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000011', MASTER_LOG_POS=3120
# 发现xtrabackup_slave_info记录的是主库的binlog信息,该信息可以用来通过从库创建一个从库,然后指向主库!非常棒!该信息需要在备份的时候加上 --slave-info .
· 对了,还差一个文件没有介绍,那就是xtrabackup_logfile,这个文件相当的重要,这个文件记录的是从备份开始到备份结束所有的redo日志,xtrabackup在apply log的时候需要读取该文件,进行redo前滚。