一、DMS简介

官网文档:https://docs.aws.amazon.com/zh_cn/dms/latest/userguide/Welcome.html

简单说下其功能:就是用来做数据同步的。比如传统的数据库迁移采用的都是数据库的导出与导入操作,使用它可以进行全量一次性同步也可以实现全量+增量同步。

二、需求简介

项目数据库迁移,采用实时增量同步(其原理也是异步,在时间上有延迟)

三、配置方式

https://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Endpoints.Creating.html

四、数据库表机构丢失

总共丢失了三类数据:主键自增(auto_increment)、表索引、comment信息

五、后续问题

当时同步完之后源库关键,新库提供服务(意味着有新数据写入)

六、处理操作

  • 将新库数据导出备份
  • 删除新库数据表同步表结构
  • 新库数据还原

七、总结

7.1mysqldump命令

AWS RDS无法进行-F刷新binlog,同时实例版本为8.0,需要屏蔽掉其GITD功能

7.2如何规避云产品的坑

https://docs.aws.amazon.com/zh_cn/dms/latest/userguide/CHAP_Troubleshooting.html#CHAP_Troubleshooting.General.MissingSecondaryObjs

做数据迁移之前最好提交个Business技术工单,确认该原理和其中与其他云产品的差异(阿里的DTS可以实现全量DDL、DML同步)。

7.3备份脚本
#!/bin/bash
#功能:数据库备份
#yousong.xiang
#v1.0.2
. /etc/profile

#数据库用户名
##GRANT SELECT, RELOAD, SUPER, LOCK TABLES ON *.* TO 'mysqldumper'@'localhost' identified by 're8Z3db57dltINJdWF5e&2fMu';
##flush privileges ;
dbuser='root'
#数据库用密码
dbpasswd='123456'
#备份时间
backtime=`date '+%Y%m%d%H%M%S'`
t_time=`date '+%Y-%m-%d %H:%M:%S'`

#日志备份路径
logpath='/data/mysqlbakup'
#数据备份路径
datapath='/data/mysqlbakup'

if [ ! -d {datapath} ];then  mkdir{datapath} -p
fi

#日志记录头部
echo "备份时间为{t_time},备份数据库表{dbname} 开始" >> {logpath}/log.log

#获取数据库名
dbname=`mysql -u{dbuser} -p{dbpasswd} -h localhost -e "show databases;" |egrep -v "Database|sys|information_schema|mysql|performance_schema"`

#正式备份数据库
for db indbname; do
  #source=`mysqldump -u {dbuser} -p{dbpasswd} {db}>{logpath}/{db}{backtime}.sql` 2>> {logpath}/mysqllog.log;
  #mysqldump -u{dbuser} -p{dbpasswd} -F -Bdb --master-data={1,2} --single-transaction --events |gzip> {logpath}/{db}{backtime}.sql.gz 2>>{logpath}/mysqllog.log
  mysqldump -u{dbuser} -p{dbpasswd} -h localhost  --no-create-db --no-create-info db --order-by-primary --single-transaction --set-gtid-purged=off |gzip>{logpath}/{db}{backtime}.sql.gz 2>> {logpath}/mysqllog.log
  #备份成功以下操作
  if [ "?" == 0 ];then
    cd datapath

    #删除七天前备份,也就是只保存7天内的备份
    finddatapath -name "*.gz" -type f -mtime +15 -exec rm -rf {} \; > /dev/null 2>&1
    echo "{t_time} 数据库{db} 备份成功!!" >> {logpath}/mysqllog.log
  else
    #备份失败则进行以下操作
    echo "{t_time} 数据库 {db} 备份失败!!" >>{logpath}/mysqllog.log
  fi
done

#备注:以上命令只支持数据导出(如需导出表结构可以将no-create-info参数去掉)
#参考文档:https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html
#关于默认的GTID集无法导入库的原因大致分析了一下应该是跟二进制相关,AWS RDS可能并不支持二进制相关sql语句。具体参考文档:https://dev.mysql.com/doc/refman/5.6/en/replication-gtids-concepts.html
最后修改日期: 2023年12月12日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。