MySQL的備份方式(xtrabackup 增量備份)

一、MySQL的備份方式

1.mysqldump
效率比較低,備份和還原的速度都很慢,任何數據插入和更新操作都會被掛起

2.mysqlhotcopy
mysqlhotcopy 是專門針對myisam 數據表進行備份,備份的過程中,任何數據插入和更新操作都會被掛起

3.準備一臺從服務器,專門做備份(master-slave方式)

4.xtrabackup 是 percona 的一個開源項目,可熱備份innodb ,XtraDB,MyISAM(會鎖表)

Xtrabackup有兩個主要的工具:xtrabackup、innobackupex
xtrabackup只能備份InnoDB和XtraDB兩種數據表,而不能備份MyISAM數據表
innobackupex-1.5.1則封裝了xtrabackup,是一個腳本封裝,所以能同時備份處理innodb和myisam,但在處理myisam時需要加一個讀鎖

相比之下 xtrabackup 備份比較靠譜

下載 xtrabackup-1.6-245.rhel5.x86_64.rpm
安裝 rpm -ivh  xtrabackup-1.6-245.rhel5.x86_64.rpm

備份(xtrabackup只備份數據文件,並不備份數據表結構(.frm))
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/bak/
恢復(執行兩次)
xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/bak/
xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/bak/

二、 增量備份

對比innobackupex和xtrabackup,innobackupex操作起來更方便,但是innobackupex會有短暫的鎖表.xtrabackup備份還有另一個重要特性:增量備份.

1. 全量備份
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/bak/

2. 增量備份
xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/bak/ --incremental-basedir=/bak/increm/

在增量備份的目錄下,數據文件都是以.delta結尾的。增量備份只備份上一次全量備份之後被修改過的page,所以增量備份一般只暫用較少的空間。

3. 增量備份恢復
分別對全量、增量備份各做一次prepare操作。
xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/bak/
xtrabackup --prepare --target-dir=/bak/ --incremental-dir=/bak/increm/

/bak/下的數據文件就可以直接放到你的MySQL數據目錄下,恢復數據了。

一般的備份 比如不會換全新的環境 用xtrabackup 就可以了

在不停生產的情況下備份數據給slave

首先確保兩邊的/etc/my.cnf 文件裏邊都指定了datadir

接着備份數據:
innobackupex-1.5.1   --defaults-file=/etc/my.cnf --stream=tar  --user=root --password=**** --port=3306 --slave-info /bak | gzip>/bak/bak_mysql.tar.gz

將bak_mysql.tar.gz cp 到另一臺機器上
scp  /bak/bak_mysql.tar.gz  

解壓bak_mysql.tar.gz到/bak
tar -ixvf mysqlbak.tar(一定要加i 參數  我也不知道爲什麼)

恢復先 --apply-log  再 --copy-back
innobackupex-1.5.1 --defaults-file=/etc/my.cnf  --user=root  --password=XXXX --port=3306 --apply-log /bak

--copy-back這裏容易報錯
(innobackupex-1.5.1: Copying directory '/bak/tech_soft_drp_ywmy'
innobackupex-1.5.1: Copying directory '/bak/mysql'
mkdir: 無法創建目錄 “arb/mysql/mysql”: 文件已存在
innobackupex-1.5.1: Error: Failed to create directory 'arb/mysql/mysql' : 沒有那個文件或目錄 at /usr/bin/innobackupex-1.5.1 line 336.)
我也不知道咋整。好像是官方1bug 見

我看了看/bak目錄  決定把mysql  test 等自帶的一些庫直接rm 了。執行已下命令成功

innobackupex-1.5.1  --defaults-file=/etc/my.cnf  --user=root  --password=XXXX --port=3306  --copy-back /bak

重啓數據庫服務又有問題
(110719 19:30:16 mysqld_safe Starting mysqld daemon with databases from arb/mysql
110719 19:30:16 [Note] Plugin 'FEDERATED' is disabled.
110719 19:30:16 InnoDB: The InnoDB memory heap is disabled
110719 19:30:16 InnoDB: Mutexes and rw_locks use GCC atomic builtins
110719 19:30:16 InnoDB: Compressed tables use zlib 1.2.3
110719 19:30:16 InnoDB: Using native AIO
110719 19:30:16 InnoDB: Initializing buffer pool, size = 2.0G
110719 19:30:16 InnoDB: Completed initialization of buffer pool
110719 19:30:16  InnoDB: Operating system error number 13 in a file operation.
InnoDB: The error means d does not have the access rights to
InnoDB: the directory.
InnoDB: File name ./ib_logfile0
InnoDB: File operation call: 'open'.
InnoDB: Cannot continue operation.
110719 19:30:16 mysqld_safe mysqld from pid file arb/mysql/r410.pid ended)


直接將mysql 目錄 chmod 777 -R mysql 重啓服務好了

將my.cnf 配置成server-id=2  主從配置
CHANGE MASTER TO MASTER_HOST='xxxx',MASTER_USER='xx',MASTER_PASSWORD='xxx',MASTER_LOG_FILE='mysql-bin.000047',MASTER_LOG_POS=43446639

MASTER_LOG_FILE這個值去/bak 下面的 xtrabackup_binlog_info 找


http://www.dedecms.com/knowledge/data-base/mysql/2012/0819/8118.html

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