一)備份分類
|
1
2
3
4
5
6
7
8
9
10
11
12
|
冷備:cold backup數據必須下線后備份
溫備:warm backup全局施加共享鎖,只能讀,不能寫
熱備:hot backup數據不離線,讀寫都能正常進行
備份的數據集
完全備份:full backup
部分備份:partial backup
備份時的接口(是直接備份數據文件還是通過mysql服務器導出數據)
物理備份:直接復制(歸檔)數據文件的備份方式:physical backup
邏輯備份:把數據從庫中提出來保存為文本文件:logical backup
完全備份:full backup
增量備份:incrementl backup
差異備份:fidderential backup
|
二)備份工具mysqldump講解
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
mysqldump:邏輯備份工具
InnoDB引擎熱備,MyISM溫備,Aria溫備
備份和恢復的過程比較慢,很難實現差異或增量備份
恢復時,如果目標庫不存在,需要事先手動創建
常用選項:
--all-databases:備份所有庫
--databases db1 db2...:備份指定的多個庫
注意:備份前要加鎖:
--lock-all-tables:請求鎖定所有表之后在備份。
--lock-tables:鎖定指定的表。
--single-transaction:能夠對InnoDB存儲引擎實現熱備。
備份代碼:
--events:備份事件調度器代碼
--routines:備份存儲過程和存儲函數
--triggers:備份觸發器
備份時滾動日志:
--flush-logs:備份前,請求到鎖之后滾動日志。
復制時的同步位置標記
--master-data=【
0
|
1
|
2
】
0
表示不記錄
1
表示記錄change master語句
2
記錄為注釋的change master語句
使用mysqldump備份:
請求鎖:--lock-all-tables或使用--singe-transaction進行innoDB熱備
滾動日志:--flush-logs
選定要備份的庫:--databases
記錄二進制日志文件及位置:--master-data=
0
|
1
|
2
|
mysqldump三種備份方式:
第一種:
備份:[root@station141 ~]# mysqldump --databases benet > /tmp/benet.sql
mysql> unlock tables;解鎖
mysql> drop database benet;刪除庫
Query OK, 1 row affected (0.70 sec)
恢復
第二種方式備份:
mysqldump --databases benet --lock-all-tables --flush-logs > /tmp/benet.sql直接備份的
第三種方式備份:主要是針對innoDB引擎備份,實現熱備。
mysqldump --databases benet --single-transactions --flush-logs > /tmp/benet.3.sql
備份所有數據庫
mysqldump --all-databases > /tmp/all.sql
Xtrabackup備份工具使用如下:
yum -y install percona-xtrabackup-2.1.8-733.rhel6.x86_64.rpm
yum -y install percona-toolkit-2.2.7-1.noarch.rpm
備份全部數據庫:
innobackupex --user=root /myback
|
1
2
3
4
5
6
|
[root@localhost
2014
-
04
-14_23-
39
-
44
]# cat xtrabackup_checkpoints
backup_type = full-backuped
from_lsn =
0
to_lsn =
1619068
last_lsn =
1619068
compact =
0
|
恢復數據庫
innobackupex --apply-log /mydata/2014-04-14_23-39-44/先把數據整理出來
innobackupex --copy-back /mydata/2014-04-14_23-39-44/根據全備份恢復數據
做增量備份
innobackupex --incremental /mydata/ --incremental-basedir=/mydata/2014-04-14_23-39-44/
基於上次的全備做
|
1
2
3
4
5
6
|
[root@localhost
2014
-
04
-14_23-
45
-
11
]# cat xtrabackup_checkpoints
backup_type = incremental
from_lsn =
1619068
to_lsn =
1619478
last_lsn =
1619478
compact =
0
|
查看是增量備份
恢復增量備份,依次先恢復,全備,后增量
|
1
2
3
4
|
innobackupex --apply-log --redo-only /mydata/
2014
-
04
-14_23-
39
-
44
/
innobackupex --apply-log --redo-only /mydata/
2014
-
04
-14_23-
39
-
44
/ --incremental-dir=/mydata/
2014
-
04
-14_23-
45
-
11
/
innobackupex --apply-log --redo-only /mydata/
2014
-
04
-14_23-
39
-
44
/ --incremental-dir=/mydata/
2014
-
04
-14_23-
49
-
01
/
innobackupex --copy-back /mydata/
2014
-
04
-14_23-
39
-
44
/
|
LVM-snapshot:基於lvm快照備份
大致步驟:
1)事務日志跟數據文件必須在同一個卷上
2)創建快照卷之前,要請求mysql的全局鎖,在快照創建完成之后釋放鎖
3)請求全局鎖完成之后,做一次日志滾動;做二進制日志及位置標記(手動進行);
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
[root@localhost ~]# mount
/dev/mapper/vg0-root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=
5
,mode=
620
)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
/dev/mapper/vg0-usr on /usr type ext4 (rw)
/dev/mapper/vg0-
var
on /
var
type ext4 (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /
var
/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/mapper/myvg-lvmy on /mnt type ext4 (rw)
/mnt下放的就是mysql數據庫得數
|
|
1
2
3
|
[root@localhost ~]# vim /etc/my.cnf
thread_concurrency =
8
datadir = /mnt
|
安裝數據庫的時候先創建好個邏輯卷,安裝目錄為/mnt下。
請求全局鎖,滾動日志
MariaDB [(none)]> flush tables with read lock;
MariaDB [(none)]> flush logs;
記錄二進制日志位置
mysql -e 'show master status' > mysql.txt
創建快照
[root@localhost ~]# lvcreate -L 1G -s -n mydata-snap -p r /dev/myvg/mydata
解鎖
MariaDB [(none)]> unlock tables;
掛載快照並且備份
mount /dev/myvg/mysql-snap /media/
tar -Jcf /tmp.mysq.tar.xz /media/*
卸載並刪除快照
|
1
2
3
4
|
[root@localhost ~]# umount /media/
[root@localhost ~]# lvremove /dev/myvg/mysql-snap
Do you really want to remove active logical volume mysql-snap? [y/n]: y
Logical volume
"mysql-snap"
successfully removed
|


