无敌六肖公式规律|杀平特公式规律

MySQL常用的三種備份方法

2013-10-09 09:07:09來源:51CTO作者:

mysql按照備份恢復方式分為邏輯備份和物理備份。邏輯備份是備份sql語句,在恢復的時候執行備份的sql語句實現數據庫數據的重現,物理備份就是備份數據文件了,比較形象點就是cp下數據文件,但真正備份的時候自然不是

mysql按照備份恢復方式分為邏輯備份和物理備份。邏輯備份是備份sql語句,在恢復的時候執行備份的sql語句實現數據庫數據的重現,物理備份就是備份數據文件了,比較形象點就是cp下數據文件,但真正備份的時候自然不是的cp這么簡單。

這2種備份各有優劣,一般來說,物理備份恢復速度比較快,占用空間比較大,邏輯備份速度比較慢,占用空間比較小

下面介紹以下3種常用的備案方法

一、mysqldump工具備份

mysqldump由于是mysql自帶的備份工具,所以也是最常用的mysql數據庫的備份工具。支持基于InnoDB的熱備份。但由于是邏輯備份,所以速度不是很快,適合備份數據量比較小的場景。
mysqldump完全備份+二進制日志 —>實現時間點恢復

溫備:

在使用MyISAM引擎中,只能使用溫備份,這時候要防止數據的寫入,所以先加上讀鎖

這時候可以進入數據庫手動加讀鎖。這樣比較麻煩,在mysqldump工具中直接有一個加鎖的選項

mysqldump --databases mydatabase --lock-all-tables --flush-logs> /tmp/backup-`date +%F-%H-%M`.sql

如果是針對某張表備份,只要在數據庫名稱后面加上表名稱就行了

這里注意,要實現時間點的恢復,加上--flush-logs選項,在使用備份文件恢復后,然后再基于二進制日志進行時間點的恢復

時間點的恢復方法

mysqlbinlog mysql-bin.000000x > /tmp/PointTime.sql

然后用mysql命令導入這個sql腳本就行了

熱備:如果使用的是InnoDB引擎,就不必進行對數據庫加鎖的操作,加一個選項既可以進行熱備份:--single-transaction
mysqldump --databases mydb --single-transaction --flush-logs --master-data=2 > /tmp/backup-`date +%F-%H-%M`.sql

注意點
恢復的時刻關閉二進制日志
mysql>set sql_log_bin=0;
因為這是基于邏輯備份方式,在恢復日志時會執行sql語句插入數據,而恢復時候插入數據的日志沒有意義。

二、基于LVM快照備份

在物理備份中 ,有基于文件系統的物理備份(LVM的快照),也可以直接用tar之類的命令打包。但這些只能進行冷備份
不同的存儲引擎能備份的級別也不一樣,MyISAM能備份到表級別,而InnoDB不開啟每表一文件的話就只能備份整個數據庫。

下面就介紹下使用LVM的快照功能進行備份
為了安全 首先在數據庫上施加讀鎖
mysql>FLUSH TABLES WITH READ LOCK;

刷新一下二進制日志,便于做時間點恢復

mysql>FLUSH LOGS;

然后創建快照卷

lvcreate –L 1G –s –n data-snap –p –r /dev/myvg/mydata

最后進入數據庫釋放讀鎖

UNLOCK TABLES;

掛載快照卷進行備份

mount –r /dev/myvg/data-snap /mnt/snap

然后對/mnt/snap下的文件進行打包備份
還原的時候,關閉mysqld,然后備份二進制日志后將原來備份的文件還原進去,然后通過二進制日志還原到出錯的時間點(通過二進制還原時間點的時候不要忘了暫時關閉二進制日志)

三、使用percona提供的xtrabackup(推薦)

支持InnoDB的物理熱備份,支持完全備份,增量備份,而且速度非常快,而且支持InnoDB引擎的數據在不同數據庫遷移
為了讓xtrabackup支持更多的功能擴展,配置InnoDB每表一個文件的功能
在my.cnf的mysqld中加入此項: innodb_file_per_table=1
此項不啟用將不支持備份單獨的表
但如果之前沒有啟用這個選項,要實現單表一文件的話,可以用mysqldump導出數據,然后啟用該選項,恢復回去后就是單表一文件了

首先下載xtrabackup,下載地址:http://www.percona.com/software/percona-xtrabackup,可以直接下載rpm包安裝即可。

xtrabackup有完全備份,增量備份和部分備份(前面開啟innodb每表一文件,就是為了此功能)

1.完全備份整個數據庫

innobackupex --user=root --password=123456 /tmp/backup

此時會在/tmp/backup目錄下生成以時間為名的文件夾,里面是備份文件

在這里,備份的數據還不能直接用來還原,因為備份數據中會含有尚未提交的事務或者未同步到數據文件中的事物。這里需要用prepare回滾事物使數據文件處于一致性。

innobackupex --apply-log /tmp/backup/dir

處理完成后才能用來還原數據,用此命令還原

innobackupex --copy-back /tmp/backup/dir

要實現時間點還原,還是需要使用二進制日志

2.增量備份
 
增量備份支持Innodb,對于MyISAM只能完全備份
innobackupex –incremental /tmp/backup/incremental --incremental-basedir=/tmp/backup/dir

在進行一次增量備份--incremental-basedir要指向上一次增量備份的目錄

如果要進行還原,先進行prepare處理

這里處理的方式,將備份合并

innobackupex --apply-log --redo-only /tmp/backup/dir

innobackupex --apply-log --redo-only /tmp/backup/dir --incremental-dir=/tmp/backup/incremental

最后使用完全備份的那個備份還原

至于差異備份,只要每次將basedir指向完全備份文件夾就行了

最后再廢話一句:要實現時間點還原,是需要使用二進制日志的,所以備份好二進制日志至關重要。除非在恢復時間點和上一次備份時間點這段時間的數據對你來說無所謂。

關鍵詞:MySQL

贊助商鏈接:

无敌六肖公式规律