记一次数据库迁移,从分布式数据库drds到单机rds

迫于项目日渐式微,为节约成本,于是准备从drds上撤下来,换回使用单机的rds,此为背景。

先说说大体的思路,此次迁移,只涉及到数据库的改动,所以理论上讲,只需要在数据迁移完后在项目的配置文件里把数据库的相关配置改掉即可,不过drds的事务开启前需要特别执行一句”select last_txc_xid()”,所以需要在项目里把这一句的相关代码全部删掉,除此外再无其他。迁移开始前一天,需要提前把数据表在迁入的数据库上(下称B库)建好,然后把大表(千万上亿行数据)的数据提前迁入,如果停机时间充足,这步不做也可以,之后选定时间,停机迁入,改完配置后测试即可。

1.先用mysqldump或者在drds面板把数据表结构导出,然后在B库里建好表(大表可能需要进行分区表处理),做完记得核对表的数量是否正确,是否有缺漏。这里drds加了一些特有的建表关键字,需要去掉,如需分区表,相应的语句也要加上。

mysqldump -h数据库地址 -u用户名 -p密码 -d 库名  > 文件名.sql

2.在B库建好表后,进行一下必要的检查。

3.从A库导出大表的数据,提前导入B库。

#导出数据
mysqldump -h数据库地址 -u用户名 -p密码 库名 表名 --max_allowed_packet=1073741824 --net_buffer_length=16384 -t --where=" create_time<'2018-11-05'" > 表名.sql
#导入数据
mysql -h数据库地址 -u用户名 -p  库名 < 数据文件名.sql 

4.在停机时间内,对其他的小表数据进行迁移,语句同上,注意这里要加语句忽略已经导出的表;

#导出数据
mysqldump --h数据库地址 -u用户名 -p密码 库名  --ignore-table=前面导出的表 -e --max_allowed_packet=1073741824 --net_buffer_length=16384 -t > other.sql

5.改掉代码里的数据库配置,进行一些必要的测试。

6.迁移完成。