阿里云RDS备份在本地mysql快速还原

本地准备:

##安装和RDS相同的mysql版本,拿mysql5.6为例

http://www.cnblogs.com/37yan/p/7513605.html

##安装Xtrabackup 包

cd /data/source

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.8/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.8-1.el7.x86_64.rpm

yum install  percona-xtrabackup-24-2.4.8-1.el7.x86_64.rpm

##去RDS控制台下载备份包放到 /data/source 目录下

##下载解压脚本

wget http://oss.aliyuncs.com/aliyunecs/rds_backup_extract.sh?spm=5176.7741817.2.4.dzPsOP&file=rds_backup_extract.sh -O rds_backup_extract.sh

##准备一个backup-my.cnf

vim backup-my.cnf
# This MySQL options file was generated by innobackupex.

# The MySQL server
[mysqld]
innodb_checksum_algorithm=innodb
#innodb_log_checksum_algorithm=innodb
innodb_data_file_path=ibdata1:200M:autoextend
innodb_log_files_in_group=2
innodb_log_file_size=524288000
#innodb_fast_checksum=false
innodb_page_size=16384
#innodb_log_block_size=512
innodb_undo_directory=.
innodb_undo_tablespaces=0


#rds_encrypt_data=false
#innodb_encrypt_algorithm=aes_128_ecb

##使用脚本还原

#!/bin/bash

db_dir=/data/source/mysql/data
systemctl stop mysqld
ps -ef | grep mysqld | grep -v grep | awk '{ print  "kill -9 "  $2}'  | bash

#创建文件夹
cd /data/source
if [ -d $db_dir ];then
   rm -rf  /data/source/mysql
   echo "Delete directory '$db_dir'"
fi
mkdir -p $db_dir
echo "Create directory '$db_dir'"

#解压数据
if [ $1 ];then
   echo "Backup file is: '$1'"
   bash rds_backup_extract.sh -f $1 -C $db_dir
else
   read  -p "Please enter a backup file name:" bak_file
   if [ $bak_file ];then
   echo "Backup file is: '$bak_file'"
   bash rds_backup_extract.sh -f $bak_file -C $db_dir
   else
   echo "Input error"
   exit 0
   fi
fi
echo "`ls -l $db_dir`"

#还原数据库

innobackupex --defaults-file=$db_dir/backup-my.cnf --apply-log $db_dir
chown -R mysql:mysql $db_dir
cp -f backup-my.cnf $db_dir/backup-my.cnf
#启动实例
mysqld_safe --defaults-file=$db_dir/backup-my.cnf --user=mysql --datadir=$db_dir  > /tmp/mysql_demo.lo
g 2>&1 &
sleep 10
mysql_upgrade -uroot

#设置密码

while :
do
  read  -p "Please enter the root@% password:" password

  if [ $password ];then
     echo "The root@% password is ‘$password’ "
     break
  else 
     echo "Input error"
  fi
done

mysql -uroot << EOF
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '$password' WITH GRANT OPTION;
EOF

exit 0
原文地址:https://www.cnblogs.com/37yan/p/7513765.html