數據庫備份
- 數據庫複製不能取代備份的作用
- 備份分類:
- 備份內容:
- 邏輯備份:結果爲SQL語句,適用於所有存儲引擎
- 物理備份:對數據庫目錄的靠背,對於內存表只備份結構
- 備份方式:
- 全量備份:整個數據庫的完整備份
- 增量備份:在上一次備份基礎上,對更改數據進行備份。mysqldump不支持這種
- 備份內容:
mysqldump全備介紹
- mysqldump備份
mysqldump database [tables]
mysqldump --database DB1 [DB2]
mysqldump --all-databases
- 常用參數
- -u
- 賬戶具備的權限SELECT, RELOAD, LOCK TABLES, REPLICATION CLIENT, SHOW VIEW, PROCESS
- -p
- --single-transaction 開啓事務來操作,innodb推薦用這個
- -l 依次鎖表,一般myisam用。備份時鎖住一個數據庫下的表。如果混合引擎的表也用這個參數,和
--single-transaction
互斥。只能保持一個db下的一致 - -x,鎖所有db的所有表
- --master-data=[1或2] 時間恢復和新的slave實例用。1把change master to被記錄,2則是把1放在註釋裏,配合
--single-transaction
一起指定 - -R 備份存儲過程
- --triggers 觸發器
- -E 備份調度事件
- --hex-blob 把數據文本變成hex格式
- --tab=path 指定路徑下,生成表結構和表數據兩個文件
- -w='過濾條件',單表導出用
- -u
mysqldump恢復
- bash:
mysql -u -p dbname < backup.sql
- mysql client:
mysql> source /tmp/backup.sql
指定時間點的恢復
先決條件
- 具有指定時間點前的一個全備
- 具備自上次全備後到指定時間點的所有“二進制日誌”(相當於重複操作從備份時間點的到現在的數據庫操作)
步驟:
- 還原某個時間點的全備
mysql -uroot -p mc_orderdb < mc_order_backup.sql
- 查找全備時開始的mysql-bin的log操作的日誌點(change master那行)
- 查看最近的誤操作mysql-bin的log的日誌點
mysqlbinlog --start-position=84882 --stop-position=169348 --database=mc_orderdb > mc_order_diff.sql
mysql -uroot -p mc_orderdb < mc_order_diff.sql
實時備份binlog
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'ip' IDENTIFIED BY 'xxxxxx'
mkdir -p binlog_backup
mysqlbinlog --raw --read-from-remote-server --stop-never --host localhost --port 3306 -u repl -p xxxxxx 二進制日誌名
xtrabackup備份和恢復
- xtrabackup用於在線備份innodb存儲引擎的表
- 只會備份數據文件,不會備份表結構
- innobackupex是對extrabackup的封裝並提供MyISAM表的備份功能
- innobackupex是Xtrabackup的插件支持MyISAM備份,但也會鎖表
全備和恢復
全備
innobackupex --user=root --password=pwd --parallel=2 /home/db_backup/
備份恢復
innobackupex --apply-log /path/to/BACKUP-DIR
增量備份和恢復
- 增量備份
innobackupex --user=root --password=pwd --incremental /home/db_backup/ --incremental-basedir=/home/db_backup/back-dir
參數--incremental-basedir
上一次全備的文件夾 - 增量備份恢復
innobackupex --apply-log --redo-only 全備目錄
innobackupex --apply-log --redo-only 全備目錄 --incremental-dir=第一次增量目錄
innobackupex --apply-log 全備目錄
-
mv /path/to/BACKUP-DIR /home/mysql/data
恢復後的數據直接替換原本的 - 記得改變屬於的用戶chmod
制定備份計劃
- 每天凌晨對數據庫進行一次全備
- 實時對二進制日誌進行遠程備份
- 使用linux定時任務:crontab
參考
- 高性能可擴展MySQL數據庫設計及架構優化 電商項目,sqlercn,https://coding.imooc.com/class/79.html
關於我:
linxinzhe,全棧工程師,目前供職於某世界500強銀行的金融科技部門(人工智能,區塊鏈)。
GitHub:https://github.com/linxinzhe
歡迎留言討論,也歡迎關注我~
我也會關注你的哦!