mysql數據備份與還原

備份的不一樣分類:mysql

                熱備份、溫備份和冷備份sql

                        熱備份:讀、寫不受影響;數據庫

                        溫備份:僅能夠執行讀操做;bash

                        冷備份:離線備份;讀、寫操做均停止;服務器


                物理備份和邏輯備份ide

                        物理備份:複製數據文件;原始數據在操做系統上呈什麼樣,備份出來也是什麼樣,適用工具

                                          於比較大型、重要、出現故障時要快速恢復的場景spa

                        邏輯備份:備份sql語句,恢復的時候執行一遍備份的sql語句,較爲靈活,但恢復速度較操作系統

                                          慢,適用於小型、便於在其餘服務器上進行恢復的場景3d

                        

                徹底備份、增量備份和差別備份;

                        徹底備份:備份所有數據;

                        增量備份:僅備份上次徹底備份或增量備份之後變化的數據;

                        差別備份:僅備份上次徹底備份以來變化的數據;


備份工具:

    一、經過複製對象相關文件的方式建立備份

        通常適用於myisam引擎表,只要將.frm、.MYD、.MYI這些文件複製保存就至關於進行了備份

        步驟:

    mysql>FLUSH TABLES tb_name WITH READ LOCK    #備份前對錶進行只讀鎖定
    [root@localhost /]cp /the/path/to/data /the/path/to/backup
    mysql>UNLOCK TABLES         #釋放鎖

        這種備份方法不適用於Innodb表,當innodb_file_per_table設置爲1時,複製表對象的相關文件.ibd不能達到備份的目的,由於表結構、所屬數據庫等信息仍存在於Innodb的系統表空間中。


    二、使用sql語句進行備份

mysql>SELECT * INTO OUTFILE '/path/to/somefile.txt' FROM tb_name [WHERE clause];

    三、使用mysqldump進行邏輯備份

        備份單個數據庫/表

mysqldump -uUSERNAME -p PASSWORD db_name [tb_name]> /path/to/backup/db_name.sql

        備份多個數據庫

mysqldump -uUSERNAME -p PASSWORD --databases db1 db2 > /path/to/backup/db1_db2.sql

        使用--tab輸出txt文件和sql文件,將數據和建表語句分開

mysqldump -uUSERNAME -p PASSWORD --tab=/path/to/backup db_name [tb_name]    #將數據庫的所有對象或特定的表導出到backup目錄下

    例1:備份數據庫jiaowu下的tutors表

wKiom1fJA7LyU_inAAARD41U0nk403.png

    查看/tmp/test2目錄

wKioL1fJA-7RV0BpAAAO0JkSAkA914.png

    例2:備份整個數據庫

wKioL1fI74-T-TF-AAAPbIOlE0g940.png

    而後查看/tmp/test目錄

wKiom1fI8m2zvQDyAAAKQs06oso347.png

    能夠發現,數據庫中的每張表都生成兩個同名文件,.txt存儲表中的實際數據,.sql存儲的是sql語句(建表語句)

    查看一下tutors.txt這個文件

wKiom1fI8waxgoHsAAA0jxQRuhg530.png

能夠看到,每條記錄輸出到一行上,列值之間用tab符隔開,若是但願本身能自定義輸出的格式,可使用下面的選項

--fields-terminated-by=','

列值之間用逗號隔開

--fields-enclosed-by='"' 列值使用雙引號引發來
--lines-terminated-by=‘\' 指定\爲行結束符,默認爲換行符

wKiom1fJABXB-vjyAAATPV39slg540.png

wKiom1fJAGnjlSWfAAA5IuZv7jA054.png

能夠看到,導出的tutors.txt列值之間以逗號分開,並使用雙引號引住,這樣能夠方便之後數據導入回數據庫中


注意要點:

    當mysqldump沒有使用--tab時,其導出的sql文件中既有操做語句又有建表語句;當使用--tab時,其中txt文件保存數據,sql文件僅有建表語句。


數據庫的還原

  一、mysqldump沒使用--tab選項    

mysql>use db_name
mysql>source /path/to/backup/tb.sql     #這樣便可導入

   二、mysqldump使用--tab選項    

    一、使用.sql文件將表建立好

    mysql -uUSERNAME -p PASSWORD db_name < /path/to/backup/tb.sql

wKiom1fJEAqDAxDvAAAQjb3NCu4425.png

    二、在數據庫中經過LOAD DATA INFILE語句來導入.txt文件到表中

mysql>LOAD DATA INFILE '/path/to/tb.txt' INTO TABLE tb_name [參數]

wKioL1fJE6uQUjiMAAAUaOzW5bs198.png


建立冷備份

    一、查看正在使用的二進制日誌

mysql>show master status;

wKiom1fJF6GRExYRAAAclYHZ4gs434.png

    二、進行二進制日誌滾動

mysql>flush logs

   wKiom1fJF8riqIghAAA1WM1twUI715.png

 三、關閉mysql,備份數據目錄,開啓mysql便可


建立增量備份

    一、進行二進制日誌滾動

    二、使用mysqlbinlog進行備份

mysqlbinlog /path/to/binlog/mysql-bin.0000xx > /path/to/backup/0000xx.sql

    (恢復時能夠直接source或mysql命令(上面還原時有講到))

    說白了增量備份就是使用mysqlbinlog將上次備份後新生成的二進制日誌備份到指定目錄

相關文章
相關標籤/搜索