1. 程式人生 > >MySQL 8.0.11 innodb cluster 運維管理手冊之四-msyqlbackup備份

MySQL 8.0.11 innodb cluster 運維管理手冊之四-msyqlbackup備份

安裝 目錄 沒有 host .cn directory eba history 全局

MySQL 8.0.11 innodb cluster 運維管理手冊之四-msyqlbackup備份

作者 方連超

Mysqlbackup 介紹

mysqlbackup是一個熱備份工具、也就是說它不像mysqldump那樣給表上一個全局鎖,由於mysqldump上了這個鎖,所以就造成客戶端只能對數據庫進行讀操作不能寫,這也就是稱mysqldump為溫備份的原因。但是mysqlbackup真的有這麽吊嗎?答案是並沒有。對於innodb引擎的表mysqlbackup 熱備的;但是對於非innodb表mysqlbackup就只能溫備了,原因是這類引擎不支持事務也就是說不能通過事務日誌來保證備份的一致性,所以就只能給表加上一個全局鎖來解決了。為了得到一致的備份mysqlbackup要不停的去追蹤mysql數據庫的sln號,也就是說mysqlbackup要執行備份那麽它一定要連接上數據庫。mysqlbackup對數據庫的備份是通過復制文件的方式進行的,也就是說mysqlbackup要和數據庫在同一臺機器上,和xtrabackup 很相似的。

安裝 mysqlbackup

Mysqlbackup 是企業版mysql中的,但可以拿來使用,登錄oracle雲下載,搜索mysql backup,下載二進制文件
mysql-commercial-backup-8.0.11-linux-glibc2.12-x86_64.tar.gz
傳到主機上並解壓,
會有 bin 和lib 文件夾,將其中的文件拷貝到 /usr/local/mysql 對應的目錄中, 這裏要把 軟連接,庫全部拷貝的,不然會報錯

備份用戶

(官方指導命令)

CREATE USER ‘backup‘@‘localhost‘ IDENTIFIED BY ‘$$$$$$$$$$$$$$‘;
GRANT RELOAD ON *.* TO ‘backup‘@‘localhost‘;
GRANT CREATE, INSERT, DROP, UPDATE ON mysql.backup_progress TO ‘backup‘@‘localhost‘;
GRANT CREATE, INSERT, SELECT, DROP, UPDATE ON mysql.backup_history TO ‘backup‘@‘localhost‘;
GRANT REPLICATION CLIENT ON *.* TO ‘backup‘@‘localhost‘;
GRANT SUPER ON *.* TO ‘backup‘@‘localhost‘;
GRANT PROCESS ON *.* TO ‘backup‘@‘localhost‘;
GRANT ALTER ON mysql.backup_history TO ‘backup‘@‘localhost‘;  #此表在主庫上備份才會生成和寫入
GRANT LOCK TABLES, SELECT, CREATE, DROP, FILE ON *.* TO ‘backup‘@‘localhost‘;
GRANT CREATE, INSERT, DROP, UPDATE ON mysql.backup_sbt_history TO ‘backup‘@‘localhost‘;#此表僅在主庫上有效

全量備份

##備份到/fullbak/2018-10-10_19-19-11/datadir 類似這樣的目錄中
mysqlbackup --backup-dir=/data/backup/fullbak --host=127.0.0.1 --port=3306 --user=backup --password=$$$$$$$$ --with-timestamp backup
##############備份到/fullbak/2018-10-10_19-19-11/full_backup.bki 這樣一個單文件中,以後不用備份單文件,我們自己壓縮備份更小
mysqlbackup --backup-dir=/data/backup/fullbak --host=127.0.0.1 --port=3306 --user=backup --password=$$$$$$$$$$$ --backup-image=full_backup.bki  --with-timestamp backup-to-image

    --user:用戶名。
    --password:密碼。
    --port:端口,默認值為3306。
    --backup-dir:可以看成是mysqlback的工作目錄,臨時用的。
    --backup-image:備份文件名,這個是最終要的文件,別的都可以不要。位置可以不帶路徑,默認放到 backup-dir
    backup-to-image:把所有的備份信息輸出到一個備份文件當中
--with-timepstap: 會自動生成一個帶日期文件夾,這裏放的是備份時用的臨時文件和最後的備份鏡像(不指定鏡像位置的化)

增量備份

實際證明,單文件備份是無法進行恢復的,下面這個例子放棄
mysqlbackup --backup-dir=/data/backup --host=127.0.0.1 --port=3306 --user=backup --password=Qs3ce3saadr37tpP --incremental-with-redo-log-only --incremental-base=history:last_backup --with-timestamp --backup-image=incre_backup.bki backup-to-image

不備份成單個文件,增量備份貌似也不支持,這個是可以進行恢復的 指定了備份到的增量目錄和增量的基源

mysqlbackup --incremental-backup-dir=/data/backup/increbak --host=127.0.0.1 --port=3306 --user=backup --password=Qs3ce3saadr37tpP --incremental  --incremental-base=history:last_backup --with-timestamp   --backup-image=incre_backup.bki backup

一定要先執行上面的全備, last_backup 這個備份參數會在數據庫中找,然而,這個備份要在主庫進行,不能再從庫,因為從庫不寫備份信息。

跨主機遠程備份

#########備份到其他服務器
The following command streams the backup as a single-file output to a remote host to be saved under
the file name my_backup.img (--backup-dir=/tmp designates the directory for storing temporary files
rather than the final output file):

mysqlbackup --defaults-file=~/my_backup.cnf --backup-image=- --backup-dir=/tmp backup-to-image | \
ssh <user name>@<remote host name> ‘cat > ~/backups/my_backup.img‘

MySQL 8.0.11 innodb cluster 運維管理手冊之四-msyqlbackup備份