物理備份和恢復:
物理備份分爲熱備和冷備份,較邏輯備份,物理備份的備份和恢復的速度快,原理基於cp命令。
冷備:備份MySQL數據庫的共享表空間、.frm、獨立表空間(.ibd)、重做日誌文件。- 優點:備份簡單、恢復簡單、備份的速度快
- 缺點:不是那麼的容易跨平臺、備份的文件比較大
- 冷備份的備份步驟:停掉MySQL服務,在操作系統級別備份MySQL的數據文件和日誌文件到備份目錄
- 冷備份的恢復步驟:停掉MySQL服務,在操作系統級別恢復MySQL的數據文件,然後重啓MySQL服務,使用mysqlbinlog
邏輯備份:
a. mysqldump備份:
語法:mysqldump [arguments] >file_name
mysqldump -uuser -p --all-databases >file_name.sql #備份所有的數據庫
mysqldump -uuser -p --databases db1 db2 db3 >file_name.sql #備份數據庫db1,db2,db3
mysqldump -uuser -p --single-transaction test > file_name.sql #保證一致性的情況下備份test架構
#一致性備份在備份開始時開啓一個事務,這個樣可以達到不鎖表鎖庫的情況下進行備份,如果不加--single-transaction的話備份就會鎖庫鎖表
mysqldump -uuser -p --where='a<100' --single-transaction Nums Nums >file.sql #備份Nums架構下的Nums中a字段小於100的
mysqldump -uuser -p --single-transaction sakila --tab="/var/lib/mysql-files" #以csv的格式備份sakila數據庫到/var/lib/mysql-files目錄
b. select ... into outfile
語法:select column1,column2 ... into outfile 'file_name' where condition from table ;
fields
terminated by '\t' :表示每個字段的間隔符
enclosed by '' :表示對於字符串的包含符
escaped by '\\' :表示轉義字符
lines
starting by '' :表示行開始符號
terminated by '\n' :表示行結束符號
例如:
select * into outfile '/var/lib/mysql-files/city.txt' fields terminated by '\t' enclosed by '' escaped by '\\' lines starting by '' terminated by '\n' from city limit 10;
要求:
文件所在路徑的權限必須是mysql:mysql
該文件不能已經存在
mysqldump 和select ... into outfile的區別:
mysqldump可以一次備份多個表且保證數據的一致性而select into outfile只能一次備份一個表,且不能保證數據的一致性
mysqldump的導入:
source 文件路徑+文件名
load data infile :
語法:load data infile '文件路徑+文件名' into table table_name;
例如:
set @@foreign_key_checks=0; #關閉外鍵檢查
load data infile '/var/lib/mysql-files/city.txt' into table city;
set @@foreign_key_checks=1; #開啓外鍵檢查
#在load data infile前關閉外鍵檢查,可以提高導入數據的效率
mysqlimport 工具:
語法:mysqlimport -uuser -p [參數] file_name
mysqlimport -uuser -p --use-threads /var/lib/mysql-files/t.txt /var/lib/mysql-files/city.txt
mysqlimport和load data infile的聯繫和區別:
mysqlimport 是load data infile的接口,由一個或者多個load data infile 組成,也就是說load data infile一次只能導入一張表,但是mysqlimport可以導入一張或者多張表
二進制日誌備份和恢復:
備份日誌步驟:
1.flush logs; #刷新日誌
2.備份之前的日誌
#恢復日誌的方式:
mysqlbinlog lzg-Lenovo-G40-70m-bin.000001 |mysql -uuser -p db_name
#可以同時恢復兩個日誌,效率更高:
mysqlbinlog lzg-Lenovo-G40-70m-bin.000001 lzg-Lenovo-G40-70m-bin.000002|mysql -uuser -p db_name
mysqlbinlog的參數:
--start-position :開始位置
--stop-position :結束位置
--start-datetime :開始時間
--stop-datetime :結束時間
有一點不解:
就是刪了一張表中的數據是可以恢復的,但是刪除一個表就不能恢復
解jue:後來百度了一下解決了,原因是二進制恢復分爲完全恢復、基於時間點的恢復和基於位置點的恢復。對於有刪表操作的恢復,日誌中保存有刪表的sql語句,所以我們要基於時間或者位置點進行恢復點
mysqlbinlog --start-position=560 --stop-position=650 lzg-Lenovo-G40-70m-bin.000001 | mysql -uuser -p
mysqlbinlog --start-datetime="2017-07-10 08:00:00" --stop-datetime="2017-07-10 09:00:00" lzg-Lenovo-G40-70m-bin.000001 | mysql -uuser -p
xtrabackup的用法在下面的文章中記錄
今天衡陽陰天。。