Data Migration to AWS RDS - 数据库迁移总结

来源:互联网 发布:c语言生成什么文件 编辑:程序博客网 时间:2024/05/06 19:27

前言:

这篇主要记录下迁移数据到RDS中的一些问题和解决方法,希望帮助后面的小伙伴提高效率。


Tips:

1、明确RDS虽然有副本,但恢复需要重建db_instance,这意味着要改URL,影响应用配置;

2、事先要确定好存储空间是否够用,避免导入一半遇到存储问题;

3、导入的两种方法,"mysql -e << a.sql" 和 “ source a.sql"两种方式 ,两种有些差别,遇错中断不中断啥的,注意一下;

4、对于innodb,“select sum(table_rows) from tables where TABLE_SCHEMA='xsydb3'” 得到的是一个近似值,下面会分享一个按表统计记录数的脚本;

5、重命名database是件很麻烦的事; 

6、中国区暂不支持SSE;


脚本1:db_count.sh

db=$1
com="mysql -hXXXX.XXXX.rds.cn-north-1.amazonaws.com.cn -uMMM -p $db "
sum=0
array=(`$com -e "show tables;"|grep -v Tables_in|awk -F "|" '{printf $1 " "}'`)
for i in "${array[@]}" 
do
    
    c=`$com -e "select count(*) from $i"|grep  -o '[0-9]\+'`
    sum=`expr $sum + $c`
    echo $i: $c
done


echo "total num of $db: $sum"


脚本2:db_import.sh


#!/bin/sh


#ALTER DATABASE  database_name CHARACTER SET utf8 COLLATE utf8_general_ci;



  db=$1
  dbfile=$2
  
  imeron=`date`
  
  dumpfile="/mnt/data/info/$dbfile"
  
  ddl="set names utf8; "
  #ddl="$ddl set global net_buffer_length=1000000;"
  #ddl="$ddl set global max_allowed_packet=1000000000; "
  ddl="$ddl SET foreign_key_checks = 0; "
  ddl="$ddl SET UNIQUE_CHECKS = 0; "
  ddl="$ddl SET AUTOCOMMIT = 0; "



  ddl="$ddl CREATE DATABASE IF NOT EXISTS $db; "
  ddl="$ddl ALTER DATABASE $db CHARACTER SET utf8 COLLATE utf8_general_ci; "
  ddl="$ddl USE $db; "
  ddl="$ddl source $dumpfile; "
  ddl="$ddl SET foreign_key_checks = 1; "
  ddl="$ddl SET UNIQUE_CHECKS = 1; "
  ddl="$ddl SET AUTOCOMMIT = 1; "
  ddl="$ddl COMMIT ; "
  
  echo "====$db=== Import started"
  
  mysql -hXXXXX.XXXX.rds.cn-north-1.amazonaws.com.cn -uUSER -p -e "$ddl"  
  
  # store end date to a variable
  imeron2=`date`
  
  echo "====$db=== Start import:$imeron"
  echo "====$db=== End import:$imeron2"
  
  
  com="mysql -hXXXXX.XXXX.rds.cn-north-1.amazonaws.com.cn -uUSER -p  $db "
  sum=0
  array=(`$com -e "show tables;"|grep -v Tables_in|awk -F "|" '{printf $1 " "}'`)
  for i in "${array[@]}" 
  do
      
      c=`$com -e "select count(*) from $i"|grep  -o '[0-9]\+'`
      sum=`expr $sum + $c`
      echo $i: $c
  done
  
  echo "total num of $db: $sum"


脚本3:db_rename.sh

#!/bin/bash


# Rename the database in RDS
# example: sh .r sales_db_sales sales_db_sales_001


db1=$1
db2=$2


com="mysql -hXXXXX.XXXX.rds.cn-north-1.amazonaws.com.cn -uUSER -p "


$com -e "CREATE DATABASE IF NOT EXISTS $db2 " 
array=(`$com $db1 -e "show tables;"|grep -v Tables_in|awk -F "|" '{printf $1 " "}'`) 
for table in "${array[@]}" 
do
    
    $com -e "RENAME TABLE \`$db1\`.\`$table\` to \`$db2\`.\`$table\`"
done
          


******* 爱分享 ******

0 0
原创粉丝点击