先简单介绍一下这个工具: 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 并修改文件权限.
来源: http://www.bubuko.com/infodetail-2972643.html