1. 程式人生 > 實用技巧 >MySQL 資料備份

MySQL 資料備份

備份的型別

1.冷備:停庫,停服務,備份
2.熱備:不停庫,不停服務,備份
3.溫備:不停服務,鎖表(阻止資料寫入),備份

冷備份:這些備份在使用者不能訪問資料時進行,因此無法讀取或修改資料。這些離線備份會阻止執行任何使用資料的活動。這些型別的備份不會干擾正常執行的系統的效能。但是,對於某些應用程式,會無法接受必須在一段較長的時間裡鎖定或完全阻止使用者訪問資料。
溫備份:這些備份在讀取資料時進行,但在多數情況下,在進行備份時不能修改資料本身。這種中途備份型別的優點是不必完全鎖定終端使用者。但是,其不足之處在於無法在進行備份時修改資料集,這可能使這種型別的備份不適用於某些應用程式。在備份過程中無法修改資料可能產生效能問題。
熱備份:這些動態備份在讀取或修改資料的過程中進行,很少中斷或者不中斷傳輸或處理資料的功能。使用熱備份時,系統仍可供讀取和修改資料的操作訪問。

備份的策略

備份方式

邏輯備份

# 基於SQL語句的備份

# 1.binlog 備份,binlog 中是對於資料庫 DDL/DML/DCL 的記錄

# 2.into outfile,會以二維表格的形式輸出資料 
[root@db03 data]# vim /etc/my.cnf
[mysqld]
secure-file-priv=/tmp
mysql> select * from world.city into outfile '/tmp/world_city.data';

# 3.使用 mysqldump 命令備份
# 4.replication,主從複製

物理備份

# 備份底層的資料檔案
1. 備份整個 data 資料目錄
2. Percona-xtrabackup 增量備份

mysqldump 命令(備份)

1.不加引數:用於備份單個表
    1)備份庫
    [root@db02 ~]# mysqldump ku > /tmp/ku.sql
    2)備份表
    [root@db02 ~]# mysqldump ku test > /tmp/ku.sql
    3)備份多個表
    [root@db02 ~]# mysqldump ku test test2 test3 > /tmp/ku.sql
    #注意:當不加引數時命令後面跟的是庫名,庫的後面全都是必須是庫下面的表名

2.連線服務端引數(基本引數):-u -p -h -P -S

3.-A, --all-databases:全庫備份

4.-B:指定庫備份
[root@db01 ~]# mysqldump -uroot -p123 -B db1 > /backup/db1.sql
[root@db01 ~]# mysqldump -uroot -p123 -B db1 db2 > /backup/db1_db2.sql

5.-F:flush logs在備份時自動重新整理binlog(不怎麼常用)
[root@db01 backup]# mysqldump -uroot -p123 -A -F > /backup/full_2.sql

6.--master-data=2:備份時加入change master語句0沒有1不註釋2註釋
	1)等於2:記錄binlog資訊,並註釋(日常備份)
	2)等於1:記錄binlog資訊,不註釋(擴充套件從庫)
	0)等於0:不記錄binlog資訊
	[root@db01 backup]# mysqldump -uroot -p123 --master-data=2 >/backup/full.sql

7.--single-transaction:快照備份

8.-d:僅表結構
9.-t:僅資料

10.-R, --routines:備份儲存過程和函式資料
11.--triggers:備份觸發器資料
12.gzip:壓縮備份
	#備份成壓縮包
	[root@db01 ~]# mysqldump -uroot -p123 -A | gzip > /backup/full.sql.gz
	#恢復壓縮包中的資料
	[root@db03 ~]# zcat /tmp/full.sql.gz | mysql -uroot -p123

#完整的備份命令:
mysqldump -uroot -p123 -A -R --triggers --master-data=2 –-single-transaction > /tmp/full.sql

注意:

mysqldump 在備份和恢復時都需要 MySQL例項 啟動為前提;

一般資料量級 100G 以內,大約 15-30分鐘 可以恢復;

mysqldump 是以覆蓋的形式恢復資料的。