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 來同步數據再做主從同步
這東東是個神器