MySQL三種備份


一)備份分類

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三種備份方式:

第一種:

wKioL1NIFk3SEDI0AAKkXLygpwk752.jpg

備份:[root@station141 ~]# mysqldump --databases benet > /tmp/benet.sql

mysql> unlock tables;解鎖

mysql> drop database benet;刪除庫
Query OK, 1 row affected (0.70 sec)

恢復

wKiom1NIFyDjIAYAAALGfdPcPvY533.jpg

第二種方式備份:

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備份工具使用如下:

下載位置:http://www.percona.com/

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM