MySQL innobackupex全量备份恢复

    先简单介绍一下这个工具:innobackupex
innobackupex比xtarbackup有更强的功能,它整合了xtrabackup和其他的一些功能,他不但可以全量备份/恢复,还可以基于时间的增量备份与恢复。
innobackupex备份原理
innobackupex首先调用xtrabackup来备份innodb数据文件,当xtrabackup完成后,innobackupex就查看文件xtrabackup_suspended ;然后执行“FLUSH TABLES WITH READ LOCK”来备份其他的文件
innobackupex恢复原理
innobackupex首先读取my.cnf,查看变量(datadir,innodb_data_home_dir,innodb_data_file_path,innodb_log_group_home_dir)对应的目录是存在,确定相关目录存在后,然后先copy myisam表和索引,然后在copy innodb的表、索引和日志。

介绍一下环境:
MySQL:5.6.19
安装路径:/u01/MysqL
数据文件:/u01/MysqL/data
   备份源:/u02/backup
我是异机恢复,和本机操作一样。
一、 全量备份
步骤:
./innobackupex --user=root --password=root --host=172.17.210.112 --parallel=4 --throttle=400 --stream=tar /MysqLbak/innobackupex 2>/MysqLbak/innobackupex/bak.log 1>/MysqLbak/innobackupex/fullbak.tar
注释一下,常用的参数。
--user=root                                         备份操作用户名,一般都是root用户 
--password=root123                             密码
--host=172.17.210.112                         主机ip,本地可以不加
--parallel=4 --throttle=400                      并行个数,根据主机配置选择合适的,认是1个,多个可以加快备份速度。
--stream=tar                                        压缩类型,这里选择tar格式,可以加,可不加。加上文件就小一点,在备份的时候就已经打包好了。
/MysqLbak/innobackupex                        备份存放的目录
2>/MysqLbak/innobackupex/bak.log         备份日志,将备份过程中的输出信息重定向到bak.log
1>/MysqLbak/innobackupex/fullbak.tar      备份文件压缩后的名字
给出不压缩的全备:
./innobackupex --user=root --password=root --host=172.17.210.112 --parallel=4 --throttle=400 /MysqLbak/innobackupex 2>/MysqLbak/innobackupex/bak.log 1>/MysqLbak/innobackupex/

查看日志信息,会出现
141011 09:44:02  innobackupex: Executing FLUSH ENGINE LOGS...
141011 09:44:02  innobackupex: Waiting for log copying to finish

xtrabackup: The latest check point (for incremental): '14275993522'
xtrabackup: Stopping log copying thread.
.>> log scanned up to (14275993522)

xtrabackup: Creating suspend file '/tmp/xtrabackup_log_copied' with pid '19659'
141011 09:44:03  innobackupex: All tables unlocked
141011 09:44:03  innobackupex: Waiting for ibbackup (pid=19659) to finish
xtrabackup: Transaction log of lsn (14275990028) to (14275993522) was copied.

innobackupex: Backup created in directory '/MysqLbak/innobackupex'
141011 09:44:04  innobackupex: Connection to database server closed
innobackupex: You must use -i (--ignore-zeros) option for extraction of the tar stream.
141011 09:44:04  innobackupex: completed OK!
表示备份成功。

二、全量恢复
恢复备份文件要保证datadir文件为空,否则会报如下的错误
[root@newbidb data]# innobackupex --user=root   /data/backup/

IMPORTANT: Please check that the copy-back run completes successfully.
           At the end of a successful copy-back run innobackupex
           prints "completed OK!".

Original data directory is not empty! at /usr/bin/innobackupex line 568.

恢复第一步:应用日志。
[root@newbidb bin]# ./innobackupex --user=root --password=root1 --defaults-file=/etc/my.cnf --apply-log /u02/backup/
恢复第二步:拷贝文件
[root@newbidb bin]# ./innobackupex --user=root --password=root1 --defaults-file=/etc/my.cnf --copy-back /u02/backup/
注释一下,常用的参数。
--defaults-file=/etc/my.cnf     恢复会使用my.cnf文件把需要恢复的文件,恢复到my.cnf指定的位置。
--apply-log                           这是备份时产生的日志,
--copy-back                         这是备份源,解压后的备份文件

恢复需要一点点的时间,出现下面信息表示恢复成功。
innobackupex: Starting to copy InnoDB system tablespace
innobackupex: in '/u02/backup'
innobackupex: back to original InnoDB data directory '/u01/MysqL/data'
innobackupex: copying '/u02/backup/ibdata1' to '/u01/MysqL/data/ibdata1'

innobackupex: Starting to copy InnoDB undo tablespaces
innobackupex: in '/u02/backup'
innobackupex: back to '/u01/MysqL/data'

innobackupex: Starting to copy InnoDB log files
innobackupex: in '/u02/backup'
innobackupex: back to original InnoDB log directory '/u01/MysqL/data'
innobackupex: copying '/u02/backup/ib_logfile1' to '/u01/MysqL/data/ib_logfile1'
innobackupex: copying '/u02/backup/ib_logfile0' to '/u01/MysqL/data/ib_logfile0'
innobackupex: Finished copying back files.

恢复第三步:修改文件权限。
cd 到data目录
chown -R MysqL.MysqL data/

可能出现的报错:
    1、出现下面错误,先初始化一下MysqL
[root@newbidb support-files]# ./MysqL.server start
Starting MysqL...The server quit without updating PID file (/u01/MysqL/data/newbidb.pid).[Failed]
[root@newbidb script]# ./MysqL_install_db --basedir=/u01/MysqL --no-defaults --skip-name-resolve --user=MysqL --datadir=/u01/MysqL/data

    2、权限:应该恢复使用的是root用户,但是MysqL需要MysqL用户去访问。
[root@newbidb support-files]# ./MysqL.server restart
MysqL server PID file Could not be found![Failed]
Starting MysqL.The server quit without updating PID file (/u01/MysqL/data/newbidb.pid).[Failed]

    3、连接MysqL的时候
[root@newbidb bin]# ./MysqL -uroot -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MysqL server through socket '/tmp/MysqL.sock' (2)
没有这个文件,touch  MysqL.sock 并修改文件权限。

 

相关文章

MySQL 死锁 是指两个或多个事务互相等待对方持有的锁,从而导...
在MySQL中,InnoDB引擎通过Next-Key Locking技术来解决幻读问...
在数据库事务管理中,Undo Log 和 Redo Log 是两种关键日志,...
case when概述 sql语句中的case语句与高级语言中的switch语句...
其实很简单,只是为了忘记,做个记录,用的时候方便。 不管是...
1.进入服务,找到mysql服务,在属性里找到mysql的安装路径 2...