基於mysqldump及lvm snapshot備份mysql數據庫

mysql備份類型主要有一下三種:

        熱備份:備份時服務照常在線,讀寫都不受影響;
        溫備份:備份時僅可進行讀操作,需要申請鎖;
        冷備份:也叫離線備份,讀寫操作必須中止;

       不同的存儲引擎對備份的支持也是不一樣的,MyISAM存儲引擎可以使用LVM快照功能配合實現熱備份,如果沒有LVM,則只能實現溫備份。而InnoDB則可以完全支持熱備,可使用的熱備工具有:xtrabackup, mysqldump等

根據需要備份的數據集,備份方式有以下三種:

        完全備份:備份全部需要備份的數據

        增量備份:僅備份上次完全備份或增量備份以後變化的數據

        差異備份:僅備份上次完全備份依賴變化的數據

根據備份的方法,分爲物理備份和邏輯備份

        物理備份:直接cp數據文件,速度比較快;

 邏輯備份:將數據導出至文本文件中,方便使用文本處理工具直接對其處理、可移植能力強;數據量過大時備份速度很慢;

下面介紹mysqldump和snapshot用法

備份數據庫中的所有庫:--all-databases

[root@localhost ~]# mysqldump -uroot -hlocalhost -p --all-databases > /tmp/all.sql

    備份指定單個或多個庫:--databases

[root@localhost ~]# mysqldump -uroot -hlocalhost -p --databases testdb test > /tmp/mult.sql

    爲了防止備份數據庫時,某個用戶正在往某個表裏插入數據,需要在備份數據庫對所有表加鎖:--lock-all-tables,其他用戶的讀寫會被阻塞

[root@localhost ~]# mysql -uroot -hlocalhost -p --databases --lock-all-tables hellodb > /tmp/hdb.sql

其他常用選項:

     --single-transaction: 如果某個表使用的存儲引擎是Innodb存儲引擎,能夠對存儲引擎實現熱備,不能與--lock-all-tables同時使用

    --events:備份事件調度器代碼

    --routines:備份存儲過程或存儲函數代碼

    --triggers:備份觸發器    

    --flush-logs:備份前,請求到鎖之後滾動日誌

    --master-data:備份時指定二進制日誌文件及位置

mysqldump的完整用法:

    1、先使用--lock-all-tables請求鎖或--single-transaction進行Innodb熱備

    2、滾動日誌:--flush-logs

    3、指定備份的數據庫:--databases

[root@localhost ~]# mysqldump -uroot -hlocalhost -p --lock-all-tables --flush-logs --databases hellodb > /tmp/hdb.sql (溫備)
[root@localhost ~]# mysqldump -uroot -hlocalhost -p --single-transaction --flush-logs --databases hellodb > /tmp/hdb.sql (對Innodb存儲引擎做熱備)

使用mysqldump+二進制文件進行時間點恢復

    先備份testdb庫

[root@localhost ~]# mysqldump -uroot -hlocalhost -p --lock-all-tables --flush-logs --databases testdb --master-data=2 > /tmp/hdb.sql

    使用vim打開/tmp/hdb.sql查看當前二進制日誌位置

wKiom1NWeYjTFIkOAAHV59kalaM162.jpg

    之後在testdb數據庫中再創建一個新表,加入兩行數據

mysql> create table t1(Name char(30));
mysql> insert into t1 values ('lucy'),('tom');

    然後再刪除testdb數據庫

mysql> drop database testdb;

    查看刪除testdb數據庫之前的操作在二進制文件的位置

mysqlbinlog --start-position=106 mysql-bin.000002

    wKioL1NWfKGSecWTAAF9GxJJ3BU361.jpg

[root@localhost mysql]# mysqlbinlog --start-position=106 --stop-position=470 mysql-bin.000002 > /tmp/hdb.1.inc.sql

 

mysql> set session sql_log_bin=0;(進入mysql,關閉二進制文件記錄)

 

mysql> source /tmp/hdb.sql(導入testdb數據庫完整備份)
mysql> source /tmp/hdb.1.inc.sql(恢復至刪除testdb數據之前的數據)

 

驗證數據庫完整備份及完整備份後的數據是否恢復

wKioL1NWfwaQRe-WAAEsNlGHwQA224.jpg

    

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