Mysql增量備份之Mysqldump & Mylvmbackup

http://lizhenliang.blog.51cto.com/7876557/1302732


簡單介紹

備份類型備份方式

熱備份:備份期間不需要服務停機,業務不受影響;

溫備份:備份期間僅允許讀的請求;

冷備份:備份期間需要關閉Mysql服務或讀寫請求都不受影響;

完全備份:full backup備份全部數據集;

增量備份:incrementalbackup 上次完全備份或增量備份以來改變的數據;

差異備份:differentialbackup 上次完全備份以來改變的數據;

完全+增量備份方式恢復用到的備份文件:完全備份+增量備份+二進制文件;

完全+差異備份方式恢復用到的備份文件:完全備份+增量備份+二進制文件;

邏輯備份
優點缺點

邏輯備份可以使用編輯器或文本處理工具進行編輯或查看;

恢復非常簡單;

比較靈活;

與存儲引擎無關;

有助於避免數據損壞;

邏輯備份可以使用編輯器或文本處理工具進行編輯或查看;

恢復非常簡單;

比較靈活;

與存儲引擎無關;

有助於避免數據損壞;

 物理備份
優點缺點

備份與恢復數據比較簡單;

InnoDBMyISAM的物理備份容易跨平臺、操作系統和Mysql版本;

恢復速度比較快,不需要重新構建索引;

InnoDB的原始文件會比邏輯備份大得多;

物理備份不是總可以跨平臺、操作系統及Mysql版本;

文件名大小寫敏感和浮點格式有可能會有問題

備份對象:
數據文件、配置文件、代碼:存儲過程,存儲函數、觸發器等、二進制日誌、事務日誌、服務器配置、管理腳本、任務計劃等。

Mysqldump增量備份

使用Mysqldump備份工具實現完全備份,並結合二進制日誌實現增量備份。

特點:邏輯備份工具、支持InnoDB熱備份、MyISAM溫備份;備份與恢復較慢

一、備份數據庫

1

2

3

mysqldump -uroot -poldboy123 --lock-all-tables --flush-logs --databases test /mysqlbackup/test_`date +%F`.sql

--lock-all-tables:備份時爲所有表請求加鎖

--flush-log:備份之前刷新日誌

二、備份二進制文件

在test庫中創建一個表,增加數據,模擬增量備份,並查看當前二進制日誌位置。

1

cp /usr/local/mysql/data/mysqld-bin.00000* /mysqlbackup

1

2

3

4

5

6

7

mysql> create table abc (number INT(11), name varchar(100));

mysql> show master status;

+-------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+-------------------+----------+--------------+------------------+

| mysqld-bin.000004 | 221 | | |

+-------------------+----------+--------------+------------------+

三、查看二進制文件和完整備份後LOG_POS值在什麼位置

1

2

3

less /mysqlbackup/test_2013-09-29.sql  #前幾行可以看到在106

-- Position to start replication or point-in-time recovery from

-- CHANGE MASTER TO MASTER_LOG_FILE='mysqld-bin.000005', MASTER_LOG_POS=106;

四、二進制增量備份

1>.完整備份後到現在備份:

1

2

3

mysqlbinlog --start-position=106 /var/lib/mysql/mysqld-bin/mysql/mysqld-bin.000005 > /mysqlbackup/test_incremental.sql

--start-position:從哪個位置開始導出二進制日誌

--stop-position:從哪個位置結束,到末尾可以不指定

2>.向數據庫添加一條記錄,然後刪除數據庫,再恢復到當前數據

1

2

3

4

5

6

7

mysql>create table abd (number INT(1),name varchar(10));

mysql> show master status;   #查看二進制所在位置

+-------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+-------------------+----------+--------------+------------------+

| mysqld-bin.000005 | 527 | | |

+-------------------+----------+--------------+------------------+

五、恢復數據到當前數據,需要恢復完整備份+增量備份+增量備份後刪除之前的二進制文件

1

2

3

4

5

6

mysqlbinlog /var/lib/mysql/mysqld-bin.000005  #查看二進制,看在什麼時候做的,文件最後下面看出在446

# at 446

#130929 11:04:16 server id 1 end_log_pos 527 Query thread_id=10 exec_time=0 error_code=0

SET TIMESTAMP=1380467056/*!*/;

drop database test

/*!*/;

六、導出之前刪除數據庫至增量備份後的二進制文件

1

2

3

4

5

6

mysqlbinlog --start-position=220 --stop-position=446 /var/lib/mysql/mysqld-bin.000005 > /mysqlbackup/test_446.sql

mysql> source/backupn/test_2013-09-06.sql #恢復完整備份

mysql> source/backup/test_incremental.sql #恢復增量備份

mysql> source/backup/test_446.sql #恢復增量後至刪除前的數據

mysql> use test

mysql> show tables;查看數據恢復成功!

Mylvmbackup快速完整備份

mylvmbackup 是一個工具,用於快速創建完整的物理備份MySQL服務器的數據文件,備份數據時,將鎖定 MySQL 所有的表,並將緩存中數據寫到磁盤,然後執行 LVM 快照後解鎖。

使用LVM邏輯卷快照功能實現幾乎熱血備份的完全備份,並結合二進制日誌實現增量備份。

特點:幾乎接近於熱備份、物理備份、備份與恢復較快。

必須mysql數據庫存放目錄是LVM卷下,如果要做增量備份,bin-log日誌也要在LVM卷下,而且LVM卷要有空間給快照備份。

修改mysql和bin-log日誌位置:

1

2

3

vi /etc/my.cnf

datadir=/myvg/data

bin-log=/myvg/binlog/mysqld-bin

mysql有以下幾種日誌: 
錯誤日誌: -log-err 
查詢日誌: -log 
慢查詢日誌: -log-slow-queries 
更新日誌: -log-update 
二進制日誌: -log-bin

一、創建LVM卷

1

2

3

4

5

6

7

8

9

10

1>.創建物理卷

pvcreate /dev/sdb

2>.創建卷組

vgcreate myvg /dev/sdb

3>.創建邏輯卷

lvcreate -n mylv -L 19G myvg

4>.格式化文件系統

mkfs.ext4 /dev/myvg/mylv

5>.掛載使用

mount /dev/myvg/mylv/ /data

二、安裝使用Mylvmbackup

1

2

3

wget http://www.lenzg.net/mylvmbackup/mylvmbackup-0.14-0.noarch.rpm

yum install -y perl-TimeDate perl-Config-IniFiles perl-DBD-MySQL #安裝依賴包

rpm -ivh mylvmbackup-0.14-0.noarch.rpm


1、修改主配置文件

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

vi /etc/mylvmbackup.conf

[mysql]

user=root

password=123.com

host=localhost

port=3306

socket=/tmp/mysql.sock

mycnf=/etc/my.cnf

[lvm]

vgname=myvg #卷組的名字

lvname=mylv #邏輯卷的名字

lvsize=5G #備份時創建的snapshot的大小

[fs]

mountdir=/opt/snap_mnt #snapshot的mount位置

backupdir=/backup #備份打包後的存放位置

relpath=mysqldata #如果只是想備份邏輯卷下的某個目錄的話,則要指出來

[tools]

lvcreate=/usr/sbin/lvcreate

lvremove=/usr/sbin/lvremove

mount=/bin/mount

tar=/bin/tar

umount=/bin/umount

[misc]

prefix=backup #備份打包文件的命名前綴

suffix=_mysql #定義備份文件名後綴

2、備份數據庫並驗證備份文件

1

2

3

4

5

6

7

[root@202 ~]# mylvmbackup

20130906 11:55:33 Info: Running: lvremove -f /dev/myvg/mysql_snap

Logical volume "mysql_snap"successfully removed

20130906 11:55:34 Info: DONE: Removing snapshot

出現以上信息表示備份成功,最後刪除快照卷!

[root@202 ~]# ls /mysqlbackup/

backup-201309029_115532_mysql.tar.gz

完整備份成功!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章