9,mysql 的innobackupex 备份和恢复
1,安装备份包和他的依赖
MyISAM没有提供事务支持,而InnoDB提供了事务支持。
XtraDB是InnoDB存储引擎的增强版本。
2,innobackupex 备份数据库(全备)。
[root@localhost mnt]# innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root /mnt
#备份操作:备份到/mnt 这个目录
#连接到服务:innobackupex 或者 xtrabackup 通过--user和--password 连接到数据库服务, --defaults-file 指定 mysql 配置文件目录。
创建完备份之后的数据还不能马上用来还原,需要回滚未提交事务,前滚提交事务, 让数据库文件保持一致性。
3、prepare 数据库
创建完备份之后的数据还不能马上用来还原,需要回滚未提交事务,前滚提交事务, 让数据库文件保持一致性。
innobackupex 使用--apply-log 来做预备备份,或者叫 prepare。
[root@localhost mnt]# innobackupex --defaults-file=/usr/local/mysql/my.cnf --apply-log /mnt/2016-04-22_17-32-26
成功则会输出:
111225 1:01:57 InnoDB: Shutdown completed; log sequence number 1609228 111225 01:01:57 innobackupex: completed OK!
成功后,备份可以被用来还原数据库了。 prepare 的过程,其实是读取备份文件夹中的配置文件,然后 innobackupex 重做已提交事务,回滚未提交事务,之后数据就被写到了备份的数据文件(innodb 文件)中,并重建日志 文件。
--user-memory:指定 prepare 阶段可使用的内存,内存多则速度快,默认为 10MB
4、恢复数据库
使用 innobackupex --copy-back 来还原备份(recovery)
[root@localhost mnt]# innobackupex --defaults-file=/usr/local/mysql/my.cnf --copy-back /mnt/2016-04-22_17-32-26
innobackupex 会根据 my.cnf 的配置,将所有备份数据复制到 my.cnf 里面指定的 datadir路径 下。
如果恢复成功,最后会有如下提示:
innobackupex: Finished copying back files. 160422 17:34:51
innobackupex: completed OK!
注:datadir必须是为空的,innobackupex --copy-back不会覆盖已存在的文件,还要注意, 还原时需要先关闭服务,如果服务是启动的,那么就不能还原到 datadir。
5、修改权限启动数据库
默认情况下是通过 root 用户恢复的数据,所以 mysql 数据文件夹目录是 root 权限,需 要修改文件的所有者和权限: $ chown -R mysql:mysql /usr/local/mysql/data 最后启动数据库即可。
1.3、备份压缩和流
使用流特性,需要指定--stream 选项,使用 tar 备份:(推荐方法)
innobackupex --defaults-file=/usr/local/mysql/my.cnf --user=root --stream=tar /mnt | gzip - > /mnt/mysqlbak1.tar.gz
可用参数:
--parallel=4: 加速备份,这个选项会指定xtrabackup 备份文件的线程数。
提取 tar 流,需要加i 参数
$ tar -xizf mysqlxbak.tar.gz
1.4、一个 mysql 备份恢复例子
1、对 mysql 的 zztx 库进行备份:
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --database=zztx --stream=tar /data/back_data/ 2>/data/back_data/zztx.log | gzip 1>/data/back_data/zztx.tar.gz
说明:
--database=zztx 单独对 zztx 数据库做备份 ,若是不添加此参数那就那就是对全库做备份
2>/data/back_data/zztx.log 输出信息写入日志中
1>/data/back_data/zztx.tar.gz 打包压缩存储到该文件中
2、此处可以写个脚本做备份(backup.sh)
#!/bin/sh
echo "开始备份..."`date`
log=zztx01_`date +%y%m%d%H%M`.log
str=zztx01_`date +%y%m%d%H%M`.tar.gz
innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --database=zztx --stream=tar /data/back_data/ 2>/data/back_data/$log | gzip 1>/data/back_data/$str
echo "备份完毕..."`date`
3、恢复数据
1) 先停止数据库:service mysqld stop
2) 解压 tar -izxvf zztx.tar.gz -C /data/back_data/db/ (没有 db ,需要 mkdir /data/back_data/db/)
3) 恢复 innobackupex --defaults-file=/etc/my.cnf --user=root --password --apply-log /data/back_data/db/ innobackupex --defaults-file=/etc/my.cnf --user=root --password --copy-back /data/back_data/db/
4) 赋权 chown -R mysql.mysql /var/lib/mysql/*
5) 重启数据库 service mysqld restart