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