01. 基础知识
如果备份的是从库,且备份的时候,主从延迟特别大,那么备份的时间点就会不准确,因此真正的备份的时间点一般是延迟的。
(1)innobackupex:是将xtrabackup进行封装的perl脚本,提供了备份myisam表的能力,因此一般都用该脚本进行热备数据。
(2)xtrabackup:只能备份innoDB和xtraDB两种数据引擎的表,而不能备份MyISAM数据表,因此一般不用,作为innobackupex的一部分。
(3)innobackupex工具使用:
--defaults-file=/home/work/mysql_3307/etc/my.cnf
--host=10.10.10.10
--port=3307
--user=mysqlbackup
--password=123456
--slave-info
--defaults-file=/home/work/mysql_3307/etc/my.cnf
--defaults-file=/home/work/mysql_3307/etc/my.cnf
/home/data/hostname_22_3307/2020-04-15_00-06-30
innobackupex --defaults-file=/home/work/mysql_3307/etc/my.cnf --user=mysqlbackup --password=... --host=127.0.0.1 --slave-info --ibbackup=xtrabackup --stream=xbstream --tmpdir=/home/work/tmp_xbm_33
(4) innobackupex --apply-log /home/data/hostname_22_3307/2020-04-15_00-06-30
一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。
因此,此时数据文件仍处理不一致状态。此选项作用是通过回滚未提交的事务及同步已经提交的事务至数据文件使数据文件处于一致性状态。
在apply log完成之后,我们发现xtrabackup_checkpoints 中的backup_type从 full-backuped变成了 full-prepared
02. 备份原理
03. 文件介绍
(1)sys,mysql,performance_schema,用户数据库等:数据库的拷贝
ib_buffer_pool
ibdata1:备份共享表空间
undo001,undo002,undo002:备份undo log
################################
xtrabackup_logfile:备份redo log
这个文件相当的重要,这个文件记录的是从备份开始到备份结束所有的redo日志;
xtrabackup在apply log的时候需要读取该文件,进行redo前滚。
################################
xtrabackup_binlog_info:
文件记录的是备份完成的那个时间点的binlog位点。如果备份的是主库数据,则change位置点为xtrabackup_binlog_info
若未开启gtid,则内容如下: mysql-bin.000332 28370863 若开启gtid,则内容如下: mysql-bin.000009 788080016 b172206b-7035-11ea-8f2b-e4434bcaccee:1-333346
############################
xtrabackup_binlog_pos_innodb:
只是记录innodb和xtradb的binlog位点,myisam产生的binlog不会计算在内;
因此xtrabackup_binlog_pos_innodb的信息和第一次全备的xtrabackup_binlog_info文件中的信息是一致的。
若有非innodb存储引擎的事务,则binlog位点可能与xtrabackup_binlog_info不同,一般两者相同:
mysql-bin.000332 28370863
##########################
xtrabackup_slave_info:
要生成该文件,需要在备份时添加参数--slave-info。一般情况下都是备份的从库数据,xtrabackup_slave_info记录了主库复制的位置点。
若未开启gtid,则记录完成备份时,主库的点位,内容如下: CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.002406', MASTER_LOG_POS=515291508 若开启了gtid,则记录完成备份时,主库的gtid_purged,内容如下: SET GLOBAL gtid_purged='b172206b-7035-11ea-8f2b-e4434bcaccee:1-333346'; CHANGE MASTER TO MASTER_AUTO_POSITION=1
##########################
xtrabackup_info:
backup_type = log-applied from_lsn = 0 to_lsn = 3021212303418 last_lsn = 3022371220298 compact = 0 recover_binlog_info = 0 [root@c3-dba-storage34 2020-04-15_00-06-30]# cat xtrabackup_info uuid = e33f1cf9-7e85-11ea-ba16-90e2bad1cd48 name = tool_name = innobackupex tool_command = --defaults-file=/home/work/mysql/etc/my.cnf --user=mysqlbackup --password=... --host=127.0.0.1 --slave-info --ibbackup=xtrabackup --stream=xbstream --tmpdir=/home/work/tmp_xbm_3306/2020-04-15_00-06-36 . tool_version = 2.4.7 ibbackup_version = 2.4.7 server_version = 5.7.25-28-log start_time = 2020-04-15 00:06:36 end_time = 2020-04-15 03:26:49 lock_time = 0 binlog_pos = filename 'mysql-bin.000332', position '28370863' innodb_from_lsn = 0 innodb_to_lsn = 3021212303418 partial = N incremental = N format = xbstream compact = N compressed = N encrypted = N
xtrabackup_checkpoints:
提供的信息有:
备份状态:
如果是全量备份,backup_type = full-backuped
如果是增量备份,backup_type = incremental。备份集的状态在apply log后会改变,后面会说明
备份起始lsn:
内容如下:
backup_type = log-applied from_lsn = 0 to_lsn = 3021212303418 last_lsn = 3022371220298 compact = 0 recover_binlog_info = 0
解释如下:
# from_lsn = 0由于是全量备份,所以数据是从LSN=0开始的;
backup-my.cnf:
# This MySQL options file was generated by innobackupex. # The MySQL server [mysqld] innodb_checksum_algorithm=crc32 innodb_log_checksum_algorithm=strict_crc32 innodb_data_file_path=ibdata1:100M:autoextend innodb_log_files_in_group=3 innodb_log_file_size=4294967296 innodb_fast_checksum=false innodb_page_size=16384 innodb_log_block_size=512 innodb_undo_directory=./ innodb_undo_tablespaces=0 server_id=177093683 redo_log_version=1
1、备份到本地目录:/home/work/tmp/backup/
xtrabackup --backup --target-dir=/home/work/tmp/backup/ --user=mysqlbackup --password=123456 --host=127.0.0.1 --port=3306 --slave-info 2、应用本地目录/home/work/tmp/backup/中的备份日志,确保数据一致,提交完成的事务,回滚未完成的事务。
xtrabackup --prepare --target-dir=/home/work/tmp/backup/