mysql ---- innodb-4-备份和恢复
8 備份和恢復
8.1 概述
分類:(根據備份方法、備份后的文件、備份數據庫的內容分類)
備份的方法:
備份后的文件分類:
邏輯備份
指備份后的文件內容是可讀的,通常是文本文件,內容一般是 sql 語句,或者是表內實際的數據
如:mysqldump 和SELECT * INTO OUTFILE的方法
裸文件備份
指拷貝數據庫的物理文件(數據庫可以在運行狀態(需要工具),也可以停止)
備份數據庫的內容分類:
8.2 冷備
冷備非常簡單,只需要備份mysql數據庫的 frm 文件、共享表空間文件、獨立表空間文件(*.ibd)、重做日志文件(也可以加上 my.cnf 文件)
優點:
缺點:
8.3 邏輯備份
8.3.1 mysqldump
語法:
mysqldump [arguments] > file_name;# 備份所有數據庫 mysqldump --all-databases > dump.sql;# 備份指定數據庫 mysqldump --databases db1 db2 > dump.sql;# 對 test 這個架構備份 (--single-transaction 用來保證數據的一致性,用于引擎為 Innodb 的) mysqldump --single-transaction test > test_backup.sql;一些重要的參數:
8.3.2 SELECT ... INTO OUTFILE
該語句也是邏輯備份的方法,將一張表中的數據導出。
SELECT [column 1],[column 2] ... INTO OUTFILE 'file_name' [{fields|columns} --- 列[TERMINATED BY 'string'] ---每個列的分隔符[[OPTIONALLY] ENCLOSED BY 'char'] ---對于字符串的包含符[ESCAPED BY 'char'] --- 轉義符 ] [LINES --- 行[STARTING BY 'string'] --- 每行開始符號[TERMINATED BY 'string'] --- 每行的結束符號 ] FROM TABLE WEHRE ....;-- 如果上述參數沒有指定,則默認以下參數: -- FIELDS TERMINATED BY '\\t' ENCLOSED BY '' ESCAPED BY '\\' -- LINES TERMINATED BY '\n' STARTING BY ''-- select * into outfile '/root/a.txt' from a; -- 默認分隔符8.3.3 邏輯備份的恢復
mysqldump 恢復操作比較簡單,因為都是 sql 語句,因此直接執行這個文件就可以了
# mysql -uroot -p < test_backup.sql或者
-- 通過 source 命令恢復 > mysql source /home/test_backup.sqlmysqldump 可以恢復數據庫,可以導出存儲過程、觸發器、時間、數據,但是不能導出視圖,因此對于存在視圖的,需要單獨處理(1.導出視圖定義;2。保存視圖定義的 frm 文件)
8.3.4 LOAD DATA INFILE
若是通過 mysqldump 或者 SELECT ... INTO OUTFILE 導出的數據需要恢復時,可以通過 LOAD DATA INFILE命令進行導入
load data infile '/home/a.sql' into table a; --通常為了加快導入,忽略外鍵的檢查set @@foreign_key_checks=0; load data infile '/home/a.sql' into table a; set @@foreign_key_checks=1;8.3.5 mysqlimport
mysqlimport 是 MysqL 數據庫提供的一個命令程序,本質上還是 LOAD DATA INFILE命令。
-- 使用兩個線程,導入兩個文件 mysqlimport --use-threads=2 test /home/t.txt /home/a.txt8.4 二進制日志備份和恢復
二進制日志非常關鍵,可以用它來完成 point-in-time(時間點)恢復工作。mysql 數據庫的復制也需要二進制日志。默認情況下不會開啟二進制日志,通常設置如下:
[mysqld] log-bin sync-binlog=1 innodb_support_xa=1備份二進制日志文件前,可以通過 FLUSH LOGS 命令來生成一個新的二進制日志文件,然后備份之前的二進制日志文件
使用方法:
mysqlbinlog [options] log_file ... # 還原 mysqlbinlog binlog.000001 | mysql -uroot -p test # 恢復多個二進制日志文件 mysqlbinlog binglog.[0-10]* | mysql -uroot -p test# 也可以先通過 mysqlbinlog 導出一個文件,然后在通過 source 導入(好處:能夠對文件進行修改) mysqlbinlog binlog.00001 > /tmp/statements.sql mysqlbinlog binlog.00002 >> /tmp/statements.sql mysql -uroot -p -e "source /tmp/statements.sql" # -e execute 執行 sql8.5 熱備
8.5.1 ibbackup
收費
8.5.2 XtraBackup
# 完備 ./xtrabackup --backup8.5.3 XtraBackup增量備份
原理:
8.7 復制
8.7.1 原理
復制步驟:
從服務器有兩個線程:一個是 IO 線程,負責讀取主服務器的二進制日志,并將其保存為中繼日志;另一個是 sql 線程,復制執行中繼日志。
查看主從服務器的狀態:SHOW SLAVE STATUS 、SHOW MASTER STATUS。
總結
以上是生活随笔為你收集整理的mysql ---- innodb-4-备份和恢复的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql ---- innodb-3-
- 下一篇: 【ML】Principle Compon