Xtrabackupphp
Xtrabackup是一個對InnoDB作數據備份的工具,支持在線熱備份(備份時不影響數據讀寫),是商業備份工具InnoDB Hotbackup的一個很好的替代品。mysql
Xtrabackup有兩個主要的工具:xtrabackup、innobackupexc++
在xtrabackup的上一次整庫備份基礎上作增量備份(innodb only) 以流的形式產生備份,能夠直接保存到遠程機器上(本機硬盤空間不足時頗有用)sql
1.下載&安裝數據庫
yum安裝vim
配置源centos
#vim /etc/yum.repos.d/percona.repo服務器
[percona] name = CentOS $releasever - Percona baseurl=http://repo.percona.com/centos/$releasever/os/$basearch/ enabled = 1 gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-percona gpgcheck = 1
添加keyapp
#cd /etc/pki/rpm-gpgsocket
#wget http://www.percona.com/downloads/RPM-GPG-KEY-percona
yum安裝xtrabackup
[root@server ~]# yum list |grep percona
Percona-SQL-50-debuginfo.i686 5.0.92-b23.85.rhel5 percona
Percona-SQL-client-50.i686 5.0.92-b23.85.rhel5 percona
Percona-SQL-devel-50.i686 5.0.92-b23.85.rhel5 percona
Percona-SQL-server-50.i686 5.0.92-b23.85.rhel5 percona
Percona-SQL-shared-50.i686 5.0.92-b23.85.rhel5 percona
Percona-SQL-shared-compat.i686 5.0.92-b23.85.rhel5 percona
Percona-SQL-test-50.i686 5.0.92-b23.85.rhel5 percona
Percona-Server-51-debuginfo.i686 5.1.59-rel13.0.325.rhel5 percona
Percona-Server-51-debuginfo.i386 5.1.61-rel13.2.430.rhel5 percona
Percona-Server-55-debuginfo.i686 5.5.20-rel24.1.217.rhel5 percona
Percona-Server-client-51.i686 5.1.59-rel13.0.325.rhel5 percona
Percona-Server-client-51.i386 5.1.61-rel13.2.430.rhel5 percona
Percona-Server-client-55.i686 5.5.20-rel24.1.217.rhel5 percona
Percona-Server-devel-51.i686 5.1.59-rel13.0.325.rhel5 percona
Percona-Server-devel-51.i386 5.1.61-rel13.2.430.rhel5 percona
Percona-Server-devel-55.i686 5.5.20-rel24.1.217.rhel5 percona
Percona-Server-server-51.i686 5.1.59-rel13.0.325.rhel5 percona
Percona-Server-server-51.i386 5.1.61-rel13.2.430.rhel5 percona
Percona-Server-server-55.i686 5.5.20-rel24.1.217.rhel5 percona
Percona-Server-shared-51.i686 5.1.59-rel13.0.325.rhel5 percona
Percona-Server-shared-51.i386 5.1.61-rel13.2.430.rhel5 percona
Percona-Server-shared-55.i686 5.5.20-rel24.1.217.rhel5 percona
Percona-Server-shared-compat.i386 5.1.61-rel13.2.430.rhel5 percona
Percona-Server-shared-compat.i686 5.5.20-rel24.1.217.rhel5 percona
Percona-Server-test-51.i686 5.1.59-rel13.0.325.rhel5 percona
Percona-Server-test-51.i386 5.1.61-rel13.2.430.rhel5 percona
Percona-Server-test-55.i686 5.5.20-rel24.1.217.rhel5 percona
percona-toolkit.noarch 2.0.3-1 percona
xtrabackup.i386 1.6.5-328.rhel5 percona
xtrabackup-debuginfo.i386 1.6.5-328.rhel5 percona
#yum install xtrabackup
rpm安裝
安裝依賴包
$ yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr bison libtool ncurses5-devel
下載包&安裝
#wget http://www.percona.com/downloads/XtraBackup/XtraBackup-1.6.5/RPM/rhel6/x86_64/xtrabackup-1.6.5-328.rhel6.x86_64.rpm
#rpm xtrabackup-1.6.5-328.rhel6.x86_64.rpm
2,使用
Usage: [./xtrabackup [DEFAULTS OPTION] —backup | ./xtrabackup [DEFAULTS OPTION] —prepare] [OPTIONS]
Default options are read from the following files in this order: /etc/my.cnf, /opt/mysql-5.0.xx/etc/my.cnf, ~/.my.cnf
參數說明:
--defaults-file= 讀my.cnf的位置,在DB服務器上有多實例時頗有用,未指定將讀/etc/my.cnf~(如要備份DB 3307的數據庫,要單獨指定3307的 my.cnf文件)
--datadir= 數據存放目錄,和my.cnf中要相一致~ (必須,但實際上通常不用特別指定,由於會從my.cnf中去讀取~)
--target-dir= 存放備份文件的目錄,要使用絕對路徑~ 若此目錄開始不存在,則--backup選項會創建此目錄~
--backup 備份InnoDB/XTraDB表空間,存放*.ibd及備份的log文件(xtrabackup_logfile)到 --target-dir目錄~
--stats 統計分析innodb表存儲信息,eg. xtrabackup --stats --defaults-file=/data/scrips/mysql_3306.cnf
--prepare 返原innodb前要執行,prepare命令~ eg. xtrabackup --prepare --defaults-file=`pwd`/mysql_3306.cnf --throttle=2000 --target-dir=`pwd`/dbbak
--print-param 主要用於innobackupex腳本copyback操做時, 打印出目標mysqld的參數~
--use-memory= 用於--prepare 或 --stats,在prepare至關於innodb_buffer_pool_size 做用~ eg.xtrabackup --use-memory=1G --stat
--export --prepare操做時,導入其它數據庫使用。在使用'ALTER TABLE … IMPORT TABLESPACE' 命令時,輸出乾淨的.ibd files 或 .exp 文件.
--suspend-at-end 在backup操做時用於同步(synchronizing)
--log-stream --backup操做時,輸出xtrabackup_logfile內容,innobackupex --stream 就使用此選項~
--incremental-lsn= 用於--backup. Copy only .ibd pages newer than specified LSN 'high:low'
--incremental-basedir= 用於增量備份backup~只拷貝比目標目錄中更新的.ibd 文件~
--incremental-dir=name= 用於增量prepare,
--tables= innodb數據庫使用file-per-table模式時,可用此選項備份部分表~也可用於stat操做時~
--throttle= 用於限制每秒中磁盤的讀寫操做~ 在線備份時很是有用~
--create-ib-logfile 用於--prepare時生成ib-logfile~ 注意:當前版本未實現,仍是要re–prepare^_^
--tmpdir= 存放temporary files的路徑~
三、innobackupex工具
(1)備份操做(下列是幾個例子)
####備份employess數據庫(普通備份)#### [root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --slave-info --databases=employees /root/backup 1> process_log 2>&1 & 注意:將數據庫employees備份到目錄/root/backup/XXXX下 [root@SQL1 ~]# ls -l /root/backup total 4 drwxr-xr-x 3 root root 4096 Apr 13 14:16 2010-04-13_14-14-43 ####備份給定的數據庫列表中的數據庫中(普通備份)#### [root@SQL1 ~]# cat backup_db_name school employees [root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --slave-info --databases=/root/backup_db_name /root/backup 1> process_log 2>&1 & 或者 [root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --slave-info --databases=「school employees」 /root/backup 1> process_log 2>&1 & ####備份employess數據庫中的employess表(普通備份)#### [root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --slave-info --databases="employees.employees" /root/backup 1> process_log 2>&1 & ####備份全部的數據庫,並打包(tar方式)##### [root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --slave-info --stream=tar /root/backup 1> /root/backup/all_databases.tar 2> process_log & ####備份全部的數據庫並壓縮,並打包壓縮(tar+gzip方式)#### [root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --slave-info --stream=tar /root/backup 2> process_log | gzip > /root/backup/all_databases.tar.gz & |
注意:首先要先建立備份目錄:/root/backup,--databases=[ db_name.tb_name | db_name ],若是不使用--databases參數的話,那麼將備份全部的數據庫
(2)恢復操做
(步驟:先apply log,再copy back,最後再chown -R mysql:mysql datadir)
####(普通備份)的還原操做###### [root@SQL1 ~]# ls -l /root/backup/2010-04-13_15-02-37/ total 223484 -rw-r--r-- 1 root root 348 Apr 13 15:02 backup-my.cnf drwxr-xr-x 2 root root 4096 Apr 13 15:03 employees -rw-r--r-- 1 root root 228589568 Apr 13 15:03 ibdata1 -rw-r--r-- 1 root root 0 Apr 13 15:03 mysql-stderr -rw-r--r-- 1 root root 379 Apr 13 15:03 mysql-stdout -rw-r--r-- 1 root root 1 Apr 13 15:03 xtrabackup_binlog_info -rw-r--r-- 1 root root 60 Apr 13 15:03 xtrabackup_checkpoints -rw-r--r-- 1 root root 2048 Apr 13 15:02 xtrabackup_logfile -rw-r--r-- 1 root root 53 Apr 13 15:03 xtrabackup_slave_info [root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --apply-log /root/backup/2010-04-13_15-02-37 [root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --copy-back /root/backup/2010-04-13_15-02-37 [root@SQL1 ~]# chown -R mysql:mysql /usr/local/mysql/data [root@SQL1 ~]# rm -rf /usr/local/mysql/data/xtrabackup* ####(tar方式備份)的還原操做###### [root@SQL1 ~]# mkdir /root/backup/db [root@SQL1 ~]# tar -ixvf all_databases.tar -C /root/backup/db(先解壓,注意必須跟-i參數) [root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --apply-log /root/backup/db [root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --copy-back /root/backup/db [root@SQL1 ~]# chown -R mysql:mysql /usr/local/mysql/data [root@SQL1 ~]# rm -rf /usr/local/mysql/data/xtrabackup [root@SQL1 ~]# rm -rf /root/backup/db ####(tar+gzip方式備份)的還原操做###### [root@SQL1 ~]# mkdir /root/backup/db [root@SQL1 ~]# tar -izxvf all_databases.tar.gz -C /root/backup/db(先解壓,注意必須跟-i參數) [root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --apply-log /root/backup/db [root@SQL1 ~]# innobackupex-1.5.1 --defaults-file=/usr/local/mysql/etc/my.cnf --user=root --host=192.168.1.52 --password=XXXX --port=3306 --socket=/tmp/mysql.sock --copy-back /root/backup/db [root@SQL1 ~]# chown -R mysql:mysql /usr/local/mysql/data [root@SQL1 ~]# rm -rf /usr/local/mysql/data/xtrabackup [root@SQL1 ~]# rm -rf /root/backup/db |