物理備份與邏輯備份


  1. 物理備份和恢復:
    物理備份分爲熱備和冷備份,較邏輯備份,物理備份的備份和恢復的速度快,原理基於cp命令。
    冷備:備份MySQL數據庫的共享表空間、.frm、獨立表空間(.ibd)、重做日誌文件。

    • 優點:備份簡單、恢復簡單、備份的速度快
    • 缺點:不是那麼的容易跨平臺、備份的文件比較大
    • 冷備份的備份步驟:停掉MySQL服務,在操作系統級別備份MySQL的數據文件和日誌文件到備份目錄
    • 冷備份的恢復步驟:停掉MySQL服務,在操作系統級別恢復MySQL的數據文件,然後重啓MySQL服務,使用mysqlbinlog
  2. 邏輯備份:
    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的用法在下面的文章中記錄

今天衡陽陰天。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章