码迷,mamicode.com
首页 > 其他好文 > 详细

阿里云RDS备份数据恢复

时间:2015-06-03 19:50:47      阅读:4278      评论:0      收藏:0      [点我收藏+]

标签:备份   恢复   rds   阿里云   

公司使用的阿里云的RDS,设置的备份策略是每天凌晨3点进行全量备份。

备份文件都在阿里云上面,内网没有做任何备份。

自从携程事件出现后,我觉得公司内网也要做下数据库备份。

程序代码都在内网svn服务器,所以线上即使全删除了,也没有关系。


数据库备份,本来考虑是导出sql文件,发现单独一个千万数据表,导出sql文件大小有12G。

要是全部数据库导出,数据太庞大了。


后来发现阿里云的RDS全量备份文件,只有9G左右。所以将备份文件下载到内网,然后恢复出来就可以了。下载链接是动态链接,每次需要手动下载,比较麻烦。如果需要自动下载,需要自己开发api程序,这个暂时还没有开发好。


线上用的是RDS mysql 5.6,所以内网安装了一台mysql服务器,版本是mysql 5.6.24

方法如下:

yum -y install ncurses-devel cmake

创建用户和用户组

groupadd mysql

useradd -g mysql mysql

usermod -s /sbin/nologin mysql

创建目录

mkdir -p /data/3306/data /data/3306/logs

解压编译

tar zxvf mysql-5.6.24.tar.gz -C /usr/src

cd /usr/src/mysql-5.6.24

cmake  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \

-DMYSQL_DATADIR=/data/3306/data \

-DMYSQL_TCP_PORT=3306 \

-DMYSQL_UNIX_ADDR=/data/3306/mysqld.sock \

-DDEFAULT_CHARSET=utf8 \

-DDEFAULT_COLLATION=utf8_general_ci \

-DWITH_EXTRA_CHARSETS=all \

-DWITH_MYISAM_STORAGE_ENGINE=1 \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DENABLED_LOCAL_INFILE=1 \

-DEXTRA_CHARSETS=all \

-DWITH_EMBEDDED_SERVER=1 \

-DWITH_SSL=bundled \

-DWITH_DEBUG=0 \

-DENABLE_DOWNLOADS=1

安装

make

make install

初始化

/usr/local/mysql/scripts/mysql_install_db \

--basedir=/usr/local/mysql \

--datadir=/data/3306/data \

--user=mysql

编辑配置文件

cd /usr/local/mysql

cp my.cnf my.cnf.bak

vi my.cnf

 skip-name-resolve

 basedir = /usr/local/mysql

 datadir = /data/3306/data

 port = 3306

 server_id = 2

 socket = /data/3306/mysqld.sock

 pid-file = /data/3306/mysql.pid

 max_allowed_packet=16M

 log-error = /data/3306/logs/error.log

设置启动脚本,增加到开机自启动

chown mysql:mysql -R /data/3306

cp /usr/src/mysql-5.6.24/support-files/mysql.server /etc/init.d/mysqld

chmod +x /etc/init.d/mysqld

chkconfig --add mysqld

chkconfig --level 2345 mysqld on

编辑环境变量

vi /etc/profile

最后一行添加

PATH=$PATH:/usr/local/mysql/bin

启动mysql

source /etc/profile

/etc/init.d/mysqld start


增加授权用户

mysql -u root -p

grant all PRIVILEGES on *.* to xx@‘%‘ identified by ‘xx123‘;

flush privileges;

exit;


安装XtraBackup

由于RDS是使用XtraBackup,所以服务器必须安装,注意版本和阿里云的一样,是XtraBackup-2.0.6

https://www.percona.com/downloads/XtraBackup/XtraBackup-2.0.6/binary/Linux/x86_64/percona-xtrabackup-2.0.6-523.tar.gz

安装组件

yum -y  install perl-Time-HiRes libaio* openssl*

yum clean all

安装xtrabackup

tar zxvf percona-xtrabackup-2.0.6-523.tar.gz -C /usr/src/

mv /usr/src/percona-xtrabackup-2.0.6 /usr/local/xtrabackup

添加环境变量

vi /etc/profile

最后一行添加

PATH=$PATH:/usr/local/xtrabackup/bin


source /etc/profile

查看版本

xtrabackup -v

下载解压备份脚本(针对RDS备份文件)

wget http://oss.aliyuncs.com/aliyunecs/rds_backup_extract.sh?

chmod 755 rds_backup_extract.sh


创建目录

mkdir -p /data/3309/data /data/3309/logs

mkdir -p /data/3310/data /data/3310/logs

mkdir -p /data/3311/data /data/3311/logs


解压备份

./rds_backup_extract.sh -f /backup/db_base/hins550127_xtra_20150601030412.tar.gz -C /data/3309/data


恢复数据

innobackupex --defaults-file=/data/3309/data/backup-my.cnf  --apply-log /data/3309/data/

最后一行出现"innobackupex: completed OK!"就说明成功了


编辑配置文件

vi /data/3309/my.cnf


[mysqld]

 basedir = /usr/local/mysql

 datadir = /data/3309/data

 port = 3309

 server_id = 3

 socket = /data/3309/mysqld.sock

 max_allowed_packet=16M

 log-error = /data/3309/logs/error.log

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES


编辑启动脚本

vi /data/3309/start.sh


#!/bin/sh


port=3309

rundir=/data/"$port"

echo "$rundir"

/usr/local/mysql/bin/mysqld_safe --defaults-file="$rundir"/my.cnf --basedir=/usr/local/mysql --port="$port" --user=mysql --datadir="$rundir"/data --pid-file="$rundir"/mysql.pid --socket=/"$rundir"/mysqld.sock &

echo "done"


编辑停止脚本

vi /data/3309/stop.sh


#!/bin/sh


port=3309

rundir=/data/"$port"

pid_file="$rundir"/mysql.pid


    if test -f "$pid_file"

    then

      mysqld_pid=`cat $pid_file`

      echo "Killing mysqld with pid $mysqld_pid"

      kill -TERM  $mysqld_pid

      # mysqld should remove the pid_file when it exits, so wait for it.


      sleep 1

      while [ -s $pid_file -a "$flags" != aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ]

      do

        [ -z "$flags" ] && echo "Wait for mysqld to exit\c" || echo ".\c"

        flags=a$flags

        sleep 1

      done

      if [ -s $pid_file ]

         then echo " gave up waiting!"

      elif [ -n "$flags" ]

         then echo " done"

      fi

      # delete lock for RedHat / SuSE

      if test -f /var/lock/subsys/mysql

      then

        rm /var/lock/subsys/mysql

      fi

    else

      echo "No mysqld pid file found. Looked for $pid_file."

    fi


设置权限

chmod 755 /data/3309/*.sh

chown mysql:mysql -R /data/3309


启动3309实例

/data/3309/start.sh


查看端口

netstat -napt | grep 3309


添加授权账户

mysql -u root -S /data/3309/mysqld.sock

grant all PRIVILEGES on *.* to xx@‘%‘ identified by ‘xx123‘;

flush privileges;

exit;


测试登陆,打开数据库,特别注意innodb表打开是否正常。


如果出现以下

InnoDB: Progress in percent: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

等待很长时间

说明备份文件有问题,重新下载另外的备份文件就可以了。


用wget下载,注意链接用引号,比如 wget -c "下载链接"

wget 下载占用了大量带宽,所以我用迅雷下载,进行限速。

每次手动下载,恢复的时候,需要执行上面一系列步骤,比较麻烦,所以自己写了一个脚本。


#!/bin/bash


#提取时间今天时间

totime=`date -d today +%Y%m%d`

time=`ls -l --color=auto /backup/db_base/ | awk ‘{print $9}‘ | grep $totime`


/data/3309/stop.sh

rm -rf /data/3309/data/*

/root/rds_backup_extract.sh -f /backup/db_base/$time -C /data/3309/data

innobackupex --defaults-file=/data/3309/data/backup-my.cnf  --apply-log /data/3309/data/

chown mysql:mysql -R /data/3309

/data/3309/start.sh

sleep 3

mysql -u root -S /data/3309/mysqld.sock -e "grant all PRIVILEGES on *.* to xx@‘%‘ identified by ‘xx123‘;flush privileges;"


sleep 1

echo "db_base恢复完成"


#删除5天的备份文件

find /backup/db_base -ctime 5 -type f -name "*.tar.gz" -exec rm {} \;


本文出自 “陨落星空” 博客,请务必保留此出处http://xiao987334176.blog.51cto.com/2202382/1657935

阿里云RDS备份数据恢复

标签:备份   恢复   rds   阿里云   

原文地址:http://xiao987334176.blog.51cto.com/2202382/1657935

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!