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  

 

posted @ 2020-11-14 12:09  pwcc  阅读(579)  评论(0)    收藏  举报