CentOS 6.5安装XtraBackup 还原RDS Mysql备份文件到本地Mysql服务器

有个网站的数据库用了下RDS,本文记录将RDS备份文件backup.gz还原到本地Mysql服务器中的流程。

顺便解决了innobackupex_55: command not found报错的问题。

MySQL

安装XtraBackup工具,去官网根据对应系统版本,安装XtraBackup,我安装的是比较经典稳定的2.1.5版

wget https://www.percona.com/downloads/XtraBackup/XtraBackup-2.1.5/RPM/rhel6/x86_64/percona-xtrabackup-2.1.5-680.rhel6.x86_64.rpm

安装依赖包

yum install -y perl-DBD-MySQL perl-DBI  perl-Time-HiRes libaio*

安装

rpm -ivh percona-xtrabackup-2.1.5-680.rhel6.x86_64.rpm

查看安装成功没有

rpm -qa |grep  xtrabackup

显示

percona-xtrabackup-2.1.5-680.rhel6.x86_64

rpm -ql percona-xtrabackup-2.1.5-680.rhel6.x86_64

显示

/usr/bin/innobackupex
/usr/bin/innobackupex-1.5.1
/usr/bin/xbcrypt
/usr/bin/xbstream
/usr/bin/xtrabackup
/usr/bin/xtrabackup_55
/usr/bin/xtrabackup_56
/usr/share/doc/percona-xtrabackup-2.1.5
/usr/share/doc/percona-xtrabackup-2.1.5/COPYING

使用wget从下载备份文件,下载下来的文件需要重新命名 使用mv命令重命名为backu.gz

下载xtrabackup程序完成后,首先解压backup.gz,再使用xtrabackup中附带的解包工具进行解包。
执行命令:

mkdir -p /home/mysql/data_dir && gzip -d -c backup.gz | xbstream -x -C /home/mysql/data_dir

完成解压及解包后应用innodb的redo-log,执行命令(注意百度教程中是错的)

以下是百度教程中的错误命令:

innobackupex_55 --defaults-file=/home/mysql/data_dir/backup-my.cnf --apply-log /home/mysql/data_dir

但是,innobackupex_55命令执行后报错,如下:

# innobackupex_55 --defaults-file=/home/mysql/data_dir/backup-my.cnf --apply-log /home/mysql/data_dir
-bash: innobackupex_55: command not found

发百度工单瞎耽误工夫,最后自己搞定了,正确的命令为:

innobackupex --defaults-file=/home/mysql/data_dir/backup-my.cnf --apply-log /home/mysql/data_dir

执行后出现以下信息则说明成功了

命令执行完毕后,参考/home/mysql/data_dir/backup-my.cnf文件修改mysql数据库配置中的innodb_log_file_size参数;
使用/home/mysql/data_dir文件夹作为数据目录启动mysql即可。

vi /etc/my.cnf

将原来的datadir = /usr/local/mysql/var注释掉(怎么注释?语句前面加一个#号)
然后将以下的配置加入my.cnf文件中,注意加在原my.cnf文件中的[mysqld]下面,:wq命令保存

[mysqld]
innodb_checksum_algorithm=innodb
innodb_log_checksum_algorithm=innodb
innodb_data_file_path=ibdata1:32M:autoextend
innodb_log_files_in_group=2
innodb_log_file_size=268435456
innodb_fast_checksum=0
innodb_page_size=16384
innodb_log_block_size=512
innodb_undo_tablespaces=0

然后重启Mysql服务

/etc/init.d/mysql restart

编译支持mysql-5.1.73版本的xtrabackup

一、基础介绍

mysql5.1在源码中配备了两个版本的innodb存储引擎源码:innobase和innodb_plugin,编译安装的时候可以通过参数–with-plugins=innobase,innodb_plugin来指定是否将innodb存储引擎引入,具体这两个参数引入对编译后的mysql产生怎样的差异,后面再做解析。然而对于PerconaXtraBackup,在release版本中有2.0,2.1,2.2三个大版本,然后每个版本都是与mysql发布的innodb存储引擎版本对应,举例来说:

percona-xtrabackup-2.0.8在BUILD.txt中指定了utils/build.sh参数如下:

The script needs the codebase for which the building is targeted, you must
provide it with one of the following values or aliases:

  ================== =========  =============================================
  Value              Alias      Server
  ================== =========  =============================================
  innodb51_builtin   5.1    build against built-in InnoDB in MySQL 5.1
  innodb51           plugin build against InnoDB plugin in MySQL 5.1
  innodb55           5.5    build against InnoDB in MySQL 5.5
  xtradb51           xtradb     build against Percona Server with XtraDB 5.1
  xtradb55           xtradb55   build against Percona Server with XtraDB 5.5
  innodb56           5.6        build against InnoDB in MySQL 5.6
  ================== =========  =============================================

而在percona-xtrabackup-2.1.9在BUILD.txt中指定了utils/build.sh参数如下:

The script needs the codebase for which the building is targeted, you must
provide it with one of the following values or aliases:

  ================== =========  =============================================
  Value              Alias      Server
  ================== =========  =============================================
  innodb51           plugin build against InnoDB plugin in MySQL 5.1
  innodb55           5.5    build against InnoDB in MySQL 5.5
  xtradb51           xtradb     build against Percona Server with XtraDB 5.1
  xtradb55           xtradb55   build against Percona Server with XtraDB 5.5
  innodb56           5.6        build against InnoDB in MySQL 5.6
  ================== =========  =============================================

解释一下:从percona-xtrabackup2.1开始取消对innodb built-in版本支持,即:用Percona-Xtrabackup2.1备份5.1built-in版本将会出现如下报错:

innobackupex: Error: Support for MySQL 5.1 with builtin InnoDB (not the plugin) was removed in Percona XtraBackup 2.1. The last version to support MySQL 5.1 with builtin InnoDB was Percona XtraBackup 2.0.

二、Percona-Xtrabackup2.0.8编译安装

cd /tmp
wget https://github.com/percona/percona-xtrabackup/archive/percona-xtrabackup-2.0.8.tar.gz
tar xf percona-xtrabackup-2.0.8.tar.gz
cd percona-xtrabackup-percona-xtrabackup-2.0.8
wget http://downloads.mysql.com/archives/mysql-5.1/mysql-5.1.59.tar.gz 
./utils/build.sh 5.1

编译安装完,备份工具保存在 src/xtrabackup_51,打包xtrabackup_51和innobackupex 到目的服务器的/usr/local/bin目录下,即可执行备份

使用shell脚本结合innobackupex自动备份mysql innodb数据库

上篇文章介绍了使用Xtrabackup备份mysql innodb数据库,这次给出一个自动备份的shell脚本,脚本每周六作一次完整备份,其它时间每天作一次增量备份。

  1. #!/bin/bash
  2. #检查命令是否执行成功
  3. if_sucess(){
  4. local command="$1"
  5. $command
  6. if [ $? -ne 0 ];then
  7. echo "error."
  8. touch $error_lock_file
  9. exit 1
  10. fi
  11. }
  12. #检查是否存在锁文件,如果存在就退出。
  13. check_locked(){
  14. if [ -f  "$error_lock_file" ];then
  15. echo "error_lock_file found"
  16. exit 1
  17. fi
  18. }
  19.  
  20. #压缩备份一周的完整与增量备份
  21. compress_old_backup(){
  22. if_sucess "tar czf $old_backup_file_temp $full_backup_dir $incr_backup_dir"
  23. rm -f $old_backup_file
  24. if_sucess "mv $old_backup_file_temp $old_backup_file"
  25. rm -rf $full_backup_dir $incr_backup_dir/*
  26. }
  27. #定义相关变量
  28. backup_base=/data/mysql_backup
  29. full_backup_dir=$backup_base/centos_full_backup
  30. incr_backup_dir=$backup_base/centos_incr
  31. sub_incr_dir=$(date +%w)
  32. old_backup_file=$backup_base/old/centos_old.tar.gz
  33. old_backup_file_temp=$backup_base/old/centos_old_temp.tar.gz
  34. user=devops.webres.wang
  35. password=123456
  36. defaults_file=/etc/mysql/my.cnf
  37. include_db="centos.*|mysql.*"
  38. error_lock_file=$backup_base/error.locked
  39.  
  40. #程序从这里开始
  41. check_locked
  42. mkdir -p  $incr_backup_dir $backup_base/old
  43.  
  44. #周六就作完整备份,其它时间增量备份。
  45. if [ $sub_incr_dir -eq 6 ];then
  46. [ -d "$full_backup_dir" ] && compress_old_backup
  47. if_sucess "innobackupex –user=$user –password=$password  –defaults-file=$defaults_file –no-timestamp –include=$include_db  $full_backup_dir"
  48. echo "incr_base_dir=$full_backup_dir" > $full_backup_dir/incr_base_dir.txt
  49. else
  50. [ -f "$full_backup_dir/incr_base_dir.txt" ] && . $full_backup_dir/incr_base_dir.txt || exit 1
  51. if_sucess "innobackupex –user=$user –password=$password  –defaults-file=$defaults_file –incremental $incr_backup_dir/$sub_incr_dir –no-timestamp  –include=$include_db –incremental-basedir=$incr_base_dir"
  52. echo "$incr_base_dir=$incr_backup_dir/$sub_incr_dir" > $full_backup_dir/incr_base_dir.txt
  53. fi

Percona Xtrabackup备份mysql大数据库(完整备份与增量备份)

Xtrabackup简介

Percona XtraBackup是开源免费的MySQL数据库热备份软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁)。XtraBackup支持所有的Percona Server、MySQL、MariaDB和Drizzle。

XtraBackup优势 :
1、无需停止数据库进行InnoDB热备
2、增量备份MySQL
3、流压缩到传输到其它服务器
4、能比较容易地创建主从同步
5、备份MySQL时不会增大服务器负载

Xtrabackup安装

这里只介绍Ubuntu-12.04下的安装方法,其它系统的安装方法请参考http://www.percona.com/doc/percona-xtrabackup/2.1/installation.html

  1. apt-key adv –keyserver keys.gnupg.net –recv-keys 1C4CBDCDCD2EFD2A

在/etc/apt/sources.list加入:

  1. deb http://repo.percona.com/apt precise main
  2. deb-src http://repo.percona.com/apt precise main

执行update及安装操作

  1. apt-get update
  2. apt-get install percona-xtrabackup

注:precise是Ubuntu-12.04的版本代号,如果是其它系统版本,需要更换。

Xtrabackup工具介绍

安装XtraBackup后,其实会有几个工具:
innobackupex:
这个是其实是下面三个工具的一个perl脚本封装,可以备份MyISAM, InnoDB, XtraDB表。
xtrabackup:
一个由C编译而来的二进制文件,只能备份InnoDB和XtraDB数据。
xbcrypt:
用来加密或解密备份的数据。
xbstream:
用来解压或压缩xbstream格式的压缩文件。
建议使用perl封装的innobackupex来作数据库备份,因为比较容易使用。所以下面只介绍innobackupex的使用。其它的使用参考:http://www.percona.com/doc/percona-xtrabackup/2.1/manual.html

innobackupex使用方法

完整的选项使用请执行innobackupex –help,这里只介绍使用常用的选项进行完整备份及增量备份和还原。

完整备份及还原

假如我们要备份centos和mysql数据库。
备份:

  1. innobackupex –user=root –password=root –defaults-file=/etc/mysql/my.cnf –include="centos.<em>|mysql.</em>"    /data/mysql_backup

这样就会在/data/mysql_backup生成一个带时间的目录,如果不需要带时间,可以使用选项–no-timestamp。
如果想备份成压缩文件,可以使用如下语句:

  1. innobackupex –user=root –password=root –defaults-file=/etc/mysql/my.cnf –include="centos.<em>|mysql.</em>" –no-timestamp –stream=tar ./ | gzip – > devops.webres.wang.tar.gz

还原:
假如完整备份的路径为/data/mysql_backup/full_backup,如果完整备份是压缩文件,需要先解压再还原。

  1. innobackupex –apply-log  /data/mysql_backup/centos_full_backup
  2. innobackupex –copy-back –defaults-file=/etc/mysql/my.cnf /data/mysql_backup/centos_full_backup
  3. chown -R mysql:mysql /var/lib/mysql

增量备份及还原

增量备份是建立在完整备份的基础上的,所以首先确保已经完整备份了一次。
完整备份:

  1. innobackupex –user=root –password=root –include="centos.*"  –no-timestamp /data/mysql_backup/centos_full_backup

现在完整备份的目录为/data/mysql_backup/centos_full_backup。
增量备份:
第一次增量备份:

  1. innobackupex –incremental /data/mysql_backup/inc/20130906 –no-timestamp –incremental-basedir=/data/mysql_backup/centos_full_backup –user=root –password=root –defaults-file=/etc/mysql/my.cnf

第二次增量备份:

  1. innobackupex –incremental /data/mysql_backup/inc/20130907 –no-timestamp –incremental-basedir=/data/mysql_backup/inc/20130906 –user=root –password=root –defaults-file=/etc/mysql/my.cnf

选项–incremental是指定作增量备份 –incremental-basedir选项是指定上一次增量备份的目录(如果是第一次作增量备份,则为完整备份的目录)。
还原:
增量备份的还原操作跟完整的还原有点不一样,首先必须使用–apply-log –redo-only对完整备份的目录及所有增量备份目录进行操作,然后就可以像还原完整备份时的操作了。
对每个备份目录作apply-log redo-only操作(最后一个增量备份不需要redo-only)

  1. innobackupex –apply-log –redo-only /data/mysql_backup/centos_full_backup  –user=root –password=root
  2. innobackupex –apply-log –redo-only /data/mysql_backup/centos_full_backup  –incremental-dir=/data/mysql_backup/inc/20130906 –user=root –password=root
  3. innobackupex –apply-log  /data/mysql_backup/centos_full_backup  –incremental-dir=/data/mysql_backup/inc/20130907 –user=root –password=root

下面就跟还原完整备份时一样了:

  1. innobackupex-1.5.1 –apply-log /data/mysql_backup/centos_full_backup –use-memory=1G –user=root –password=root
  2. innobackupex –copy-back –defaults-file=/etc/mysql/my.cnf /data/mysql_backup/centos_full_backup