Linux 命令基礎 命令基礎格式 command [-options] [parameter] command:命令本身 -options:[可選,非必填]命令的一些選項,可以通過選項控制命令的行為細節 parameter:[可選,非必填]命令的參數,多數用於命令的指向目標等 示例: ls -l ...
一、備份類型
完全備份,部分備份 完全備份:整個數據集 部分備份:只備份數據子集,如部分庫或表 完全備份、增量備份、差異備份 增量備份:僅備份最近一次完全備份或增量備份(如果存在增量)以來變化的數據,備份較快,還原複雜 差異備份:僅備份最近一次完全備份以來變化的數據,備份較慢,還原簡單 冷、溫、熱備份 冷備:讀、寫操作均不可進行,資料庫停止服務 溫備:讀操作可執行;但寫操作不可執行 熱備:讀、寫操作均可執行 物理和邏輯備份 物理備份:直接複製數據文件進行備份,與存儲引擎有關,占用較多的空間,速度快 邏輯備份:從資料庫中"導出"數據另存而進行的備份,與存儲引擎無關,占用空間少,速度慢,可能丟失精度 1、備份什麼 數據 二進位日誌、InnoDB的事務日誌 用戶帳號,許可權設置,程式代碼(存儲過程、函數、觸發器、事件調度器) 伺服器的配置文件 2、備份工具 cp, tar等複製歸檔工具:物理備份工具,適用所有存儲引擎;只支持冷備;完全和部分備份 LVM的快照:先加讀鎖,做快照後解鎖,幾乎熱備;藉助文件系統工具進行備份 mysqldump:邏輯備份工具,適用所有存儲引擎,對MyISAM存儲引擎進行溫備;支持完全或部 分備份;對InnoDB存儲引擎支持熱備,結合binlog的增量備份 xtrabackup:由Percona提供支持對InnoDB做熱備(物理備份)的工具,支持完全備份、增量備份 MariaDB Backup: 從MariaDB 10.1.26開始集成,基於Percona XtraBackup 2.3.8實現 mysqlbackup:熱備份, MySQL Enterprise Edition 組件 mysqlhotcopy:PERL 語言實現,幾乎冷備,僅適用於MyISAM存儲引擎,使用LOCK TABLES、 FLUSH TABLES和cp或scp來快速備份資料庫 二、mysqldump 備份工具1、mysqldump 說明
邏輯備份工具: mysqldump, mydumper, phpMyAdmin Schema和數據存儲在一起、巨大的SQL語句、單個巨大的備份文件 mysqldump是MySQL的客戶端命令,通過mysql協議連接至mysql伺服器進行備份 命令格式:mysqldump [OPTIONS] database [tables] #支持指定資料庫和指定多表的備份,但資料庫本身定義不備份 mysqldump [OPTIONS] -B DB1 [DB2 DB3...] #支持指定資料庫備份,包含資料庫本身定義也會備份 mysqldump [OPTIONS] -A [OPTIONS] #備份所有資料庫,包含資料庫本身定義也會備份
2、mysqldump 常見通用選項:
-u, --user=name User for login if not current user -p, --password[=name] Password to use when connecting to server -A, --all-databases #備份所有資料庫,含create database -B, --databases db_name… #指定備份的資料庫,包括create database語句 -E, --events:#備份相關的所有event scheduler -R, --routines:#備份所有存儲過程和自定義函數 --triggers:#備份表相關觸發器,預設啟用,用--skip-triggers,不備份觸發器 --default-character-set=utf8 #指定字元集 --master-data[=#]:#註意:MySQL8.0.26版以後,此選項變為--source-data #此選項須啟用二進位日誌 #1:所備份的數據之前加一條記錄為CHANGE MASTER TO語句,非註釋,不指定#,預設為1,適合於主從復 制多機使用 #2:記錄為被註釋的#CHANGE MASTER TO語句,適合於單機使用,適用於備份還原 #此選項會自動關閉--lock-tables功能,自動打開-x | --lock-all-tables功能(除非開啟-- single-transaction) -F, --flush-logs #備份前滾動日誌,鎖定表完成後,執行flush logs命令,生成新的二進位日誌文件,配合-A 或 -B 選項時,會導致刷新多次資料庫。建議在同一時刻執行轉儲和日誌刷新,可通過和-- single-transaction或-x,--master-data 一起使用實現,此時只刷新一次二進位日誌 --compact #去掉註釋,適合調試,節約備份占用的空間,生產不使用 -d, --no-data #只備份表結構,不備份數據,即只備份create table -t, --no-create-info #只備份數據,不備份表結構,即不備份create table -n,--no-create-db #不備份create database,可被-A或-B覆蓋 --flush-privileges #備份mysql或相關時需要使用 -f, --force #忽略SQL錯誤,繼續執行 --hex-blob #使用十六進位符號轉儲二進位列,當有包括BINARY,VARBINARY,BLOB,BIT的數據類型的列時使用,避免亂碼 -q, --quick #不緩存查詢,直接輸出,加快備份速度
mysqldump的MyISAM存儲引擎相關的備份選項:
MyISAM不支持事務,只能支持溫備;不支持熱備,所以必須先鎖定要備份的庫,而後啟動備份操作-x,--lock-all-tables #加全局讀鎖,鎖定所有庫的所有表,同時加--single-transaction或--lock-tables選項會關閉此選項功能,註意:數據量大時,可能會導致長時間無法併發訪問資料庫 -l,--lock-tables #對於需要備份的每個資料庫,在啟動備份之前分別鎖定其所有表,預設為on,--skip-lock-tables選項可禁用,對備份MyISAM的多個庫,可能會造成數據不一致 #註:以上選項對InnoDB表一樣生效,實現溫備,但不推薦使用mysqldump的InnoDB存儲引擎相關的備份選項: InnoDB 存儲引擎支持事務,可以利用事務的相應的隔離級別,實現熱備,也可以實現溫備但不建議用
--single-transaction #此選項Innodb中推薦使用,不適用MyISAM,此選項會開始備份前,先執行START TRANSACTION指令開啟事務 #此選項通過在單個事務中轉儲所有表來創建一致的快照。 僅適用於存儲在支持多版本控制的存儲引擎中的表(目前只有InnoDB可以); 轉儲不保證與其他存儲引擎保持一致。 在進行單事務轉儲時,要確保有效的轉儲 文件(正確的表內容和二進位日誌位置),沒有其他連接應該使用以下語句:ALTER TABLE,DROP TABLE,RENAME TABLE,TRUNCATE TABLE,此選項和--lock-tables(此選項隱含提交掛起的事務)選 項是相互排斥,備份大型表時,建議將--single-transaction選項和--quick結合一起使用
3、生產環境實戰備份策略
InnoDB建議備份策略mysqldump -uroot -p123456 -A -F -E -R --triggers --single-transaction --masterdata=2 --flush-privileges --default-character-set=utf8 --hex-blob >${BACKUP}/fullbak_${BACKUP_TIME}.sql #新版8.0.26以上 mysqldump -uroot -p123456 -A -F -E -R --triggers --single-transaction --sourcedata=2 --flush-privileges --default-character-set=utf8 --hex-blob >${BACKUP}/fullbak_${BACKUP_TIME}.sq
4、特定資料庫的備份腳本
[root@centos8 ~]#cat mysql_backup.sh #!/bin/bash TIME=`date +%F_%H-%M-%S` DIR=/backup DB=hellodb PASS=magedu [ -d $DIR ] || mkdir $DIR mysqldump -uroot -p "$PASS" -F -E -R --triggers --single-transaction --masterdata=2 --default-character-set=utf8 -q -B $DB | gzip > ${DIR}/${DB}_${TIME}.sql.gz
5、分庫備份並壓縮
6、分庫備份的實戰腳本
[root@centos8 ~]#cat backup_db.sh #!/bin/bash TIME=`date +%F_%H-%M-%S` DIR=/backup PASS=magedu [ -d "$DIR" ] || mkdir $DIR for DB in `mysql -uroot -p "$PASS" -e 'show databases' | grep -Ewv "^Database|.*schema$"`;do mysqldump -F --single-transaction --master-data=2 --default-characterset=utf8 -q -B $DB | gzip > ${DIR}/${DB}_${TIME}.sql.gz done
7、利用二進位日誌,還原資料庫最新狀態
#二進位日誌獨立存放 [mysqld] log-bin=/data/mysql/mysql-bin #完全備份,並記錄備份的二進位位置 mysqldump -uroot -pmagedu -A -F --default-character-set=utf8 --singletransaction --master-data=2 | gzip > /backup/all_`date +%F`.sql.gz #修改資料庫 insert students (name,age,gender)value('mage',20,'M'); insert students (name,age,gender)value('wang',22,'M'); #損壞資料庫 rm -rf /var/lib/mysql/* #還原 cd /backup gzip -d all_2019-11-25.sql.gz #CentOS 8 需要事先生成資料庫相關文件,CentOS7 不需要執行此步 mysql_install_db --user=mysql
8、mysqldump 和二進位日誌結合實現差異(增量)備份
[root@centos8 ~]#mysqldump -uroot -p -A -F --single-transaction --master-data=2 |gzip > /backup/all-`date +%F`.sql.gz #觀察上面備份文件中記錄的二進位文件和位置,定期將其之後生成的所有二進位日誌進行複製備份 [root@centos8 ~]#cp /var/lib/mysql/mariadb-bin.000003 /backup #假設mariadbbin.000003是後續生成的二進位日誌 [root@centos8 ~]#mysqlbinlog backup/mariadb-bin.000003 > /backup/inc.sql
三、xtrabackup 備份工具
1、xtrabackup 工具介紹
Percona 公司 官網:www.percona.com percona-server InnoDB --> XtraDB Xtrabackup備份工具 percona提供的mysql資料庫備份工具,惟一開源的能夠對innodb和xtradb資料庫進行熱備的工具 手冊:https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html 下載: https://www.percona.com/downloads/ xtrabackup 特點: 備份還原過程快速、可靠 備份過程不會打斷正在執行的事務 能夠基於壓縮等功能節約磁碟空間和流量 自動實現備份檢驗 開源,免費 xtrabackup工具文件組成 Xtrabackup2.2 版之前包括4個可執行文件: innobackupex: Perl 腳本 xtrabackup: C/C++,編譯的二進位程式 xbcrypt: 加解密 xbstream: 支持併發寫的流文件格式 說明: xtrabackup 是用來備份 InnoDB 表的,不能備份非 InnoDB 表,和 MySQL Server 沒有交互innobackupex 腳本用來備份非 InnoDB 表,同時會調用 xtrabackup 命令來備份 InnoDB 表,還會和MySQL Server 發送命令進行交互,如加全局讀鎖(FTWRL)、獲取位點(SHOW SLAVE STATUS)等。即innobackupex是在 xtrabackup 之上做了一層封裝實現的 備份過程:備份生成的相關文件 使用innobackupex備份時,其會調用xtrabackup備份所有的InnoDB表,複製所有關於表結構定義的相關文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相關文件,同時還會備份觸發器和資料庫配置信息相關的文件。這些文件會被保存至一個以時間命名的目錄中,在備份時,innobackupex還會在備份目錄中創建如下文件: xtrabackup_info:文本文件,innobackupex工具執行時的相關信息,包括版本,備份選項,備份時長,備份LSN(log sequence number日誌序列號),BINLOG的位置 xtrabackup_checkpoints:文本文件,備份類型(如完全或增量)、備份狀態(如是否已經為prepared狀態)和LSN範圍信息,每個InnoDB頁(通常為16k大小)都會包含一個日誌序列號LSN。 LSN是整個資料庫系統的系統版本號,每個頁面相關的LSN能夠表明此頁面最近是如何發生改變的xtrabackup_binlog_info:文本文件,MySQL伺服器當前正在使用的二進位日誌文件及至備份這一刻為止二進位日誌事件的位置,可利用實現基於binlog的恢復 backup-my.cnf:文本文件,備份命令用到的配置選項信息 xtrabackup_logfile:備份生成的二進位日誌文件 2、xtrabackup 安裝 在EPEL源中
yum install percona-xtrabackup
3、xtrabackup 用法
xtrabackup工具備份和還原,需要三步實現 1. 備份:對資料庫做完全或增量備份 2. 預準備: 還原前,先對備份的數據,整理至一個臨時目錄 3. 還原:將整理好的數據,複製回資料庫目錄中 xtrabackup 選項參考: https://www.percona.com/doc/percona-xtrabackup/LATEST/genindex.html 備份:innobackupex [option] BACKUP-ROOT-DIR
Prepare預準備:
innobackupex --apply-log [option] BACKUP-DIR選項說明:
--apply-log:#一般情況下,在備份完成後,數據尚且不能用於恢復操作,因為備份的數據中可能會包含尚 未提交的事務或已經提交但尚未同步至數據文件中的事務。因此,此時數據文件仍處理不一致狀態。此選項作 用是通過回滾未提交的事務及同步已經提交的事務至數據文件使數據文件處於一致性狀態 --use-memory:#和--apply-log選項一起使用,當prepare 備份時,做crash recovery分配的記憶體 大小,單位位元組,也可1MB,1M,1G,1GB等,推薦1G --export:#表示開啟可導出單獨的表之後再導入其他Mysql中 --redo-only:#此選項在prepare base full backup,往其中合併增量備份時候使用,但不包括對最 後一個增量備份的合併還原:
innobackupex --copy-back [選項] BACKUP-DIR innobackupex --move-back [選項] [--defaults-group=GROUP-NAME] BACKUP-DIR選項說明:
還原註意事項:
1. datadir 目錄必須為空。除非指定innobackupex --force-non-empty-directorires選項指定,否則--copy-back選項不會覆蓋 2. 在restore之前,必須shutdown MySQL實例,不能將一個運行中的實例restore到datadir目錄中 3. 由於文件屬性會被保留,大部分情況下需要在啟動實例之前將文件的屬主改為mysql,這些文件將屬於創建備份的用戶, 執行chown -R mysql:mysql /data/mysql,以上需要在用戶調用innobackupex之前完成4、利用 xtrabackup 實現完全備份及還原
5、利用xtrabackup8.0 完全,增量備份及還原MySQL8.0
6、xtrabackup單表導出和導入