程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> xtrabackup簡介

xtrabackup簡介

編輯:MySQL綜合教程

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  root@host:/home/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 見https://bugs.launchpad.net/percona-xtrabackup/+bug/737569
 
我看了看/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 Linux 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 mysqld 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 找
 
大功告成
 
省了以前通宵用mysqldump 來同步數據再做主從同步
 
這東東是個神器

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved