1. 程式人生 > >mysqldump用法,以及用mysqldump做完全+增量備份

mysqldump用法,以及用mysqldump做完全+增量備份

mysqldump 完全備份

利用mysqldump對MySQL的完全備份和增量備份

備份的目的:當數據是一種重要資產時,我們需要經常對其進行備份,以防止數據損壞時,能夠及時將它恢復到損壞時的狀態。

備份內容:數據、配置文件、二進制日誌、事務日誌

備份分類:

備份類型:

熱備份、溫備份和冷備份

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

溫備份:僅可以執行讀操作;

冷備份:離線備份;讀、寫操作均中止;

物理備份和邏輯備份

物理備份:復制數據文件;

邏輯備份:將數據導出至文本文件中;

完全備份、增量備份和差異備份;

完全備份:備份全部數據;

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

差異備份:僅備份上次完全備份以來變化的數據

備份工具:xtrabackup, mysqldump

MyISAM引擎只能支持溫備份,InnoDB可以支持熱備和溫備。

備份策略:完全+增量;完全+差異

mysqldump備份工具介紹

mysqldump 語法

mysqldump DB_NAME [tb1] [tb2] 只備份某個數據庫,或庫中某個表,註:它不包含該數據庫的名稱,即將來要還原時,必須手動創建數據庫

--master-data={0|1|2}

0::不記錄二進制日誌文件及位置:

1 CHANGE MASTER TO 的方式記錄位置,可用於恢復後直接啟動從服務器:

2 CHANGE MASTER TO 的方式記錄位置,但默認被註釋:

--lock-all-tables:鎖定所有表 MyISAM引擎的表開始備份前,先鎖定所有表。

--flush-logs :備份前,鎖定表,執行日誌滾動

—single-transaction 啟動熱備


如果指定庫中的表均為InnoDB,可以用—single-transaction 啟動熱備:

--events 備份事件,備份數據庫定義的事件調度器

--routines 備份存儲過程和存儲函數

--triggers 備份觸發器

備份多個庫

--all-databases: 備份所有庫

--databases DB_NAME,DB_NAME,…備份指定庫

這兩個命令由於不止備份一個庫,所有還原前可以不用手動創建庫。

測試一:mysqldump 完全備份 + 二進制日誌做及時點還原 模擬 完全備份+增量備份

測試環境: MySQL 版本:mysql-5.1.73-8

Linux發行版:CentOS6.8

實驗前準備:

1、創建數據庫jiaowu tutors表,如下

創建數據庫教務:mysql> CREATE DATABASE jiaowu;

創建tutors表:

CREATE TABLE `tutors` (

`TID` smallint(5) unsigned NOT NULL AUTO_INCREMENT,

`Tname` varchar(50) NOT NULL,

`Gender` enum('F','M') DEFAULT 'M',

`Age` tinyint(3) unsigned DEFAULT NULL,

UNIQUE KEY `TID` (`TID`)

) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1; // 創建表結構

INSERT INTO `tutors` VALUES // 插入表數據

(1,'HongQigong','M',93),(2,'HuangYaoshi','M',63),(3,'Miejueshitai','F',72),(4,'OuYangfeng','M',76),(5,'YiDeng','M',90),(6,'YuCanghai','M',56),(7,'Jinlunfawang','M',67),(8,'HuYidao','M',42),(9,'NingZhongze','F',49);

2、啟用二進制日誌

在配置文件/etc/my.cnf [mysqld]添加 log-bin=mysql-bin mysql-bin表示二進制日誌名稱);然後重啟服務:service mysqld restart

查看bin_log是否開啟:mysql> SELECT @@sql_log_bin; 1:表示開啟

實驗步驟:

1、 鎖表、刷新

mysql> FLUSH TABLES WITH READ LOCK;

技術分享圖片

2、 查看當前二進制日誌

mysql> SHOW MASTER LOGS;

技術分享圖片

3、 做日誌滾動

mysql> FLUSH TABLES WITH READ LOCK;

技術分享圖片

4、 查看滾動後二進制記錄起始記錄位置:下個事務從mysql-bin.000004106處開始記錄:

mysql> SHOW BINARY LOGS;

技術分享圖片

5、 創建備份目錄

[root@Paul ~]# mkdir /root/backup

技術分享圖片

6、 做完全備份

[root@Paul ~]# mysqldump -uroot -p jiaowu > /root/backup/jiaowu-`date +%F_%H-%M-%S`

技術分享圖片

7、 查看備份文件

[root@Paul backup]# ls -l /root/backup/

技術分享圖片

8、 更改備份後的屬主、屬組

[root@Paul backup]# chown -R mysql.mysql /root/backup/

技術分享圖片

9、 查看更改後結果:

[root@Paul backup]# ls -l /root/backup/

技術分享圖片

10、備份結束後,解鎖

mysql> UNLOCK TABLE;

技術分享圖片

11、在jiaowu數據庫的tutors標準插入新數據

mysql> INSERT INTO tutors (Tname) VALUES ('stu1'),('stu2');

技術分享圖片

12、看表更新後內容

mysql> SELECT * FROM tutors;

技術分享圖片

13、進入二進制目錄

[root@Paul backup]# cd /var/lib/mysql

技術分享圖片

14、備份更新後的二進制日誌

[root@Paul mysql]# cp mysql-bin.000004 /root/backup

技術分享圖片

15、刪除所有數據文件

[root@Paul mysql]# rm -rf ./*

技術分享圖片

16、重新啟動mysql服務

[root@Paul ~]# service mysqld restart

技術分享圖片

17、創建原數據庫

mysql> CREATE DATABASE jiaowu;

技術分享圖片

18、還原數據庫

mysql jiaowu < jiaowu.2018-04-21-07-13-59

技術分享圖片

19、查看還原後結果:

mysql> select * from tutors;

技術分享圖片

20、利用二進制日誌做及時點還原

[root@Paul backup]# mysqlbinlog mysql-bin.000004 | mysql -uroot –p

技術分享圖片

21、查看還原結果:

mysql> select * from tutors;

技術分享圖片


mysqldump用法,以及用mysqldump做完全+增量備份