您的位置:首页 > 数据库

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

2015-09-14 16:35 417 查看

前言:

这篇主要记录下迁移数据到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

******* 爱分享 ******
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: