進行全量備份 (以日期來分,一天一個備份)
innobackupex [備份檔存放的路徑] --user=用戶名 --password=密碼 --socket=[sock路徑]
innobackupex /backup/20190402/ --user=root --password="1234" --socket=/tmp/mysql.sock
完成後會產出2019-04-02_14-01-36路徑在/backup/20190402/2019-04-02_14-01-36
進行增量備份
incremental-basedir路徑是第一次全備產出的檔案路徑,作為增量的基礎
innobackupex --incremental /backup/20190402/ --incremental-basedir=/backup/20190402/2019-04-02_14-01-36/ --user=root --password="1234" --socket=/tmp/mysql.sock
完成後會產出2019-04-02_14-18-15路徑在/backup/20190402/2019-04-02_14-18-15
14-18-15是備份的時間點,進去資料夾內,可以查看xtrabackup_checkpoints是增量備份
[root@rosalie 2019-04-02_14-18-15]# cat xtrabackup_checkpoints
backup_type = incremental ---incremental為增量、full-backuped為全量
from_lsn = 2591333
to_lsn = 2591333
last_lsn = 2591342
compact = 0
recover_binlog_info = 0
還原指令
innobackupex --apply-log --redo-only BASE_DIR
innobackupex --apply-log --redo-only BASE_DIR --incremental-dir = INCREMENTAL_DIR_1
innobackupex --apply-log BASE-DIR --incremental-dir = INCREMENTAL_DIR_2
其中BASE-DIR是指全量備份目錄(如下),增量DIR_1是指第一次的增量備份,增量DIR_2是指第二次的增量備份,以此類推這裡要注意的是:最後一步的增量備份並沒有--redo只選項!還有,可以使用--use_memory提高性能。
範例還原
第一步--apply-log應用備份時產生的日誌,為整體拷貝恢復做準備
innobackupex --apply-log --redo-only /backup/20190402/2019-04-02_14-01-36 --use-memory=500m --user=root --password='1234'
第二步-在準備備份(prepare)時,只執行重做(redo)階段
innobackupex --apply-log --redo-only /backup/20190402/2019-04-02_14-01-36
--incremental-dir=/backup/20190402/2019-04-02_14-18-15 --use-memory=500m
--user=root --password='1234'
/backup/20190402/2019-04-02_14-01-36 全備路徑
/backup/20190402/2019-04-02_14-18-15 增備路徑
若有第二次增量,藍色路徑更改為第二次增量路徑即可
第三步-上面執行完準備之後,這時2019-04-02_14-01-36裡的備份文件已完全準備就緒
innobackupex --apply-log /backup/20190402/2019-04-02_14-01-36 --use-memory=500m --user=root --password='1234'
第四步-COPY
copy方式1,執行下面指令,但原MYSQL資料夾需為空!
或者可直接mv 2019-04-02_14-01-36 到mysql指定的路徑下
或者可直接mv 2019-04-02_14-01-36 到mysql指定的路徑下
方式1.
# innobackupex --copy-back /backup/20190402/2019-04-02_14-01-36 --use-memory=500m --user=root --password='1234'
# chown -R mysql:mysql /mysql/data/
方式2.
# cp /backup/20190402/2019-04-02_14-01-36 /mysql/
# mv 2019-04-02_14-01-36 data
# chown -R mysql:mysql /mysql/data/
若是增備後還有其他更新未備份,但有binlog檔案產生,需要再將數據導入可參考以下步驟
※注意,啟動後再導入
查看xtrabackup_binlog_info檔position位置最後的位置,再從那個位置開啟
[root@rosalie 2019-04-02_14-01-36]# cat xtrabackup_binlog_info
mysql-bin.000195 2861626|mysql -uroot -p
#從2861626開始到最後
[root@rosalie 2019-04-02_14-01-36]# mysqlbinlog --start-position=2861626 /restore_test/mysql-bin.00195 |mysql -uroot -p
#復原整份BINLOG
[root@rosalie 2019-04-02_14-01-36]# mysqlbinlog /restore_test/mysql-bin.00195 |mysql -uroot -p
#從2861626開始到最後
[root@rosalie 2019-04-02_14-01-36]# mysqlbinlog --start-position=2861626 /restore_test/mysql-bin.00195 |mysql -uroot -p
#從2861626開啟到2900000
[root@rosalie 2019-04-02_14-01-36]# mysqlbinlog --start-position=2861626 --stop-position=2900000 /restore_test/mysql-bin.00195 |mysql -uroot -p
[root@rosalie 2019-04-02_14-01-36]# mysqlbinlog /restore_test/mysql-bin.00195 |mysql -uroot -p
執行若出現問題
ERROR 1062 (23000) at line 5073: Duplicate entry '2402120130098997002' for key 'PRIMARY'
ERROR 1062 (23000) at line 5097: Duplicate entry '163255337' for key 'PRIMARY'
ERROR 1062 (23000) at line 5267: Duplicate entry '163255338' for key 'PRIMARY'
可以加-f 略過
mysqlbinlog --start-position=2861626 /restore_test/mysql-bin.00195 | mysql -uroot -p -f
若出現
問題
mysqlbinlog: unknown variable 'default_character_set=utf8mb4'
可加--no-defaults --set-charset=utf8mb4
因為mysqlbinlog這個工具無法識別binlog中的配置中的default-character-set=utf8這個指令
因為mysqlbinlog這個工具無法識別binlog中的配置中的default-character-set=utf8這個指令
mysqlbinlog --no-defaults --set-charset=utf8mb4 mysql-bin.00195 | mysql -uroot -p
XtraBackup參數說明(紅色是我覺得比較常會用到的)
- --apply-log該選項表示同xtrabackup的--prepare參數,一般情況下,在備份完成後,數據還不能用於恢復操作,因為備份的數據中可能會包含尚未提交的事務或已經提交但尚未同步至數據文件中的事務。因此,此時數據文件仍處理不一致狀態。--apply-log(準備)的作用是通過回滾未提交的事務及同步已經提交的事務至數據文件使數據文件處於一致性狀態。對xtrabackup的--prepare參數的封裝
- --backup-locks僅支持percona server5.6,如果server不支持,開啟不讀私人和產生影響
- --close-files2.2.5引入的新特性關閉不再訪問的文件句柄,這個選項直接傳遞給xtrabackup,當xtrabackup打開表空間通常並不關閉文件句柄目的是正確的處理DDL操作。如果表空間數量巨大,這是一種可以關閉不再訪問的文件句柄的方法。使用該選項有風險,會有產生不一致備份的可能
- --compact創建一份沒有輔助索引的緊湊的備份,該選項直接傳遞給xtrabackup
- --compress該選項指導xtrabackup壓縮innodb數據文件的backup的拷貝,直接傳遞給xtrabackup的子進程
- --compress-threads = #該選項指定並行壓縮的worker線程的數量,直接傳遞給xtrabackup的子進程
- --compress-chunk-size = #這個選項指定每個壓縮線程的內部worker buffer的大小。單位是字節,默認是64K。直接傳遞給xtrabackup子進程
- --copy-back執行還原操作,從備份目錄中最近的一份備份中拷貝所有文件到datadir,innobackupex --copy-back選項除非指定innobackupex --force-non-empty-directories選項,否則不會拷貝覆蓋所有的文件
- --databases=LIST指定innoabckupex備份的DB列表,該選項接受一個一個字符串參數或者包含DB列表的文件的全路徑。如果沒有指定該選項,所有包含innodb和myam表的DB會被備份,請確認--databases包含所有的innodb數據庫和表,,以便所有的innodb.frm文件也同樣備份,如果列表非常長的話。可以以文件代替
- --decompress解壓所有值錢通過--compress選項壓縮成的.qp文件。innodbakcupex --parallel選項允許多個文件同時解壓。為了解壓,qpress工具必須有安裝並且訪問這個文件的權限。這個進程將在同一個位置移除原來的壓縮/加密文件
- --decrypt=ENCRYPTION-ALGORITHM解密所有之前通過--encrypt選項加密的.xbcrypt文件。--innobackup --parallel選項允許同時多個文件解密
- --defaults-file=[MY.CNF]該選項指定了從哪個文件讀取MySQL配置,必須放在命令行第一個選項的位置
- --defaults-extra-file=[MY.CNF]指定了在標準defaults-file之前從哪個額外的文件讀取MySQL配置,必須在命令行的第一個選項的位置
- --default-group=GROUP-NAME這個選項接受了一個字符串參數指定讀取配置文件的group,在一機多實例的時候需要指定
- --encrypt=ENCRYPTION_ALGORITHM該選項指定了xtrabackup通過ENCRYPTION_ALGORITHM的算法加密innodb數據文件的備份拷貝,該選項直接傳遞給xtrabackup子進程
- --encrypt-key=ENCRYPTION_KEY指導xtrabackup使用了--encrypt選項時候使用ENCRYPTION_KEY這個KEY,直接傳遞給xtrabackup子進程
- --encrypt-key-file=ENCRYPTION_KEY_FILE這個選項告訴xtrabackup使用--encrypt的時候。Key存在了ENCRYPTION_KEY_FILE這個文件中
- --encrypt-chunk-size=#這個選項指定了每個加密線程內部worker buffer的大小,單位字節,直接傳遞給xtrabackup子進程
- --export=DIRECTORY這個選項直接傳遞給xtrabackup --export選項。開啟可導出單獨的表之後再導入其他Mysql中
- --extra-lsndir=DIRECTORY這個選項接受一個字符串參數指定保存額外一份xtrabackup_checkpoints文件的目錄,直接傳遞給xtrabackup --extra-lsndir選項
- --force-non-empty-directories指定該參數時候,使得innobackupex --copy-back或innobackupex --move-back選項轉移文件到非空目錄,已存在的文件不會被覆蓋,如果--copy- back和--move-back文件需要從備份目錄拷貝一個在datadir已經存在的文件,會報錯失敗
- --galera-info該選項生成了包含創建備份時候本地節點狀態的文件xtrabackup_galera_info文件,該選項只適用於備份PXC。
- --history=NAMEpercona server5.6的備份歷史記錄在percona_schema.xtrabackup_history表
- --host=HOST選項指定了TCP/IP連接的數據庫實例IP
- --ibbackup=IBBACKUP-BINARY這個選項指定了使用哪個xtrabackup二進製程序。IBBACKUP-BINARY是運行percona xtrabackup的命令,。這個選項適用於xtrbackup二進制不在你是搜索和工作目錄,如果指定了該選項,innoabackupex自動決定用的二進製程序
- --include=REGEXP正則表達式匹配表的名字[db.tb],直接傳遞給xtrabackup --tables選項。
- --incremental這個選項告訴xtrabackup創建一個增量備份,直接傳遞給xtrabakcup子進程,當這個選項指定,需要同時指定--incremental-lisn或者--incremental-basedir。如果沒有指定,默認傳給xtrabackup --incremental-basedir,值為Backup BASE目錄中的第一個時間戳目錄
- --incremental-basedir=DIRECTORY這個選項接受了一個字符串參數指定含有full backup的目錄為增量備份的base目錄,與--incremental同時使用
- --incremental-dir=DIRECTORY指定了增量備份的目錄,結合full backup生成生成一份新的full bakcup
- --incremettal-history-name=NAME這個選項指定了存儲在PERCONA_SCHEMA.xtrabackup_history基於增量備份的歷史記錄的名字。Percona Xtrabackup搜索歷史表查找最近(innodb_to_lsn)成功備份並且將to_lsn值作為增量備份啟動出事lsn.與innobackupex--incremental-history-uuid互斥。如果沒有檢測到有效的lsn,xtrabackup會返回error
- --incremetal-history-uuid=UUID這個選項指定了存儲在percona_schema.xtrabackup_history基於增量備份的特定歷史記錄的UUID
- --incremental-lsn=LSN這個選項指定增量備份的LSN,與--incremental選項一起使用
- --kill-long-queries-timeout=SECONDS這個選項指定innobackupex從開始執行FLUSH TABLES WITH READ LOCK到kill掉阻塞它的這些查詢之間等待的秒數,默認值為0.以為著Innobakcupex不會kill任何查詢,使用這個選項xtrabackup需要有Process和super權限。
- --kill-long-query-type=all|select指定kill的類型,默認是all
- --ftwrl-wait-timeout=SECONDS執行FLUSH TABLES WITH READ LOCK之前,innobackupex等待阻塞查詢執行完成等待秒數,超時的時候如果查詢仍然沒有執行完,innobackupex會終止並報錯,默認為0,innobakcupex不等待查詢完成立刻FLUSH
- --ftwrl-wait-threshold=SECONDS指定innoabckupex檢測到長查詢和innobackupex --ftwrl-wait-timeount不為0,這個長查詢可以運行的閾值,
- --ftwrl-wait-query-type=all|update指定innobakcupex獲得全局鎖之前允許那種查詢完成,默認是ALL
- --log-copy-interval=#這個選項指定了每次拷貝log線程完成檢查之間的間隔(毫秒)
- --move-back從備份目錄中將最近一份備份中的所有文件移動到datadir目錄中
- --no-lock關閉FTWRL的表鎖,只有在你所有表都是Innodb表並且你不關心backup的binlog pos點如果有任何DDL語句正在執行或者非InnoDB正在更新時(包括mysql庫下的表) ,都不應該使用這個選項,後果是導致備份數據不一致如果考慮備份因為獲得鎖失敗,,可以考慮--safe-slave-backup立刻停止複制線程
- --no-timestamp這個選項阻止在BACKUP-ROOT-DIR裡創建一個時間戳子目錄,指定了該選項的話,備份在BACKUP-ROOT-DIR完成
- --no-version-check這個選項禁用由--version-check打開的version check
- --parallel=NUMBER-OF-THREADS指定xtrabackup並行複制的子進程數。注意是文件級別並行,如果有多個ibd文件,他們會並行拷貝,如果所有的表存在一個表空間文件中,沒有任何作用。。直接傳遞給xtrabakcup --parallel選項
- --password = PASSWORD
- --port = PORT
- --rebuild-indexes與--apply-log一起用時候才有效。並且直接傳遞給xtrabackup,在apply log之後重建所有輔助索引,該選項用於Prepare緊湊備份。
- --rebuild-threads=NUMBER-OF-THREADS與--apply-log和--rebuild-index選項一起用時候才生效,重建索引的時候,xtrabacup以指定的線程數並行的處理表空間文件
- --redo-only這個選項在prepare base full backup,往其中merge增量備份(但不包括最後一個)時候使用。傳遞給xtrabackup --apply-log-only的選項。這個強制xtrabackup跳過rollback並且只重做redo
- --rsync通過rsync工具優化本地傳輸,當指定這個選項,innobackupex使用rsync拷貝非Innodb文件而替換cp,當有很多DB和表的時候會快很多。不能--stream一起使用
- --safe-slave-backup指定的時候innobackupex會在執行FLUSH TABLES WITH READ LOCK停止sql線程,並且直到show status裡slave_open_temp_tables的值為0的時候start backup,。如果沒有打開的臨時表,就開始備份,否則sql線程start或者stop直到沒有打開的臨時表,如果在innobackupex --safe-slave-backup-timeout之後slave_open_temp_tables的值仍沒有變成0備份就會失敗。SQL線程會在backup完成之後重啟。
- --safe-slave-backup-timeout=SECONDSinnobackupex --safe-slave-backup應該等多少秒等slave_open_temp_tables變成0,默認是300秒
- --scpopt=SCP-OPTIONS當--remost-host指定的時候,指定傳給scp的命令行選項。如果沒有指定,默認為-Cp -c arcfour
- --slave-info對slave進行備份的時候使用,打印出master的名字和binlog pos,同樣將這些信息以change master的命令寫入xtrabackup_slave_info文件。可以通過基於這份備份啟動一個從庫並且保存在xtrabackup_slave_info文件中的binlog pos點創建一個新的從庫
- --socket連接本地實例的時候使用
- --sshopt=SSH-OPTIONS在指定了--remost-host的時候,指定傳給ssh的命令行選項
- --stream=STREAMNAME流式備份的格式,backup完成之後以指定格式到STDOUT,目前只支持tar和xbstream。使用xbstream為percona xtrabakcup髮型版本,如果在這個選項之後指定了路徑。會理解值為tmpdir
- --tables-file=FILE指定含有表列表的文件,格式為database.table,該選項直接傳給xtrabackup's --tables-file
- --throttle=IOS指定每秒IO操作的次數,直接傳遞給xtrabackup --throttle選項。只作用於bakcup階段有效。apply-log和--copy-back不生效不要一起用
- --tmpdir=DIRECTORY指定--stream的時候,指定臨時文件存在哪裡,在streaming和拷貝到遠程server之前,事務日誌首先存在臨時文件裡。
- --use-memory=#只能和--apply-log選項一起使用,prepare a backup的時候,xtrabackup做crash recovery分配的內存大小,單位字節。也可(1MB,1M,1G,1GB),直接傳給xtrabackup --use-memory選項
- --version顯示Innobackupex版本和版權信息後退出
- --version-checkinnobackupex在與server創建連接之後的備份階段進行版本檢查
沒有留言:
張貼留言