xtrabackup实现MySQL自动备份

MySQL备份有多种方式,自带有冷备份工具,但是对于生产来说备份不可能停机进行,所以公认目前最好用的是xtrabackup这个工具;

 

xtrabackup目前已经更新到8.0了,在2.4.9及其之前的版本备份所用的命令和2.4.11开始后的版本所用的备份命令有所不同,

2.4.9之前的版本备份命令:

innobackupex [--defaults-file=#] +参数

简单的来说,就是启动命令是:innobackupex

2.4.11后命令是:

xtrabackup [--defaults-file=#] --backup  +参数

这里开始percona公司废除掉了innobackupex命令,换成了xtrabackup命令,这里需要注意一下,参数方式大体相通,备份和还原语法都有一定差异,如果命令报错可以--help进行查看命令格式;

 

我用的是2.4.11版本,原因在此之前我安装过2.3版本,我的数据库是5.7.24,xtrabackup工具的2.3版本报错不支持该数据库版本,后来我卸载了2.3的xtrabackup,下载安装过最新版8.0版本,也不能用,xtrabackup8.0版本在这篇文章所写的时间点,由于是新出来没多久,针对的是mysql8.0所出,所以目前还不兼容mysql以前的各个版本,目前的8.0xtrabackup仅支持MySQL8.0,所以我无法使用,大家在安装xtrabackup之前最好先调查自己的数据库并且想好用哪个版本的备份工具

 


xtrabackup备份原理不做介绍,网上一大堆可自行查询,这里主要分享下搭建和用脚本实现自动化备份

 

对于安装有很多种方式:yum 在线,tar 编译 和 rpm安装,我比较喜欢用rpm安装,

yum安装
yum list | grep percona
yum install percona-xtrabackup-24


或者上传rpm包进行rpm安装:
rpm -ql percona-xtrabackup-24-2.4.11-1.el7.x86_64

安装完后,执行help进行命令帮助查看:

[root@root full]# innobackupex --help
Open source backup tool for InnoDB and XtraDB

Copyright (C) 2009-2015 Percona LLC and/or its affiliates.
Portions Copyright (C) 2000, 2011, MySQL AB & Innobase Oy. All Rights Reserved.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation version 2
of the License.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You can download full text of the license on http://www.gnu.org/licenses/gpl-2.0.txt


innobackupex - Non-blocking backup tool for InnoDB, XtraDB and HailDB databases

NOTICE: 'innobackupex' is deprecated, please switch to 'xtrabackup'

SYNOPOSIS

innobackupex [--compress] [--compress-threads=NUMBER-OF-THREADS] [--compress-chunk-size=CHUNK-SIZE]
             [--encrypt=ENCRYPTION-ALGORITHM] [--encrypt-threads=NUMBER-OF-THREADS] [--encrypt-chunk-size=CHUNK-SIZE]

得到信息是,2.4.11版已经废掉了innobackupex命令,所以我们使用xtrabackup命令进行操作:

 

全量备份命令:

xtrabackup --defaults-file=/etc/my.cnf --backup --user=root --password=admin --target-dir=/data/mysqlbk/full



这里没有制定备份文件进行压缩,xtrabackup带有压缩功能,参数是:
--compress
默认是单线程进行压缩,想要提高效率可以再带上多线程压缩参数:
--compress-threads=20    这里代表开了20个线程进行压缩文件

 这里有很多参数可以自行添加,比如制定host等等,需要强调的是,制定配置文件参数如果要带上,必须放在第一个参数位,否则会报错,target_dir参数:存储备份文件到指定文件夹,建议建立一个备份角色,不要用root用户去备份。

181211 11:07:30 [00]        ...done
xtrabackup: Transaction log of lsn (10267675) to (10267684) was copied.
181211 11:07:31 completed OK!
[root@root full]# ls
backup-my.cnf  ib_buffer_pool  ibdata1  mysql  mysqlslap  performance_schema  sys  test_db  xtrabackup_checkpoints  xtrabackup_info  xtrabackup_logfile
[root@root full]# 

命令执行后,出现completed ok代表备份完成,ls查看全量备份文件夹,发现多了很多文件,都是全量备份文件,这里和innobackupex命令有所区别的是,innobackupex不加时间轴参数会默认生成一个带时间的文件夹保存备份数据,而xtrabackup不制定时间轴参数,默认不会生成一个带时间轴的文件夹保存文件;看个人喜欢自行添加参数即可。

 

参数说明:

--apply-log-only¶
此選項僅在準備備份時執行重做階段。這對增量備份非常重要。

--backup
進行備份並將其放入。請參閱 創建備份。xtrabackup --target-dir

--binlog-info
此選項控制Percona XtraBackup應如何檢索與備份對應的服務器二進制日誌坐標。可能的值是 OFF,ON,LOCKLESS和AUTO。有關 詳細信息,請參閱Percona XtraBackup無 鎖二進制日誌信息手冊頁。

--check-privileges
此選項檢查Percona XtraBackup是否具有所有必需的權限。如果當前操作需要缺少權限,它將終止並打​​印出錯誤消息。如果當前操作不需要缺少權限,但某些其他XtraBackup操作可能需要該權限,則不會中止該過程並打印警告。

xtrabackup:錯誤:*。*上缺少必需的權限LOCK TABLES
xtrabackup:警告:在*。*上缺少必需的權限複製客戶端
--close-files
不要保持文件打開。當xtrabackup打開表空間時,它通常不會關閉其文件句柄以正確處理DDL操作。但是,如果表空間的數量非常大且無法滿足任何限制,則可以選擇在不再訪問文件句柄時關閉它們。Percona XtraBackup可以在啟用此選項的情況下生成不一致的備份。使用風險由您自己承擔。

--compact
通過跳過輔助索引頁來創建壓縮備份。

--compress
此選項告訴xtrabackup使用指定的壓縮算法壓縮所有輸出數據,包括事務日誌文件和元數據文件。目前唯一支持的算法是quicklz。生成的文件具有qpress存檔格式,即*.qpxtrabackup生成的每個文件本質上都是一個文件的qpress存檔,可以通過qpress 文件存檔提取和解壓縮。

--compress-chunk-size=#
壓縮線程的工作緩衝區大小(以字節為單位)。默認值為64K。

--compress-threads=#
此選項指定xtrabackup用於並行數據壓縮的工作線程數。此選項默認為1。並行壓縮(:選項:`xtrabackup -compress-threads`)可以與並行文件複製()一起使用。例如, 將創建4個I / O線程,這些線程將讀取數據並將其傳遞給2個壓縮線程。xtrabackup --parallel--parallel=4 --compress --compress-threads=2

--copy-back
將先前製作的備份中的所有文件從備份目錄複製到其原始位置。除非指定了選項,否則此選項不會復制現有文件。xtrabackup --force-non-empty-directories

--create-ib-logfile
此選項目前尚未實施。要創建InnoDB日誌文件,您必須準備兩次備份。

--databases=#
此選項指定應備份的數據庫和表的列表。該選項接受表單列表。"databasename1[.table_name1] databasename2[.table_name2] . . ."

--databases-exclude=name
根據名稱排除數據庫,操作方式與備份相同,但匹配的名稱將從備份中排除。請注意,此選項的優先級高於 。xtrabackup --databasesxtrabackup --databases

--databases-file=#
此選項指定包含應備份的數據庫和表列表的文件的路徑。該文件可以包含表單的列表元素,databasename1[.table_name1]每行一個元素。

--datadir=DIRECTORY
備份的源目錄。這應該與MySQL服務器的datadir相同,因此my.cnf如果存在,應該從中讀取; 否則你必須在命令行上指定它。

--decompress
使用.qp以前使用該選項進行的備份中的擴展名解壓縮所有文件。該 選項將允許同時解密多個文件。為了解壓縮,必須在路徑中安裝和訪問qpress實用程序。Percona XtraBackup不會自動刪除壓縮文件。為了清理備份目錄,用戶應該使用選項。xtrabackup --compressxtrabackup --parallelxtrabackup --remove-original

--decrypt=ENCRYPTION-ALGORITHM
.xbcrypt在先前使用選項進行的備份中解密具有擴展名的所有文件。該 選項將允許同時解密多個文件。Percona XtraBackup不會自動刪除加密文件。為了清理備份目錄,用戶應該使用選項。xtrabackup --encryptxtrabackup --parallelxtrabackup --remove-original

--defaults-extra-file=[MY.CNF]
讀取全局文件後讀取此文件。必須作為命令行中的第一個選項。

--defaults-file=[MY.CNF]
僅讀取給定文件中的默認選項。必須作為命令行中的第一個選項。必須是真實的文件; 它不能成為一種象徵性的聯繫。

--defaults-group=GROUP-NAME
此選項用於設置應從配置文件中讀取的組。如果您使用該選項,innobackupex將使用此 選項。部署需要它 。xtrabackup --defaults-groupmysqld_multi

--encrypt=ENCRYPTION_ALGORITHM
此選項指示xtrabackup使用ENCRYPTION_ALGORITHM中指定的算法加密InnoDB數據文件的備份副本。它直接傳遞給xtrabackup子進程。有關更多詳細信息,請參閱 xtrabackup 文檔。

--encrypt-key=ENCRYPTION_KEY
此選項指示xtrabackup ENCRYPTION_KEY在使用該選項時使用給定的。它直接傳遞給xtrabackup子進程。有關更多詳細信息,請參閱xtrabackup 文檔。xtrabackup --encrypt

--encrypt-key-file=ENCRYPTION_KEY_FILE
此選項指示xtrabackup使用存儲在指定的加密密鑰ENCRYPTION_KEY_FILE使用時 選項。它直接傳遞給xtrabackup子進程。有關更多詳細信息,請參閱 xtrabackup 文檔。xtrabackup --encrypt

--encrypt-threads=#
此選項指定將用於並行加密/解密的工作線程數。有關更多詳細信息,請參閱xtrabackup 文檔。

--encrypt-chunk-size=#
此選項指定每個加密線程的內部工作緩衝區的大小(以字節為單位)。它直接傳遞給xtrabackup子進程。有關更多詳細信息,請參閱xtrabackup 文檔。

--export
創建導出表所需的文件。請參閱恢復單個表。

--extra-lsndir=DIRECTORY
(for -backup):在此目錄中保存xtrabackup_checkpoints 和xtrabackup_info文件的額外副本。

--force-non-empty-directories
如果指定,它會:選項`xtrabackup -copy-back`和 選項將文件傳輸到非空目錄。不會覆蓋現有文件。如果需要從備份目錄複製/移動的文件已存在於目標目錄中,則它仍將失敗並顯示錯誤。xtrabackup --move-back

--ftwrl-wait-timeout=SECONDS
此選項指定xtrabackup應等待在運行之前阻塞的查詢的時間(以秒為單位)。如果超時到期時仍有此類查詢,則xtrabackup將終止並顯示錯誤。默認是,在這種情況下,它不會等待查詢完成並 立即啟動。支持的位置(Percona Server 5.6+)xtrabackup將自動使用Backup Locks 作為複制非InnoDB數據的輕量級替代方案,以避免阻止修改InnoDB表的DML查詢。FLUSH TABLES WITH READ LOCK0FLUSH TABLES WITH READ LOCKFLUSH TABLES WITH READ LOCK

--ftwrl-wait-threshold=SECONDS
此選項指定查詢運行時閾值,該閾值由xtrabackup用於檢測具有非零值的長時間運行的查詢 。 在存在長時間運行的查詢之前不會啟動。如果是,則此選項無效。默認值為秒。支持的位置(Percona Server 5.6+)xtrabackup將自動使用Backup Locks 作為複制非InnoDB數據的輕量級替代方案,以避免阻止修改InnoDB表的DML查詢。xtrabackup --ftwrl-wait-timeoutFLUSH TABLES WITH READ LOCKxtrabackup --ftwrl-wait-timeout060FLUSH TABLES WITH READ LOCK

--ftwrl-wait-query-type=all|update
此選項指定在xtrabackup發出全局鎖之前允許完成哪些類型的查詢。默認是all。

--galera-info
此選項創建xtrabackup_galera_info包含備份時本地節點狀態的文件。在執行Percona XtraDB Cluster的備份時應使用選項。使用備份鎖創建備份時,它不起作用。

--incremental-basedir=DIRECTORY
創建增量備份時,這是包含完整備份的目錄,該備份是增量備份的基礎數據集。

--incremental-dir=DIRECTORY
準備增量備份時,這是增量備份與完整備份組合的目錄,以進行新的完整備份。

--incremental-force-scan
創建增量備份時,即使完整更改的頁面位圖數據可用,也強制對正在備份的實例中的數據頁進行完全掃描。

--incremental-lsn=LSN
創建增量備份時,可以指定日誌序列號(LSN)而不是指定 。對於在5.1及更高版本中創建的數據庫,請將LSN指定為單個64位整數。注意:如果指定了錯誤的LSN值(Percona XtraBackup無法檢測到的用戶錯誤),則備份將無法使用。小心!xtrabackup --incremental-basedir

--innodb-log-arch-dir=DIRECTORY
此選項用於指定包含存檔日誌的目錄。它只能與選項一起使用。xtrabackup --prepare

--innodb-miscellaneous
有一大組InnoDB選項通常從my.cnf配置文件中讀取 ,因此xtrabackup以與當前服務器相同的配置啟動其嵌入式InnoDB。您通常不需要明確指定這些。這些選項與InnoDB或XtraDB中的選項具有相同的行為。它們如下:

- innodb - adaptive - hash - index 
- innodb - 附加- mem - pool - size 
- innodb - autoextend - increment 
- innodb - buffer - pool - size 
- innodb - checksums 
- innodb - data - file - path 
- innodb - 數據- 主頁- 目錄
- innodb - doublewrite - file 
- innodb - doublewrite 
- innodb - extra - undoslots 
- innodb - fast - checksum 
- innodb - file - io - threads 
- innodb - file - per - table 
- innodb - flush - log - at - trx - commit 
- innodb- flush - method 
- innodb - force - recovery 
- innodb - io - capacity 
- innodb - lock - wait - timeout 
- innodb - log - buffer - size 
- innodb - log - files - in - group 
- innodb - 日誌- 文件- 大小
- innodb -log - group - home - dir 
- innodb - max - dirty - pages - pct 
- innodb - open - files 
- innodb - page - size 
- innodb - read - io - threads 
- innodb - write - io - threads
--keyring-file-data=FILENAME
密鑰環文件的路徑。

--lock-ddl
如果備份開始時服務器支持阻止所有DDL操作,則發出問題。LOCK TABLES FOR BACKUP

--lock-ddl-per-table
在xtrabackup開始復制之前鎖定每個表的DDL,直到備份完成。

--lock-ddl-timeout
如果在給定的超時內沒有返回,則中止備份。LOCK TABLES FOR BACKUP

--log-copy-interval=#
此選項指定日誌複製線程執行的檢查之間的時間間隔(以毫秒為單位)(默認值為1秒)。

--move-back
將先前製作的備份中的所有文件從備份目錄移動到其原始位置。由於此選項會刪除備份文件,因此必須謹慎使用。

--no-defaults
不要從任何選項文件中讀取默認選項。必須作為命令行中的第一個選項。

--no-version-check
此選項禁用版本檢查。如果未通過此選項,則在模式下運行xtrabackup時會隱式啟用自動版本檢查--backup。要禁用版本檢查,應--no-version-check在envoking xtrabackup時顯式傳遞該選項。

啟用自動版本檢查後,xtrabackup會在創建服務器連接後對備份階段的服務器執行版本檢查。xtrabackup將以下信息發送到服務器:

MySQL的味道和版本
操作系統名稱
Percona Toolkit版本
Perl版本
每條信息都有唯一的標識符。這是一個MD5哈希值,Percona Toolkit用它來獲取有關如何使用它的統計信息。這是一個隨機的UUID; 沒有收集或存儲客戶信息。

--parallel=#
此選項指定在創建備份時用於同時復制多個數據文件的線程數。默認值為1(即沒有並發傳輸)。在Percona XtraBackup 2.3.10及更高版本中,此選項可與選項一起使用以並行複制用戶數據文件(重做日誌和系統表空間在主線程中復制)。xtrabackup --copy-back

--password=PASSWORD
此選項指定連接到數據庫時要使用的密碼。它接受一個字符串參數。有關詳細信息,請參閱mysql -help。

--prepare
使xtrabackup在使用創建的備份上執行恢復 ,以便可以使用它。請參閱 準備備份。xtrabackup --backup

--print-defaults
打印程序參數列表並退出。必須作為命令行中的第一個選項。

--print-param
使xtrabackup打印出可用於將數據文件複製回原始位置以恢復它們的參數。請參閱 使用xtrabackup編寫備份腳本。

--rebuild_indexes
應用日誌後,在InnoDB表中重建二級索引。只對-prepare有效。

--rebuild_threads=#
使用此數量的線程在緊湊備份中重建索引。僅對-prepare和-rebuild-indexes有效。

--reencrypt-for-server-id=
使用此選項可以使用與從中獲取加密備份的server_id不同的server_id啟動服務器實例,例如復制從站或galera節點。使用此選項時,作為準備步驟,xtrabackup將根據新的server_id生成具有ID的新主密鑰,將其存儲到密鑰環文件中並重新加密表空間標頭內的表空間密鑰。選項應該通過--prepare(最後一步)。

--remove-original
在Percona XtraBackup 2.4.6中實現,指定時將刪除此選項.qp,.xbcrypt並.qp.xbcrypt在解密和解壓縮後刪除文件。

--safe-slave-backup
指定後,xtrabackup將在運行之前停止從屬SQL線程,並等待啟動備份直到 in 為零。如果沒有打開的臨時表,則會進行備份,否則將啟動並停止SQL線程,直到沒有打開的臨時表為止。如果在幾秒鐘後沒有變為零, 則備份將失敗。備份完成後,將重新啟動從屬SQL線程。實現此選項是為了處理複製臨時表 ,而不是基於行的複制。FLUSH TABLES WITH READ LOCKSlave_open_temp_tablesSHOW STATUSSlave_open_temp_tablesxtrabackup --safe-slave-backup-timeout

--safe-slave-backup-timeout=SECONDS
應該等待 多少秒才能變為零。默認為300秒。xtrabackup --safe-slave-backupSlave_open_temp_tables

--secure-auth
如果客戶端使用舊的(4.1.1之前的)協議,則拒絕客戶端連接到服務器。(默認情況下啟用;使用-skip-secure-auth禁用。)

--server-id=#
正在備份的服務器實例。

--slave-info
備份複製從屬服務器時,此選項很有用。它打印主服務器的二進制日誌位置。它還將此信息xtrabackup_slave_info作為 命令寫入文件。可以通過在此備份上啟動從屬服務器並發出保存在文件中的二進制日誌位置的命令來設置此主站的新從站。CHANGE MASTERCHANGE MASTERxtrabackup_slave_info

--ssl
啟用安全連接。更多信息可以在-ssl MySQL服務器文檔中找到。

--ssl-ca
包含受信任SSL CA列表的文件路徑。更多信息可以在-ssl-ca MySQL服務器文檔中找到。

--ssl-capath
包含PEM格式的受信任SSL CA證書的目錄路徑。更多信息可以在-ssl-capath MySQL服務器文檔中找到。

--ssl-cert
包含PEM格式的X509證書的文件的路徑。更多信息可以在-ssl-cert MySQL服務器文檔中找到。

--ssl-cipher
用於連接加密的允許密碼列表。更多信息可以在-ssl-cipher MySQL服務器文檔中找到。

--ssl-crl
包含證書吊銷列表的文件的路徑。更多信息可以在-ssl-crl MySQL服務器文檔中找到。

--ssl-crlpath
包含證書吊銷列表文件的目錄路徑。更多信息可以在-ssl-crlpath MySQL服務器文檔中找到。

--ssl-key
包含PEM格式的X509密鑰的文件路徑。更多信息可以在-ssl-key MySQL服務器文檔中找到。

--ssl-mode
連接到服務器的安全狀態。更多信息可以在 -ssl-mode MySQL服務器文檔中找到。

--ssl-verify-server-cert
驗證服務器證書Common Name值與連接到服務器時使用的主機名。更多信息可以在 -ssl-verify-server-cert MySQL服務器文檔中找到。

--stats
導致xtrabackup掃描指定的數據文件並打印出索引統計信息。

--stream=name
將所有備份文件以指定格式流式傳輸到標準輸出。目前支持的格式是xbstream和tar。

--tables=name
正則表達式,與databasename.tablename格式的完整表名 匹配。如果名稱匹配,則備份表。查看部分備份。

--tables-exclude=name
通過regexp過濾表名。操作方式與備份相同,但匹配的名稱從備份中排除。請注意,此選項的優先級高於 。xtrabackup --tablesxtrabackup --tables

--tables-file=name
每行包含一個表名的文件,格式為databasename.tablename。備份將僅限於指定的表。請參閱 使用xtrabackup編寫備份腳本。

--target-dir=DIRECTORY
此選項指定備份的目標目錄。如果該目錄不存在,則xtrabackup會創建它。如果目錄確實存在且為空,則xtrabackup將成功。 但是,xtrabackup不會覆蓋現有文件; 它將因操作系統錯誤17而失敗。file exists

如果此選項是相對路徑,則將其解釋為相對於執行xtrabackup的當前工作目錄。

--throttle=#
此選項限制每秒複製的塊數。塊大小為 10 MB。要將帶寬限制為10 MB / s,請將選項設置為1: -throttle = 1。

也可以看看

有關如何限製備份的詳細信息
限製備份
--tmpdir=name
除了在使用時打印出正確的tmpdir參數,此選項當前不用於任何內容。xtrabackup --print-param

--to-archived-lsn=LSN
此選項用於指定在準備備份時應將日誌應用到的LSN。它只能與選項一起使用 。xtrabackup --prepare

--use-memory=#
此選項會影響為與其一起準備備份或分析統計信息所分配的內存 量 。其目的與innodb_buffer_pool_size類似。它與Oracle的InnoDB熱備份工具中的類似命名選項不同。默認值為100MB,如果您有足夠的可用內存,1GB到2GB是一個很好的建議值。支持倍數提供單位(例如1MB,1M,1GB,1G)。xtrabackup --preparextrabackup --stats

--user=USERNAME
此選項指定連接到服務器時使用的MySQL用戶名(如果不是當前用戶)。該選項接受字符串參數。有關詳細信息,請參閱mysql -help。

--version¶
此選項打印xtrabackup版本並退出。

增量备份命令区别,老版本增量备份命令:

innobackupex--defaults-file=/etc/my.cnf --backup  --user=root --password=admin --incremental-basedir=/data/mysqlbk/full/fu01/ --incremental /data/mysqlbk/add/ad01

新版本使用老版本命令会报错,新版本格式:

官方文档格式:
xtrabackup --backup --target-dir = / data / backups / inc1 \ 
--incremental-basedir = / data / backups / base


本次我使用的方式:

xtrabackup --defaults-file=/etc/my.cnf --backup  --user=root --password=admin --target-dir=/data/mysqlbk/add/ad01 --incremental-basedir=/data/mysqlbk/full/fu01

这里的 backup参数必须都是要带的,相对于老板本目标目录参数已经变为target-dir;

出现如下结果说明第一次备份成功,ls查看:

181211 15:24:32 [00] Writing /data/mysqlbk/add/ad01/backup-my.cnf
181211 15:24:32 [00]        ...done
181211 15:24:32 [00] Writing /data/mysqlbk/add/ad01/xtrabackup_info
181211 15:24:32 [00]        ...done
xtrabackup: Transaction log of lsn (10267851) to (10267860) was copied.
181211 15:24:32 completed OK!
[root@root ad01]# ls
backup-my.cnf   ibdata1.meta  performance_schema  xtrabackup_checkpoints
ib_buffer_pool  mysql         sys                 xtrabackup_info
ibdata1.delta   mysqlslap     test_db             xtrabackup_logfile

 

这里,第一次增量备份是基于上一次全量备份进行的,所以参考数据标准线的base目录是采用的上一次全量备份目录,第二次增量备份应该参考第一次增量备份的文件目录,所以第二次及其之后的增量备份中incremental-dir路径需要改成上一次增量备份路径;


恢复备份:

总体来说,恢复命令是:

xtrabackup --copy-back --target-dir=/备份目录

copy-back参数:
將先前製作的備份中的所有文件從備份目錄複製到其原始位置

在恢復備份之前,MySQL的datadir必須為空。另外需要注意的是,在執行恢復之前需要關閉MySQL服務器。您無法還原到正在運行的mysqld實例的datadir(導入部分備份時除外);


如果不想把备份复制到MySQL的datadir文件夹中(或不需要保存备份文件),可以用rsync命令进行数据的移动,把备份数据直接移动到MySQL的datadir文件夹中,命令格式:
rsync -avrP /备份文件 /var/lib/mysql/

一般来说备份文件权限是root账户所属,所以移动后需要授权给MySQL:
chown -R mysql:mysql /var/lib/mysql



如果在备份的时候带了压缩参数,还原的时候记得解压缩,参数是:
--decompress
或者使用
--parallel 可與選項一起使用以 同時解壓縮多個文件


建议使用复制恢复方式:
xtrabackup --copy-back --prepare --target-dir=/备份目录

xtrabackup恢复步骤总结:

在第一次备份全量后,存放备份文件目录为 fu01

第一次增量备份基于上一次全量fu01 产生,存放目录为 ad01

基于第一次增量ad01 进行第二次增量备份,存放目录为 ad02

全量恢复仅需执行上一次全量恢复操作,增量恢复,需要执行上一次全量恢复操作及其上一次全量到恢复增量时间点之间的增量数据恢复操作;

进行恢复操作:

1、全量恢复
2、增量恢复

恢复有两个必须的步骤:
第一步:
把之前备份的文件用 --prepare 参数。目的是把备份的文件未提交的事务回滚到稳定状态,这一步的命令没有移动备份文件到mysql服务下,仅仅是对备份文件进行事务状态处理;数据还是在fu01目录下。
命令参考(全量和增量准备命令不相同):
  仅全量步骤:
    上一次全量准备:   xtrabackup --prepare --target-dir=/data/mysqlbk/full/fu01
  增量步骤:
    上一次全量准备  xtrabackup --prepare --apply-log-only --target-dir=/data/mysqlbk/full/fu01
     第一次增量准备  xtrabackup --prepare --apply-log-only --target-dir=/data/mysqlbk/full/fu01 --incremental-dir=/data/mysqlbk/add/ad01
     第二次增量准备  xtrabackup --prepare --apply-log-only --target-dir=/data/mysqlbk/full/fu01 --incremental-dir=/data/mysqlbk/add/ad02

第二步:
在第一步命令执行完的情况下,fu01目录下的备份数据已经是可回滚的稳定数据,执行带 --copy-back参数的拷贝命令,把fu01下的备份文件拷贝到MySQL服务下
参考命令:

   复制备份数据到MySQL服务下(全量增量复制命令基本相同):
   xtrabackup --copy-back --target-dir=/data/mysqlbk/full/fu01


特别提醒:复制的文件到MySQL服务下后,文件权限一般不是MySQL的,可以通过ll命令查看权限,文件给mysql授权命令:

chown -R mysql:mysql /var/lib/mysql

在做恢复操作时,必须要是冷恢复,即关闭数据库,且数据库数据存放目录下,必须是空文件夹,所以,在做恢复操作前,一定要检查MySQL是否被shutdown,MySQL的数据存放文件夹当前状态是否为空

 

自动备份脚本:

脚本是用shell写的,网上也有很多python等方式实现。

自动备份是通过Linux自带的定时任务+执行备份命令脚本实现的,定时任务我设定的是每天凌晨3点执行一次,执行备份命令和判断全备增备即删除一周以上的备份数据的脚本如下:

保留一个周期数据备份,两份全备,一周增备,即需要两个全备文件夹存放目录 fu01 fu02 和 一周增备存放目录 ad01 ad02 ad03 ad04 ad05

 

#!/bin/bash
#获取当前时间是周几
TIMENOW=$(date +%w)
#上一天是周几
LASTADD=`expr $TIMENOW - 1`

if [ $TIMENOW = '0' ]
then
#新建备份文件夹
mkdir /data/mysqlbk/full/`date +%y-%m-%d`
else
mkdir /data/mysqlbk/add/ad0$TIMENOW/`date +%y-%m-%d`
fi
#获取最近的全量备份目录
full_last_dir=`ls /data/mysqlbk/full -t |head -n 1`
#获取新创建的增量备份目录
add_last_dir=`ls /data/mysqlbk/add/ad0$TIMENOW -t |head -n 1`
#赋值备份路径给变量
full_data=/data/mysqlbk/full/$full_last_dir
add_data=/data/mysqlbk/add/ad0$TIMENOW/$add_last_dir
#如果是周日,执行全量备份
if [ $TIMENOW = '0' ]
    then
        #全量备份数据
        xtrabackup --defaults-file=/etc/my.cnf --backup --user=root --password=lcadmin --target-dir=$full_data
        if [ $? -eq 0 ]
        then
                echo "备份成功,执行历史备份数据删除"
                #删除历史数据
                find /data/mysqlbk/full -mtime +9 -name "*.*" -exec rm -rf {} \;
        else
                echo "警告,备份数据失败"|mail -s "Rsync delete " [email protected]
        fi

#增量备份数据
else
#找到上一次备份的最新目录/如果一个周期内只有一个备份文件,可以不需要这条命令
add_yesterday_dir=`ls /data/mysqlbk/add/ad0$LASTADD -t |head -n 1`
#获取上一次增量备份目录
last_add_data=/data/mysqlbk/add/ad0$LASTADD/$add_yesterday_dir
#获取上一个周期的增量备份文件夹
old_addfile=`date -d "7 days ago" +%y-%m-%d`

        #执行增量备份
        if [ $TIMENOW = '1' ]
                then
                xtrabackup --defaults-file=/etc/my.cnf --backup  --user=root --password=lcadmin --target-dir=$add_data --incremental-basedir=$full_data
        else
                #获取临时文件夹变量,指定到上一次增量文件夹中
                xtrabackup --defaults-file=/etc/my.cnf --backup  --user=root --password=lcadmin --target-dir=$add_data  --incremental-basedir=$last_add_data
        fi   
        if [ $? -eq 0 ]
                then
                echo "备份成功,执行历史备份数据删除"
                #删除历史数据
                rm -rf /data/mysqlbk/add/ad0$TIMENOW/$old_addfile
        else
                echo "警告,备份数据失败"|mail -s "Rsync delete " [email protected]
        fi
fi      

 

脚本经过多次调整,已经进行了精简化,同时也可以在任意时间进行执行,需要调整全量时间参数和增量时间参数即可,同时删除全量备份文件夹fu01 fu02,脚本会直解新建写入时间轴文件夹(脚本已经优化到可以删除ad01 02等文件夹直接用时间文件夹存储,由于我懒,且认为带01 02比看时间轴判断周几来的更快,所以就没有去改,可自行调整)

当然脚本的备份没有进行文件压缩,在生产商使用的时候可以带上压缩参数,减少磁盘压力

你可能感兴趣的:(MYSQL,XTRABACKUP)