http://lizhenliang.blog.51cto.com/7876557/1302732
簡單介紹
備份類型 | 備份方式 |
熱備份:備份期間不需要服務停機,業務不受影響; 溫備份:備份期間僅允許讀的請求; 冷備份:備份期間需要關閉Mysql服務或讀寫請求都不受影響; | 完全備份:full backup備份全部數據集; 增量備份:incrementalbackup 上次完全備份或增量備份以來改變的數據; 差異備份:differentialbackup 上次完全備份以來改變的數據; 完全+增量備份方式恢復用到的備份文件:完全備份+增量備份+二進制文件; 完全+差異備份方式恢復用到的備份文件:完全備份+增量備份+二進制文件; |
邏輯備份 |
優點 | 缺點 |
邏輯備份可以使用編輯器或文本處理工具進行編輯或查看; 恢復非常簡單; 比較靈活; 與存儲引擎無關; 有助於避免數據損壞; | 邏輯備份可以使用編輯器或文本處理工具進行編輯或查看; 恢復非常簡單; 比較靈活; 與存儲引擎無關; 有助於避免數據損壞; |
物理備份 |
優點 | 缺點 |
備份與恢復數據比較簡單; InnoDB與MyISAM的物理備份容易跨平臺、操作系統和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
|
完整備份成功! |