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/