使用xtrabackup备份mysql

一、下载
注:官方分4种包,二进制、源码、deb、rpm,这里直接下载二进制,解压后直接添加PATH变量使用即可


二、安装(二进制包)
tar zxf percona-xtrabackup-2.0.2-461.tar.gz
mv percona-xtrabackup-2.0.2 /usr/local/xtrabackup
echo "export PATH=$PATH:/usr/local/xtrabackup/bin" >> /etc/profile
source /etc/profile


三、备份(只介绍完整备份)
1、开始备份前的检查:
   确认my.cnf中指定了datadir。

2、开始备份
#创建备份目录
mkdir /data/backup/
#备份到本地目录(备份discuz库)
innobackupex --user=root --password=123 --defaults-file=/etc/my.cnf --databases="discuz" --slave-info /data/backup/

注:--slave-info用来产生配置主从需要的:change语句,如下

CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.000025‘, MASTER_LOG_POS=98


#备份到本地目录(不指定--databases选项备份所有库)
innobackupex --user=root --password=123 --defaults-file=/etc/my.cnf --slave-info /data/backup/

#备份到本地目录(备份scm库,打包)
innobackupex --user=root --password=123 --defaults-file=/etc/my.cnf --databases="scm" --slave-info --stream=tar /data/backup/ >/data/backup/xtrabackup_scm.$(date +%Y%m%d-%H%M%S).tar

#备份到本地目录(备份discuz、scm库,打包,压缩)
innobackupex --user=root --password=123 --defaults-file=/etc/my.cnf --databases="discuz scm" --slave-info --stream=tar /data/backup/ | gzip >/data/backup/xtrabackup_scm_discuz.$(date +%Y%m%d-%H%M%S).tgz

#备份到远程服务器(备份discuz、scm库,打包,压缩 ,远程服务器)
innobackupex --user=root --password=123 --defaults-file=/etc/my.cnf --databases="discuz scm" --slave-info --stream=tar /data/backup/ | gzip | ssh -p51022 yangjuying@172.31.0.15 cat ">" /data/backup/xtrabackup_scm_discuz.tgz
注:不推荐把备份到远程服务器的命令用作计划任务,查找相关资料为BUG,会经常挂起,如下:
[01] Streaming ./ibdata1
>> log scanned up to (0 3648378)
>> log scanned up to (0 3648378)
>> log scanned up to (0 3648378)
>> log scanned up to (0 3648378)


四、恢复(把拷贝的日志应用到拷贝的表数据文件的过程)
innobackupex --user=root --password=123 --defaults-file=/etc/my.cnf --apply-log /data/backup/2014-02-26_20-36-49


五、还原(注:直接拷贝;不使用--copy-back)
#如果为压缩包先解压缩:
tar -izxf xtrabackup_scm_discuz.tgz

#进入解压后的目录
cd ...

#修改数据库目录和表文件权限;修改属主、组(mysql不需要还原,不用修改)
目录权限: chmod 700 discuz scm
文件权限: chmod 660 discuz/* scm/*
属主、组: chown -R mysql.mysql *

#停止服务
/etc/init.d/mysqld stop

#datadir下有同名数据库目录删除;拷贝库到datadir;覆盖datadir中的ibdata1 ib_logfile0 ib_logfile1
mv discuz scm ibdata1 ib_logfile0 ib_logfile1 /data/mysql

#启动服务

/etc/init.d/mysqld start


注:不使用官方的--copy-back选项还原是因为执行后会有一个BUG报错:Original data directory is not empty!


(完成)



################################################################################

补充:

1、由于master日志被我purge过,结果使用--slave-info产生的信息xtrabackup_slave_infoxtrabackup_binlog_info中的日志文件、posion不一至,如下

[root@centos-6 2014-02-27_20-25-07]# cat ../2014-02-27_20-23-17/xtrabackup_binlog_info
mysql-bin.000050    98        
[root@centos-6 2014-02-27_20-25-07]# cat ../2014-02-27_20-23-17/xtrabackup_slave_info
CHANGE MASTER TO MASTER_LOG_FILE=‘mysql-bin.000025‘, MASTER_LOG_POS=98

进入数据库查看目前的日志posion和文件

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000050 |       98 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

到配置主从的时候使用哪一个信息需要注意一下。



################################################################################

总结:
1、优点:
   如果要备份的库ENGINE为MYISAM,数据库比较大,使用该工具备份、还原速度比mysqldump快很多;实现不停止数据库即可配置mysql复制。
2、缺点:
   不能单独还原单个innodb的库(在一个生产服务数据库器添加新业务数据库时),解决办法一般是在一个空服务器中,还原备份再mysqldump导出单个库。
3、增量备份这里没有介绍,增量备份只是相对于innodb的表,MyISAM表的数据库还是完全备份。
4、即使要备份的服务器使用独立表空间innodb_file_per_table=1,也无法单独还原innodb库。
5、表空间只会增长,不会缩小,可以使用dump导出,然后删除ibdata表空间文件,再使用mysqldump工具导入 。


######################################################################################################

附:独立表空间配置步骤
mysqldump备份所有库
关闭服务
修改配置文件,添加
innodb_file_per_table=1
启动服务
使用以下命令查看是否成功开启
show variables like ‘%per_table%‘;
导入mysqldump的备份,
完成

######################################################################################################



本文出自 “notepad” 博客,请务必保留此出处http://sndapk.blog.51cto.com/5385144/1364378

使用xtrabackup备份mysql,布布扣,bubuko.com

使用xtrabackup备份mysql

上一篇:oracle 10g 高级复制练习


下一篇:Oracle存储过程及其调用