安装perl模块
yum install perl-DBD*
yum install perl-Time-*
安装xtrabackup
rpm包
[root@cluster4 x86_64]# ls -lrt
total 46512
-rw-r--r-- 1 root root 7098196 Aug 5 10:08 percona-xtrabackup-2.1.4-656.rhel6.x86_64.rpm
-rw-r--r-- 1 root root 9344980 Aug 5 10:09 percona-xtrabackup-test-2.1.4-656.rhel6.x86_64.rpm
-rw-r--r-- 1 root root 31178884 Aug 5 10:11 percona-xtrabackup-debuginfo-2.1.4-656.rhel6.x86_64.rpm
安装
[root@cluster4 x86_64]# rpm -ivh *.rpm
warning: percona-xtrabackup-2.1.4-656.rhel6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY
Preparing... ########################################### [100%]
1:percona-xtrabackup ########################################### [ 33%]
2:percona-xtrabackup-test########################################### [ 67%]
3:percona-xtrabackup-debu########################################### [100%]
[root@cluster4 x86_64]# xtrabackup --version
xtrabackup version 2.1.4 for Percona Server 5.1.70 unknown-linux-gnu (x86_64) (revision id: 656)
2个工具
xtrabackup:不能备份Myisam
innobackupex:可以备份Myisam,实质是加read锁
innobackupex:可以备份Myisam,实质是加read锁
innobackupex完全备份与恢复
全量备份
创建目录
/opt/dbdata/mysql_3306/backup
/opt/dbdata/mysql_3306/backup
配置my.cnf文件(其中my.cnf中需要添加以下配置项,或者单独设定一个my.cnf文件,内容如下:)
[mysqld]
datadir=/opt/dbdata/mysql_3306
innodb_data_home_dir=/opt/dbdata/mysql_3306
innodb_data_file_path=ibdata1:10M:autoextend
innodb_log_group_home_dir=/opt/dbdata/mysql_3306
innodb_log_files_in_group=2
innodb_log_file_size=56623104
innodb_page_size=16384
innodb_undo_tablespaces=0
datadir=/opt/dbdata/mysql_3306
innodb_data_home_dir=/opt/dbdata/mysql_3306
innodb_data_file_path=ibdata1:10M:autoextend
innodb_log_group_home_dir=/opt/dbdata/mysql_3306
innodb_log_files_in_group=2
innodb_log_file_size=56623104
innodb_page_size=16384
innodb_undo_tablespaces=0
执行备份
innobackupex --user=root /opt/dbdata/mysql_3306/backup/full --no-timestamp --defaults-file=/etc/my.cnf
完全恢复
- 关闭数据库
- 原数据库目录更名
- 新建同名数据库目录
- 执行恢复
如果不是在原服务器上执行恢复的话,就不用步骤1和2。
如果不是恢复在原数据库端口port和数据目录datadir下,需要修改my.cnf文件。具体参考下文。
关闭数据库
[root@cluster4 mysql_3306]# mysqladmin -uroot shut
修改目录名
[root@cluster4 mysql_3306]# mv mysql_3306 mysql_3306_old
新建数据目录
[root@cluster4 mysql_3306]#mkdir -p mysql_3306
开始恢复
[root@cluster4 dbdata]# innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /opt/dbdata/mysql_3306/backup/full/
注意这里的
my.cnf和原库的my.cnf保持一致即可。或者只需将原my.cnf的mysqld部分拷贝到一个新文件中,在defaults-files中指定。可以将原数据库恢复到你需要的port和datadir中。(各种恢复模式通用)
修改权限
chown -R mysql:mysql mysql_3306
打开数据库
. mysqld_multi start 1
恢复完成!
innobackupex增量备份与恢复
创建备份目录
# mkdir /opt/dbdata/hotbackup
base备份
# innobackupex --user=root --defaults-file=/etc/my.cnf /opt/dbdata/hotbackup/base --no-timestamp
增量备份一
# innobackupex --user=root --defaults-file=/etc/my.cnf /opt/dbdata/hotbackup/incremental1 --incremental-base=/opt/dbdata/hotbackup/base --no-timestamp --incremental
增量备份二
# innobackupex --user=root --defaults-file=/etc/my.cnf /opt/dbdata/hotbackup/incremental2 --incremental-base=/opt/dbdata/hotbackup/incremental1 --no-timestamp --incremental
base恢复
# innobackupex --apply-log --redo-only --use-memory=2G /opt/dbdata/hotbackup/base/
恢复增量一
# innobackupex --apply-log --redo-only --use-memory=2G /opt/dbdata/hotbackup/base --incremental-dir=/opt/dbdata/hotbackup/incremental1
恢复增量二
# innobackupex --apply-log --use-memory=2G /opt/dbdata/hotbackup/base --incremental-dir=/opt/dbdata/hotbackup/incremental2
全部恢复
# innobackupex --apply-log --use-memory=2G /opt/dbdata/hotbackup/base/
至此,只是将数据恢复到了备份目录/opt/dbdata/hotbackup/base下。需要将数据cp到指定的datadir目录中
数据恢复到数据文件目录
# mysqladmin -uroot shut
# mv mysql_3306 mysql_3306_bk2
# mkdir mysql_3306
#innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /opt/dbdata/hotbackup/base/
chown -R mysql:mysql mysql_3306
chmod -R 755 mysql_3306
mysqld_multi start 1
恢复完成!
# innobackupex --apply-log --redo-only --use-memory=2G /opt/dbdata/hotbackup/base/
恢复增量一
# innobackupex --apply-log --redo-only --use-memory=2G /opt/dbdata/hotbackup/base --incremental-dir=/opt/dbdata/hotbackup/incremental1
恢复增量二
# innobackupex --apply-log --use-memory=2G /opt/dbdata/hotbackup/base --incremental-dir=/opt/dbdata/hotbackup/incremental2
全部恢复
# innobackupex --apply-log --use-memory=2G /opt/dbdata/hotbackup/base/
至此,只是将数据恢复到了备份目录/opt/dbdata/hotbackup/base下。需要将数据cp到指定的datadir目录中
数据恢复到数据文件目录
# mysqladmin -uroot shut
# mv mysql_3306 mysql_3306_bk2
# mkdir mysql_3306
#innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /opt/dbdata/hotbackup/base/
chown -R mysql:mysql mysql_3306
chmod -R 755 mysql_3306
mysqld_multi start 1
恢复完成!
innobackupex增量备份与基于时间点的恢复
innobackupex point to time recovery
备份和恢复策略和上述保持一致,注意以下事项:
根据需要恢复到的时间点,来确定需要恢复哪些增量。
在备份的目录中找到binlog文件,用下面命令去查找都需要哪些binlog。
起始点的binlog在最后一个增量备份目录下下的xtrabackup_binlog_info中
分析binlog(binlog都在备份目录中)
mysqlbinlog --start-position=xxxxx mysql-bin.000062 | less
mysqlbinlog --start-datetime="2014-09-06 09:00:00" mysql-bin.000062 | less
mysqlbinlog --start-position=xxxx --stop-position=xxxx mysql-bin.000062 | less
开始基于时间点或者位置的恢复
mysqlbinlog --start-position=xxx mysql-bin.000139|mysql -uroot -p -S /opt/dbdata/mysql_3306/sock/mysql.sock
mysqlbinlog --stop-position=xxx mysql-bin.000140|mysql -uroot -p -S /opt/dbdata/mysql_3306/sock/mysql.sock
mysqlbinlog --start-datetime="2014-09-06 09:00:00" mysql-bin.000062 | less
mysqlbinlog --start-position=xxxx --stop-position=xxxx mysql-bin.000062 | less
开始基于时间点或者位置的恢复
mysqlbinlog --start-position=xxx mysql-bin.000139|mysql -uroot -p -S /opt/dbdata/mysql_3306/sock/mysql.sock
mysqlbinlog --stop-position=xxx mysql-bin.000140|mysql -uroot -p -S /opt/dbdata/mysql_3306/sock/mysql.sock
恢复完成后授权,打开数据库。