mysqldump用法,以及用mysqldump做完全+增量備份
備份的目的:當數據是一種重要資產時,我們需要經常對其進行備份,以防止數據損壞時,能夠及時將它恢復到損壞時的狀態。
備份內容:數據、配置文件、二進制日誌、事務日誌
備份分類:
備份類型:
熱備份、溫備份和冷備份
熱備份:讀、寫不受影響;
溫備份:僅可以執行讀操作;
冷備份:離線備份;讀、寫操作均中止;
物理備份和邏輯備份
物理備份:復制數據文件;
邏輯備份:將數據導出至文本文件中;
完全備份、增量備份和差異備份;
完全備份:備份全部數據;
增量備份:僅備份上次完全備份或增量備份以後變化的數據;
差異備份:僅備份上次完全備份以來變化的數據
備份工具: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.000004的106處開始記錄:
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做完全+增量備份