数据库的新选择 Amazon Aurora

数据库
0
0
{"value":"[亚马逊云科技提供了100余种产品免费套餐。其中,计算资源 Amazon EC2首年12个月免费,750小时/月;存储资源 Amazon S3 首年12个月免费,5GB标准存储容量;数据库资源 Amazon RDS 首年12个月免费,750小时;Amazon Dynamo DB 25GB存储容量 永久免费](https://aws.amazon.com/cn/free/?nc2=h_ql_pr_ft&all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all&trk=e0213267-9c8c-4534-bf9b-ecb1c06e4ac6&sc_channel=el)。\n\n### **云计算时代 关系型数据库如何实现进化?**\n谈及数据库,在 08 年以前基本上是以单机型数据库为主,比如大家耳熟能详的 Oracle,MySQL,PostgreSQL 等这样的单机数据库来支撑数据存储业务。但是随着互联网的蓬勃发展,接入到互联网的设备越来越多,数据量越来越大,并发处理需求越来越多,大家渐渐发现这种单机关系型数据库已经没有办法满足在互联网遇到的比如大数据存储、高并发等问题。于是,以 Google 为代表的一些互联网公司开始转向 NoSQL 这种分布式的数据库,这是一个牺牲掉关系的模型去追求可扩展性的方向。在过去的近十年来,是 NoSQL 蓬勃发展的一段时期。但是近几年来,大家发现我们很多的业务并没有办法直接以 NoSQL 的模型来生搬硬套。很多已有的业务 ,特别是对于一些传统行业,还有在座的各位遇到的通信领域的场景来说,历史遗留下来的程序都是以关系型数据库为基础的,所以大家发现很难把这些 Old-SQL 的东西放在一个分布式的场景来使用。那有没有办法把单机型的 SQL 的关系模型跟 NoSQL 所带来的分布式的能力结合在一起呢?其实这就是这两年来整个数据库行业的一个大的革命性方向—— NewSQL。\nNewSQL 是指这样一类新式的关系型数据库管理系统,它针对 OLTP 实现读-写工作负载,追求提供和 NoSQL 系统相同的扩展性能,且仍然保持传统数据库支持的 ACID 特性。\nNewSQL 数据库其典型代表有 Google Spanner , VoltDB , Clustrix , NuoDB 等, NewSQL 是既拥有传统 SQL 数据库血统,又能够适应云计算时代分布式扩展的产品,主要包括两类:拥有关系型数据库产品和服务,并将关系模型的好处带到分布式架构上;或者提高关系数据库的性能,使之达到不用考虑水平扩展问题的程度。前一类 NewSQL 包括 Clustrix 、 GenieDB 、 ScalArc 、 ScaleBase 、 NimbusDB ,也包括带有 NDB 的 MySQL 集群、Drizzle 等。后一类 NewSQL 包括 Tokutek 、 JustOne DB 。还有一些\" NewSQL即服务\",包括Amazon的关系数据库服务、 Microsoft 的 SQL Azure、FathomDB 等。\n曾经一位业内人士这样分析过:做云计算但没有数据库的厂商,除了使用不成熟的开源数据库产品和养肥了市场等着上面几家收割,或被排挤出这个利润丰厚的市场外,只有研发数据库一条出路。而这正是云计算厂商代表 Amazon 做出的选择。\n\n![image.png](https://dev-media.amazoncloud.cn/9a21c71e67b14155a6cdc4f103164c20_image.png)\n\n### **[Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) 是 MySQL 的五倍性能**\n不过,NewSQL 就一定是关系型数据库的发展方向吗?亚马逊 Amazon 用自己的产品给出了不一样的答案,那就是 Aurora。\n[Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) 通过将数据库引擎与为数据库工作负载构建的基于 SSD 的虚拟化存储层紧密集成,使性能大幅超过 MySQL,从而减少至存储系统的写入操作,最大程度降低锁竞争并消除数据库进程线程所产生的延迟。根据 SysBench 对 r3.8xlarge 实例进行的测试表明,[Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) 每秒提供超过 500,000 次选择和 100,000 次更新,是在同一硬件上运行相同基准的 MySQL 的 5 倍。\n为什么阿里云要研发新一代的关系型数据库 PolarDB ?\n今年阿里云紧随亚马逊的步伐,自主研发了新一代关系型数据库 PoalrDB。PolarDB 作为国内首个自主研发的通用云数据库,它拥有商业数据库一样的性能,但价格仅为前者的1/10,进一步降低用户的上云成本。作为云托管的关系型数据库,除了关系型数据库的核心特征之外,PoalrDB 更多的关注于如何提供满足用户业务需求的云服务,并且通过技术革新,不断进化,在提供更好的数据库计算力的同时,满足用户以下业务需求:上云成本、OLTP 性能、业务连续性、在线业务扩展、数据安全。\n据悉,9月21日,PolarDB 将推出的公测版本,和 MySQL 完全兼容,即现有 MySQL 应用程序和工具无需修改即可运行,\n解决了存储扩展和 qps 扩展的问题,性能高,成本很低,同时是高可用三副本,共享存储架构。\n### **细看 PolarDB**\n今天不只是阿里云要做这样一款关系型数据库,而是所有的云计算厂商都不可避免的要经历这样一个阶段。那就是云计算时代传统IT计算力的重建和进化。PolarDB 并不是重复 Oracle, IBM 等的脚步,而是一种创新和技术的提升。\n#### **PolarDB 与 Aurora 设计理念如出一辙**\n产品架构上,阿里云 PolarDB 采用了与 [Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) 相同的设计哲学。都放弃了通用分布式数据库 OLTP 多路并发写的支持,采用一写多读的架构设计,简化了分布式系统难以兼顾的理论模型,又能满足绝大多数 OLTP 的应用场景和性能要求。\nPolarDB 采用存储与计算分离的技术架构,同时可以支持更多的只读节点。主节点和只读节点之间是 Active-Active 的 Failover 方式,计算节点资源得到充分利用,由于使用共享存储,共享同一份数据,进一步降低了用户的使用成本,满足公有云计算环境下用户业务弹性扩展的刚性需求。\nPolarDB 的设计思想有几个大的革新。一是通过重新设计特定的文件系统来存取 Redo log 这种特定的 WAL I/O 数据,二是通过高速网络和高效协议将数据库文件和 Redo log 文件放在共享存储设备上,避免了多次长路径I/O的重复操作,相比较 Binlog 这种方式更加巧妙。另外在 DB Server 设计上,采用 MySQL 完全兼容的思路,完全拥抱开源生态,从 SQL 的编译、性能优化器和执行计划等等都保留了传统关系型数据库的特色。并且针对 Redolog 的 I/O 路径,专门设计了多副本共享存储块设备。\n我们知道,分布式数据库一直是数据库领域的热点,具有非常大的实现难度。不管是遵循 CAP 理论,还是 BASE 思想,通用的分布式关系型数据库基本上很难做到技术和商用的完美平衡。与 SQL 标准以及主流数据库兼容, OLTP ACID 事务 100% 支持, 99.99% 的高可用,高性能低延迟并发处理能力,弹性 Scale Up , Scale out 可扩展性,备份容灾和低成本迁移等等,能够完美兼顾所有这些特点的商用关系型数据库还没有出现。\n#### **PolarDB 性能真的比 Aurora 高吗?**\n当年,记得 Aurora 刚刚出来的时候,业界有质疑的声音:“ Aurora会不会充其量就是一个翻版的 MySQL ?”今天,当阿里云全新一代 PolarDB 出来,会不会也会有质疑的声音。\n据业内人士透露,阿里云这款数据库比 [Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) 性能好太多,这是真的吗?如果是真的,那性能比 MySQL 好太多太多了,你服不服?青出于蓝而胜于蓝,不是不无道理。\n我们来看看性能指标吧。业界通常用 SysBench 来测试,包括亚马逊的 Aurora 与 MySQL 的对比,而在阿里云内部是用用户典型场景和数据来对比 PolarDB 和 RDS 的。\n\n### **数据库的重新构想**\n老式关系数据库体系结构:\n\n![image.png](https://dev-media.amazoncloud.cn/94ee3d67f32e4dd488af2583bc21d1a5_image.png)\n\n在过去的30-40年中,这种单一的关系数据库栈没有发生太大的变化。尽管存在用于扩展数据库的不同传统方法(例如,分片、无共享或共享磁盘),但所有这些方法都共享相同的基本数据库体系结构。它们都不能解决大规模的性能、弹性和故障范围的问题,因为紧密耦合的单体基本约束仍然存在。\n为了解决关系数据库的局限性,我们通过将系统分解为基本的构建块来重新定义栈。我们认识到对 **缓存和日志记录层** 创新时机已经成熟。我们可以将这些层移动到专门构建的、可扩展、可自我修复、多租户,以及对数据库专门优化的存储服务中。当我们开始构建分布式存储系统时,[Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) 诞生了。\n### **卸载 REDO 日志:日志即数据库**\n传统的关系数据库在页面中组织数据,当页面被修改时,它们必须定期刷新到磁盘。为了在故障时维护 ACID 语义,页面修改也记录在 REDO 日志记录中,REDO 日志记录以连续流的形式写入磁盘。虽然这种体系结构提供了支持关系数据库管理系统所需的基本功能,但它存在效率低下的问题。例如,一个逻辑写入会变成多个(最多五个)物理磁盘写入,从而导致性能问题。\n数据库管理员试图通过减少页面刷新频率来解决写放大问题。这反过来又恶化了崩溃恢复持续时间的问题。刷新间隔越长,意味着用于重建正确页面从磁盘读取的 REDO 日志记录越多。这会导致恢复较慢。\n在 [Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) 中,日志即数据库。数据库实例将 REDO 日志记录写入分布式存储层,存储层根据需要从日志记录构建页面。数据库实例从不需要刷脏页,因为存储层总是知道页面内容。这提高了数据库的性能和可靠性。由于消除了写放大,并且使用了可扩展的存储集群,写性能大大提高。\n例如,与运行在类似硬件上的 [Amazon RDS](https://aws.amazon.com/cn/rds/?trk=cndc-detail) for MySQL 相比,[Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) MySQL 兼容版在 sysbench 基准测试中显示了5倍的写入 IOPS。数据库崩溃恢复时间大大缩短,因为数据库实例不再需要执行 REDO 日志回放。存储层负责 REDO 日志在读取时的页面生成,从而使新的存储服务不受传统数据库体系结构的约束,因此可以进一步进行创新。\n### **基于单元的架构**\n正如我之前所说,一切都会出现故障。在大型系统中,组件会发生故障,并且经常发生故障,整个实例出现故障,网络故障可以隔离大量基础设施。更不常见的是,由于自然灾害,整个数据中心可能会变得孤立或瘫痪。在 Amazon ,我们处理故障,并且在问题发生之前依靠基于单元的体系结构来解决问题。\nAmazon 有多个地理区域(20个),在每个区域内,我们有多个可用区。利用多个区和区域,设计良好的服务可以在不影响服务可用性的情况下,在组件故障和更大的灾难中生存下来。[Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) 将所有写操作复制到三个区域,以提供更好的数据持久性和可用性。事实上,Aurora 可以在放弃数据可用性的情况下容忍整个区域的失败,并且可以从较大的故障中快速恢复。\n\n![image.png](https://dev-media.amazoncloud.cn/280c99648f7842ceb9a433385d64846e_image.png)\n\n然而,众所周知,复制是资源密集型的,那么,是什么使得 Aurora 能够在提供高性能的同时提供强大的数据复制呢?答案在于仲裁。\n### **仲裁之美**\n一切都会出现故障。系统越大,出现故障的可能性就越大:网络链路、SSD、整个实例或软件组件。即使软件组件没有 bug,它仍然需要定期重启进行升级。\n传统的方法是阻塞 I/O,直到故障转移,并且在出现故障组件时以“降级模式”运行,这种方法在规模较大时存在问题。应用程序通常不能很好地容忍 I/O 中断。通过中等复杂的数学计算,可以证明,在大型系统中,随着系统规模的增大,降级模式下运行的概率接近1。然后,有一个真正令人讨厌的“灰色故障”问题,当组件没有完全失效,而是变慢时,就会出现这种问题。如果系统设计没有预见到这种降级,慢的组件会拖累整个系统的性能。\n[Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) 使用仲裁来解决组件故障和性能下降的问题。写仲裁的基本思想很简单:写入尽可能多的副本,以确保仲裁读取总是找到最新的数据。最基本的仲裁示例是“三取二”:\nVw+Vr>VVw+Vr>V\n\nVw>V/2Vw>V/2\n\nV=3V=3\n\nVw=Vr=2Vw=Vr=2\n例如,您可能要执行三次物理写入,写入仲裁为2。在逻辑写入操作成功之前,您不必等待所有三个操作都完成。如果一次写入失败或速度慢,这是正常的,因为总体操作结果和延迟不会受到异常值的影响。这很重要:即使有什么东西坏了,写入也能成功而且速度很快。\n简单的⅔仲裁允许您容忍整个可用性区域的故障。不过,这还不够好。虽然一个区域的故障是一个罕见的事件,但它不会降低其他区域中组件故障的可能性。使用 Aurora,我们的目标是可用性区域+1:我们希望能够容忍一个区域的丢失,再加上一个故障,而不会造成任何数据持久性丢失,并且对数据可用性的影响最小。我们使用 4/6 的仲裁来实现这一目标:\nVw+Vr>VVw+Vr>V\n\nVw>V/2Vw>V/2\n\nV=6V=6\n\nVw=4Vw=4\n\nVr=3Vr=3\n对于每个逻辑日志写入,我们发出六个物理副本写入,并考虑当其中四个写入完成时写入操作成功。在每个区域有两个副本的情况下,如果整个可用性区域发生故障,则写入仍将完成。如果某个区域出现故障,并且发生其他故障,仍然可以达到读取仲裁,然后通过快速修复恢复写入能力。\n### **快速修复和追赶**\n数据复制有不同的方法。在传统存储系统中,数据镜像或擦除编码发生在整个物理存储单元的级别上,几个单元组合在一个 RAID 阵列中。这种方法使修复速度变慢。RAID 阵列重建性能受到阵列中少数设备功能的限制。随着存储设备越来越大,在重建过程中复制的数据量也会越来越大。\n[Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) 使用了一种完全不同的复制方法,基于分片和扩展架构。Aurora 数据库卷逻辑上分为 10GB 逻辑单元(保护组),每个保护组以六副本复制到物理单元(段)。单个存储段分布在一个大型分布式存储中。当发生故障并取出一个段时,修复单个保护组只需要移动大约 10GB 的数据,这在几秒钟内完成。\n此外,当必须修复多个保护组时,整个存储组都会参与修复过程。这提供了很高的带宽来快速完成整个修复。因此,如果区域故障后又出现另一个组件故障,对于给定的保护组,Aurora 可能会在几秒钟内失去写入仲裁。然而,一个自动启动的修复能够恢复高速可写性。换言之,Aurora 的储存会很快自我修复。\n读取怎么样?仲裁读取代价很高,最好避免。客户端 Aurora 存储驱动程序跟踪哪些段的写入成功。它不需要在常规的页面读取上执行仲裁读取,因为它总是知道从何处获取页面的最新副本。此外,驱动程序跟踪读取延迟,并始终尝试从延迟最低的存储副本读取。唯一需要仲裁读取的情况是在数据库实例重新启动时进行恢复。初始的 LSN 标记必须通过询问存储节点来重建。\n### **创新的基础**\n许多引人注目的新 Aurora 功能都直接由分布式自愈存储体系结构实现。举几个例子:\n- **读可伸缩性**:除了主数据库实例外,在 Aurora 的多个区域中最多可以提供15个读副本,以实现读可伸缩性和更高的可用性。读取副本使用与主机相同的共享存储。\n- **连续备份和时间点恢复**:Aurora 存储层连续透明地将 REDO 日志流备份到 [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail)。您可以执行时间点还原到配置的备份窗口中的任何时间戳。不需要计划快照创建,并且当最接近感兴趣时间的快照距离较远时,不会丢失任何事务。\n- **快速克隆**:Aurora 存储层可以快速创建卷的物理副本,而无需复制所有页面。页面最初在父卷和子卷之间共享,在修改页面时完成写入时的复制。克隆卷时没有重复成本。\n- **Backtrack**:将数据库回退到特定时间点的快速方法,无需从备份中进行完全恢复。误丢了一张表?你可以用 Aurora Backtrack 来回退。\n在 Aurora 存储引擎的基础上建立了更多的关系数据库创新。我们进入了关系数据库的新时代,而 Aurora 只是一个开始。客户的声音是最好的回应。Capital One、Dow Jones、Netflix 和 Verizon 等各行业的领导者都在将关系数据库工作负载迁移到 Aurora,包括 MySQL 和 PostgreSQL 兼容版本。\n#### **1 使用 mysqldump 实用程序创建数据库的转储,然后将该数据导入现有 aurora mysql 数据库集群**\n因为 aurora mysql 与 mysql 兼容,所以该过程与将 mysql 数据导入 rds mysql 的过程类似,可参考文档 [https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.NonRDSRepl.html](https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.NonRDSRepl.html)。\n其整体架构如下图所示:\n\n![image.png](https://dev-media.amazoncloud.cn/3c2d3be3a0b7497cad9d7452a2c047cf_image.png)\n\n##### **1.1 安装并配置好 mysql 数据库**\n我在光环云裸金属服务器上部署了 mysql 数据库,具体部署过程略,可以百度。\n##### **1.2 创建 mysql 数据库的副本**\n###### **1.2.1 设置复制选项**\n编辑文件/etc/my.cnf sudo vi /etc/my.cnf\n更新[mysqld]字段如下:\n[mysqld] log-bin=mysql-bin server-id=1\n\n![image.png](https://dev-media.amazoncloud.cn/41cc2e5f48f4497e8fbd98e34158d39c_image.png)\n\n重启 mysql 服务 service mysqld restart\n###### **1.2.2 创建现有数据库的备份副本**\n\n![image.png](https://dev-media.amazoncloud.cn/57d1f557f4ba4bcab2e4966463df96b0_image.png)\n\n上图中新建了一个数据库 schema_xuyi,现在将 schema_xuyi 进行备份,执行如下命令:\n```\\nmysqldump \\\\\\n--databases schema_xuyi \\\\\\n--master-data=2 \\\\\\n--single-transaction \\\\\\n--order-by-primary \\\\\\n-r backup.sql \\\\\\n-u local_user \\\\\\n-p \\n```\n![image.png](https://dev-media.amazoncloud.cn/d74ba1b3ae5843658a104eb5a289a9d5_image.png)\n\n图中可见生成了备份文件 backup_xuyi.sql\n###### **1.3 创建 aurora mysql 数据库**\n具体创建过程省略,注意与此前的 mysql 数据库版本尽量一致。\n\n![image.png](https://dev-media.amazoncloud.cn/c08eeed3e8a147d2ae267e19b89bbd68_image.png)\n\n远程连接到 aurora mysql 数据库,其初始状态如下图:\n\n![image.png](https://dev-media.amazoncloud.cn/bc61810ba7aa42f3afded6cbab2d662e_image.png)\n\n###### **1.4 使用 mysql 命令远程连接到 aurora mysql 数据库并导入此前的 sql 文件**\n执行命令:\nmysql -h aurora-1-instance-1.cbgpcbkn8knw.us-east-1.rds.amazonaws.com -P 3306 -u admin -p\n其中aurora-1-instance-1.cbgpcbkn8knw.us-east-1.rds.amazonaws.com 部分是 aurora mysql 数据库的终端节点,连接成功\n\n![image.png](https://dev-media.amazoncloud.cn/657034ed3b744faa90f93b442c68d40e_image.png)\n\n执行命令 source backup_xuyi.sql;\n\n![image.png](https://dev-media.amazoncloud.cn/d69975241a024da280d7ae989c36d55a_image.png)\n\n执行命令 source backup_xuyi.sql;\n\n![image.png](https://dev-media.amazoncloud.cn/dcefebc5a6e9442b99385340c4562da1_image.png)\n\nWorkbench 的刷新操作没找到,重新连接了一下 aurora mysql 数据库,可见其状态如下:\n\n![image.png](https://dev-media.amazoncloud.cn/267414b9c34c4d13b619036f3f3fc15a_image.png)\n\n其中已经有了 schema_xuyi 的库,说明 mysqldump 导入成功,本次测试只是为了验证从外部 mysql 导入到 aurora 的过程,至此本次操作完成。\n\n#### **2 将完整备份文件和增量文件从数据库复制到 S3存储桶,然后从这些文件还原 aurora mysql 数据库集群**\n参考文档:[https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Migrating.ExtMySQL.html#AuroraMySQL.Migrating.ExtMySQL.S3](https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Migrating.ExtMySQL.html#AuroraMySQL.Migrating.ExtMySQL.S3)\n##### **2.1 准备工作**\n###### **2.1.1 在本地服务器上安装 percona**\n本地数据库版本是 mysql5.7,建议 percona 版本为 Percona XtraBackup 2.4\n执行以下命令:\nyum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm\nyum install -y percona-xtrabackup-24.x86_64\n\n![image.png](https://dev-media.amazoncloud.cn/a6fd71bfec914c64b70a76eb6d1b60a0_image.png)\n\n从上图可见 Percona-xtrabackup 安装成功。\n###### **2.1.2 准许 aurora mysql 访问S3存储桶**\n在跟 aurora mysql 数据库相同的区域中创建一个存储桶\n过程比较简单,省略。\n\n![image.png](https://dev-media.amazoncloud.cn/95f220f97e5344d2a82e627bca697482_image.png)\n\n创建IAM策略以访问 S3资源\n可以通过 IAM 控制台来创建相应的策略,具体过程省略,可以授予 aurora 访问 S3的所有权限\n\n![image.png](https://dev-media.amazoncloud.cn/1dee100137d1480b98ba31d1fbf35a19_image.png)\n\n创建IAM角色以允许 aurora mysql 访问 Amazon 服务\n具体创建角色的过程省略,可以参考文档: [https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.Authorizing.IAM.CreateRole.html](https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.Authorizing.IAM.CreateRole.html)\n如下图所示,创建了一个角色 role_aurora_to_s3,并将上一步的策略附加到了该角色上。\n\n![image.png](https://dev-media.amazoncloud.cn/96284697ffc74efdba5da8fd73b6a277_image.png)\n\n将角色与 aurora mysql 数据库关联\n具体操作过程见文档 [https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.Authorizing.IAM.AddRoleToDBCluster.html](https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.Authorizing.IAM.AddRoleToDBCluster.html)\n\n![image.png](https://dev-media.amazoncloud.cn/ff464f9529b445d785bfe374d8f03411_image.png)\n\n如上图所示,已经将角色与 aurora mysql 数据库相关联。为了让角色生效还需要修改参数组,我们选择新建一个参数组\n\n![image.png](https://dev-media.amazoncloud.cn/5ed27ae7010b47c58c514cb52d9d624e_image.png)\n\n其中参数“aurora_load_from_s3_role”的值更新为前面所创建角色的ARN。\n\n![image.png](https://dev-media.amazoncloud.cn/4f1f08d99f5847688f3b48e45c92fe8c_image.png)\n\n再修改数据库实例的数据库选项\n\n![image.png](https://dev-media.amazoncloud.cn/49567a531976478eaedf979ab1ac5da3_image.png)\n\n应用修改,立即重启数据库。\n##### **2.2 备份要还原为 aurora mysql 的数据库的文件**\n###### **2.2.1 准备工作**\n为了跟之前的数据库内容区别开来,特意新建了库 schema_test,并在其中新建了一张表 table_test,如下图所示:\n\n![image.png](https://dev-media.amazoncloud.cn/833f4b60d262488bb71f612d84e597bb_image.png)\n\n###### **2.2.2 使用 percona xtrabackup 创建备份**\n全量备份\nxtrabackup --user=root --password=XY-zte110 --backup --target-dir=/root/backupfiles\n\n![image.png](https://dev-media.amazoncloud.cn/cc0d00ed3a834fa58076bb5ff8439800_image.png)\n\n可见在当前目录下生成了一个 backupfiles 目录,该类目下的内容如上图所示。\n通过 Amazon CLI 将备份文件夹整个上传到 s3存储桶(具体上传的过程省略),登录s3控制台可见\n\n![image.png](https://dev-media.amazoncloud.cn/fa54562b5ac640f3a61a3ddccfcd980a_image.png)\n\n##### **2.3 从S3存储桶还原 aurora mysql 数据库**\n登录 aurora 控制台,进入数据库页面\n\n![image.png](https://dev-media.amazoncloud.cn/237cc9d710fb4109acc751e172f3bd43_image.png)\n\n在数据库页面点击“从 S3还原”, 引擎选项->aurora 版本->我们选择的是 mysql5.7\n\n![image.png](https://dev-media.amazoncloud.cn/6b6ab5f522d4439fbd11a80c9c578774_image.png)\n\n点击“下一步”\n\n![image.png](https://dev-media.amazoncloud.cn/fbd29107e4774e7aa534a5ffc4c3089e_image.png)\n\n下一步,进入数据库详细信息页面进行设置,具体内容与新建 aurora 实例的过程相似\n\n![image.png](https://dev-media.amazoncloud.cn/54de995c2fe1479aae4d6a091d037ad5_image.png)\n\n下一步,配置高级设置\n\n![image.png](https://dev-media.amazoncloud.cn/1aceb37e35754125b696d864d4e1433f_image.png)\n\n从这个配置的过程来看,跟创建一个新的 aurora 实例完全相同,由此可以断定 aurora 从 s3还原实际上是重新起了一个 aurora 实例。最后点击“创建数据库”\n\n![image.png](https://dev-media.amazoncloud.cn/fd908576b3534ed485900b3f1f640a32_image.png)\n\n确实是新生成一个数据库实例,耐心等待吧。\n切换到数据库页面,可以看到有两个 aurora 实例\n\n![image.png](https://dev-media.amazoncloud.cn/b1ee9f2cc79b4ad6803e79332798abaa_image.png)\n![image.png](https://dev-media.amazoncloud.cn/ac2c46b315384421be4017478c385649_image.png)\n\n上图中的实例 aurora-instance-xuyi-copy 就是从 s3还原出来的新的 aurora 实例,已经成功创建。现在远程到该实例查看数据库状况\n\n![image.png](https://dev-media.amazoncloud.cn/f7ef28284e7e416ebf004784b5073fa4_image.png)\n\n可见全量复制成功。 至此通过 S3还原 aurora 数据库完成。\n集群可能会产生费用\n\n### **[数据库免费试用链接及上手教程](https://aws.amazon.com/cn/getting-started/databases/get-started/?nc=sn&loc=4&trk=fab55528-7c2e-4517-b90e-65b760ecfc1c&sc_channel=el)**\n#### **你需要的教程这里都有,不仅有视频教程还有文档教程**\n\n![image.png](https://dev-media.amazoncloud.cn/4fbb6642a503476790f25ce39ec69533_image.png)\n\n文档教程分为初级中级与高级\n\n![image.png](https://dev-media.amazoncloud.cn/e7f83262ac0c4a92a7b2d7ec180aa7b9_image.png)","render":"<p><a href=\\"https://aws.amazon.com/cn/free/?nc2=h_ql_pr_ft&amp;all-free-tier.sort-by=item.additionalFields.SortRank&amp;all-free-tier.sort-order=asc&amp;awsf.Free%20Tier%20Types=*all&amp;awsf.Free%20Tier%20Categories=*all&amp;trk=e0213267-9c8c-4534-bf9b-ecb1c06e4ac6&amp;sc_channel=el\\" target=\\"_blank\\">亚马逊云科技提供了100余种产品免费套餐。其中,计算资源 Amazon EC2首年12个月免费,750小时/月;存储资源 Amazon S3 首年12个月免费,5GB标准存储容量;数据库资源 Amazon RDS 首年12个月免费,750小时;Amazon Dynamo DB 25GB存储容量 永久免费</a>。</p>\\n<h3><a id=\\"__2\\"></a><strong>云计算时代 关系型数据库如何实现进化?</strong></h3>\\n<p>谈及数据库,在 08 年以前基本上是以单机型数据库为主,比如大家耳熟能详的 Oracle,MySQL,PostgreSQL 等这样的单机数据库来支撑数据存储业务。但是随着互联网的蓬勃发展,接入到互联网的设备越来越多,数据量越来越大,并发处理需求越来越多,大家渐渐发现这种单机关系型数据库已经没有办法满足在互联网遇到的比如大数据存储、高并发等问题。于是,以 Google 为代表的一些互联网公司开始转向 NoSQL 这种分布式的数据库,这是一个牺牲掉关系的模型去追求可扩展性的方向。在过去的近十年来,是 NoSQL 蓬勃发展的一段时期。但是近几年来,大家发现我们很多的业务并没有办法直接以 NoSQL 的模型来生搬硬套。很多已有的业务 ,特别是对于一些传统行业,还有在座的各位遇到的通信领域的场景来说,历史遗留下来的程序都是以关系型数据库为基础的,所以大家发现很难把这些 Old-SQL 的东西放在一个分布式的场景来使用。那有没有办法把单机型的 SQL 的关系模型跟 NoSQL 所带来的分布式的能力结合在一起呢?其实这就是这两年来整个数据库行业的一个大的革命性方向—— NewSQL。<br />\\nNewSQL 是指这样一类新式的关系型数据库管理系统,它针对 OLTP 实现读-写工作负载,追求提供和 NoSQL 系统相同的扩展性能,且仍然保持传统数据库支持的 ACID 特性。<br />\\nNewSQL 数据库其典型代表有 Google Spanner , VoltDB , Clustrix , NuoDB 等, NewSQL 是既拥有传统 SQL 数据库血统,又能够适应云计算时代分布式扩展的产品,主要包括两类:拥有关系型数据库产品和服务,并将关系模型的好处带到分布式架构上;或者提高关系数据库的性能,使之达到不用考虑水平扩展问题的程度。前一类 NewSQL 包括 Clustrix 、 GenieDB 、 ScalArc 、 ScaleBase 、 NimbusDB ,也包括带有 NDB 的 MySQL 集群、Drizzle 等。后一类 NewSQL 包括 Tokutek 、 JustOne DB 。还有一些&quot; NewSQL即服务&quot;,包括Amazon的关系数据库服务、 Microsoft 的 SQL Azure、FathomDB 等。<br />\\n曾经一位业内人士这样分析过:做云计算但没有数据库的厂商,除了使用不成熟的开源数据库产品和养肥了市场等着上面几家收割,或被排挤出这个利润丰厚的市场外,只有研发数据库一条出路。而这正是云计算厂商代表 Amazon 做出的选择。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/9a21c71e67b14155a6cdc4f103164c20_image.png\\" alt=\\"image.png\\" /></p>\n<h3><a id=\\"Amazon_Aurora__MySQL__10\\"></a><strong>Amazon Aurora 是 MySQL 的五倍性能</strong></h3>\\n<p>不过,NewSQL 就一定是关系型数据库的发展方向吗?亚马逊 Amazon 用自己的产品给出了不一样的答案,那就是 Aurora。<br />\\nAmazon Aurora 通过将数据库引擎与为数据库工作负载构建的基于 SSD 的虚拟化存储层紧密集成,使性能大幅超过 MySQL,从而减少至存储系统的写入操作,最大程度降低锁竞争并消除数据库进程线程所产生的延迟。根据 SysBench 对 r3.8xlarge 实例进行的测试表明,Amazon Aurora 每秒提供超过 500,000 次选择和 100,000 次更新,是在同一硬件上运行相同基准的 MySQL 的 5 倍。<br />\\n为什么阿里云要研发新一代的关系型数据库 PolarDB ?<br />\\n今年阿里云紧随亚马逊的步伐,自主研发了新一代关系型数据库 PoalrDB。PolarDB 作为国内首个自主研发的通用云数据库,它拥有商业数据库一样的性能,但价格仅为前者的1/10,进一步降低用户的上云成本。作为云托管的关系型数据库,除了关系型数据库的核心特征之外,PoalrDB 更多的关注于如何提供满足用户业务需求的云服务,并且通过技术革新,不断进化,在提供更好的数据库计算力的同时,满足用户以下业务需求:上云成本、OLTP 性能、业务连续性、在线业务扩展、数据安全。<br />\\n据悉,9月21日,PolarDB 将推出的公测版本,和 MySQL 完全兼容,即现有 MySQL 应用程序和工具无需修改即可运行,<br />\\n解决了存储扩展和 qps 扩展的问题,性能高,成本很低,同时是高可用三副本,共享存储架构。</p>\n<h3><a id=\\"_PolarDB_17\\"></a><strong>细看 PolarDB</strong></h3>\\n<p>今天不只是阿里云要做这样一款关系型数据库,而是所有的云计算厂商都不可避免的要经历这样一个阶段。那就是云计算时代传统IT计算力的重建和进化。PolarDB 并不是重复 Oracle, IBM 等的脚步,而是一种创新和技术的提升。</p>\n<h4><a id=\\"PolarDB__Aurora__19\\"></a><strong>PolarDB 与 Aurora 设计理念如出一辙</strong></h4>\\n<p>产品架构上,阿里云 PolarDB 采用了与 Amazon Aurora 相同的设计哲学。都放弃了通用分布式数据库 OLTP 多路并发写的支持,采用一写多读的架构设计,简化了分布式系统难以兼顾的理论模型,又能满足绝大多数 OLTP 的应用场景和性能要求。<br />\\nPolarDB 采用存储与计算分离的技术架构,同时可以支持更多的只读节点。主节点和只读节点之间是 Active-Active 的 Failover 方式,计算节点资源得到充分利用,由于使用共享存储,共享同一份数据,进一步降低了用户的使用成本,满足公有云计算环境下用户业务弹性扩展的刚性需求。<br />\\nPolarDB 的设计思想有几个大的革新。一是通过重新设计特定的文件系统来存取 Redo log 这种特定的 WAL I/O 数据,二是通过高速网络和高效协议将数据库文件和 Redo log 文件放在共享存储设备上,避免了多次长路径I/O的重复操作,相比较 Binlog 这种方式更加巧妙。另外在 DB Server 设计上,采用 MySQL 完全兼容的思路,完全拥抱开源生态,从 SQL 的编译、性能优化器和执行计划等等都保留了传统关系型数据库的特色。并且针对 Redolog 的 I/O 路径,专门设计了多副本共享存储块设备。<br />\\n我们知道,分布式数据库一直是数据库领域的热点,具有非常大的实现难度。不管是遵循 CAP 理论,还是 BASE 思想,通用的分布式关系型数据库基本上很难做到技术和商用的完美平衡。与 SQL 标准以及主流数据库兼容, OLTP ACID 事务 100% 支持, 99.99% 的高可用,高性能低延迟并发处理能力,弹性 Scale Up , Scale out 可扩展性,备份容灾和低成本迁移等等,能够完美兼顾所有这些特点的商用关系型数据库还没有出现。</p>\n<h4><a id=\\"PolarDB__Aurora__24\\"></a><strong>PolarDB 性能真的比 Aurora 高吗?</strong></h4>\\n<p>当年,记得 Aurora 刚刚出来的时候,业界有质疑的声音:“ Aurora会不会充其量就是一个翻版的 MySQL ?”今天,当阿里云全新一代 PolarDB 出来,会不会也会有质疑的声音。<br />\\n据业内人士透露,阿里云这款数据库比 Amazon Aurora 性能好太多,这是真的吗?如果是真的,那性能比 MySQL 好太多太多了,你服不服?青出于蓝而胜于蓝,不是不无道理。<br />\\n我们来看看性能指标吧。业界通常用 SysBench 来测试,包括亚马逊的 Aurora 与 MySQL 的对比,而在阿里云内部是用用户典型场景和数据来对比 PolarDB 和 RDS 的。</p>\n<h3><a id=\\"_29\\"></a><strong>数据库的重新构想</strong></h3>\\n<p>老式关系数据库体系结构:</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/94ee3d67f32e4dd488af2583bc21d1a5_image.png\\" alt=\\"image.png\\" /></p>\n<p>在过去的30-40年中,这种单一的关系数据库栈没有发生太大的变化。尽管存在用于扩展数据库的不同传统方法(例如,分片、无共享或共享磁盘),但所有这些方法都共享相同的基本数据库体系结构。它们都不能解决大规模的性能、弹性和故障范围的问题,因为紧密耦合的单体基本约束仍然存在。<br />\\n为了解决关系数据库的局限性,我们通过将系统分解为基本的构建块来重新定义栈。我们认识到对 <strong>缓存和日志记录层</strong> 创新时机已经成熟。我们可以将这些层移动到专门构建的、可扩展、可自我修复、多租户,以及对数据库专门优化的存储服务中。当我们开始构建分布式存储系统时,[Amazon Aurora](https://aws.amazon.com/cn/rds/aurora/?trk=cndc-detail) 诞生了。</p>\\n<h3><a id=\\"_REDO__36\\"></a><strong>卸载 REDO 日志:日志即数据库</strong></h3>\\n<p>传统的关系数据库在页面中组织数据,当页面被修改时,它们必须定期刷新到磁盘。为了在故障时维护 ACID 语义,页面修改也记录在 REDO 日志记录中,REDO 日志记录以连续流的形式写入磁盘。虽然这种体系结构提供了支持关系数据库管理系统所需的基本功能,但它存在效率低下的问题。例如,一个逻辑写入会变成多个(最多五个)物理磁盘写入,从而导致性能问题。<br />\\n数据库管理员试图通过减少页面刷新频率来解决写放大问题。这反过来又恶化了崩溃恢复持续时间的问题。刷新间隔越长,意味着用于重建正确页面从磁盘读取的 REDO 日志记录越多。这会导致恢复较慢。<br />\\n在 Amazon Aurora 中,日志即数据库。数据库实例将 REDO 日志记录写入分布式存储层,存储层根据需要从日志记录构建页面。数据库实例从不需要刷脏页,因为存储层总是知道页面内容。这提高了数据库的性能和可靠性。由于消除了写放大,并且使用了可扩展的存储集群,写性能大大提高。<br />\\n例如,与运行在类似硬件上的 Amazon RDS for MySQL 相比,Amazon Aurora MySQL 兼容版在 sysbench 基准测试中显示了5倍的写入 IOPS。数据库崩溃恢复时间大大缩短,因为数据库实例不再需要执行 REDO 日志回放。存储层负责 REDO 日志在读取时的页面生成,从而使新的存储服务不受传统数据库体系结构的约束,因此可以进一步进行创新。</p>\n<h3><a id=\\"_41\\"></a><strong>基于单元的架构</strong></h3>\\n<p>正如我之前所说,一切都会出现故障。在大型系统中,组件会发生故障,并且经常发生故障,整个实例出现故障,网络故障可以隔离大量基础设施。更不常见的是,由于自然灾害,整个数据中心可能会变得孤立或瘫痪。在 Amazon ,我们处理故障,并且在问题发生之前依靠基于单元的体系结构来解决问题。<br />\\nAmazon 有多个地理区域(20个),在每个区域内,我们有多个可用区。利用多个区和区域,设计良好的服务可以在不影响服务可用性的情况下,在组件故障和更大的灾难中生存下来。Amazon Aurora 将所有写操作复制到三个区域,以提供更好的数据持久性和可用性。事实上,Aurora 可以在放弃数据可用性的情况下容忍整个区域的失败,并且可以从较大的故障中快速恢复。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/280c99648f7842ceb9a433385d64846e_image.png\\" alt=\\"image.png\\" /></p>\n<p>然而,众所周知,复制是资源密集型的,那么,是什么使得 Aurora 能够在提供高性能的同时提供强大的数据复制呢?答案在于仲裁。</p>\n<h3><a id=\\"_48\\"></a><strong>仲裁之美</strong></h3>\\n<p>一切都会出现故障。系统越大,出现故障的可能性就越大:网络链路、SSD、整个实例或软件组件。即使软件组件没有 bug,它仍然需要定期重启进行升级。<br />\\n传统的方法是阻塞 I/O,直到故障转移,并且在出现故障组件时以“降级模式”运行,这种方法在规模较大时存在问题。应用程序通常不能很好地容忍 I/O 中断。通过中等复杂的数学计算,可以证明,在大型系统中,随着系统规模的增大,降级模式下运行的概率接近1。然后,有一个真正令人讨厌的“灰色故障”问题,当组件没有完全失效,而是变慢时,就会出现这种问题。如果系统设计没有预见到这种降级,慢的组件会拖累整个系统的性能。<br />\\nAmazon Aurora 使用仲裁来解决组件故障和性能下降的问题。写仲裁的基本思想很简单:写入尽可能多的副本,以确保仲裁读取总是找到最新的数据。最基本的仲裁示例是“三取二”:<br />\\nVw+Vr&gt;VVw+Vr&gt;V</p>\n<p>Vw&gt;V/2Vw&gt;V/2</p>\n<p>V=3V=3</p>\n<p>Vw=Vr=2Vw=Vr=2<br />\\n例如,您可能要执行三次物理写入,写入仲裁为2。在逻辑写入操作成功之前,您不必等待所有三个操作都完成。如果一次写入失败或速度慢,这是正常的,因为总体操作结果和延迟不会受到异常值的影响。这很重要:即使有什么东西坏了,写入也能成功而且速度很快。<br />\\n简单的⅔仲裁允许您容忍整个可用性区域的故障。不过,这还不够好。虽然一个区域的故障是一个罕见的事件,但它不会降低其他区域中组件故障的可能性。使用 Aurora,我们的目标是可用性区域+1:我们希望能够容忍一个区域的丢失,再加上一个故障,而不会造成任何数据持久性丢失,并且对数据可用性的影响最小。我们使用 4/6 的仲裁来实现这一目标:<br />\\nVw+Vr&gt;VVw+Vr&gt;V</p>\n<p>Vw&gt;V/2Vw&gt;V/2</p>\n<p>V=6V=6</p>\n<p>Vw=4Vw=4</p>\n<p>Vr=3Vr=3<br />\\n对于每个逻辑日志写入,我们发出六个物理副本写入,并考虑当其中四个写入完成时写入操作成功。在每个区域有两个副本的情况下,如果整个可用性区域发生故障,则写入仍将完成。如果某个区域出现故障,并且发生其他故障,仍然可以达到读取仲裁,然后通过快速修复恢复写入能力。</p>\n<h3><a id=\\"_71\\"></a><strong>快速修复和追赶</strong></h3>\\n<p>数据复制有不同的方法。在传统存储系统中,数据镜像或擦除编码发生在整个物理存储单元的级别上,几个单元组合在一个 RAID 阵列中。这种方法使修复速度变慢。RAID 阵列重建性能受到阵列中少数设备功能的限制。随着存储设备越来越大,在重建过程中复制的数据量也会越来越大。<br />\\nAmazon Aurora 使用了一种完全不同的复制方法,基于分片和扩展架构。Aurora 数据库卷逻辑上分为 10GB 逻辑单元(保护组),每个保护组以六副本复制到物理单元(段)。单个存储段分布在一个大型分布式存储中。当发生故障并取出一个段时,修复单个保护组只需要移动大约 10GB 的数据,这在几秒钟内完成。<br />\\n此外,当必须修复多个保护组时,整个存储组都会参与修复过程。这提供了很高的带宽来快速完成整个修复。因此,如果区域故障后又出现另一个组件故障,对于给定的保护组,Aurora 可能会在几秒钟内失去写入仲裁。然而,一个自动启动的修复能够恢复高速可写性。换言之,Aurora 的储存会很快自我修复。<br />\\n读取怎么样?仲裁读取代价很高,最好避免。客户端 Aurora 存储驱动程序跟踪哪些段的写入成功。它不需要在常规的页面读取上执行仲裁读取,因为它总是知道从何处获取页面的最新副本。此外,驱动程序跟踪读取延迟,并始终尝试从延迟最低的存储副本读取。唯一需要仲裁读取的情况是在数据库实例重新启动时进行恢复。初始的 LSN 标记必须通过询问存储节点来重建。</p>\n<h3><a id=\\"_76\\"></a><strong>创新的基础</strong></h3>\\n<p>许多引人注目的新 Aurora 功能都直接由分布式自愈存储体系结构实现。举几个例子:</p>\n<ul>\\n<li><strong>读可伸缩性</strong>:除了主数据库实例外,在 Aurora 的多个区域中最多可以提供15个读副本,以实现读可伸缩性和更高的可用性。读取副本使用与主机相同的共享存储。</li>\\n<li><strong>连续备份和时间点恢复</strong>:Aurora 存储层连续透明地将 REDO 日志流备份到 [Amazon S3](https://aws.amazon.com/cn/s3/?trk=cndc-detail)。您可以执行时间点还原到配置的备份窗口中的任何时间戳。不需要计划快照创建,并且当最接近感兴趣时间的快照距离较远时,不会丢失任何事务。</li>\\n<li><strong>快速克隆</strong>:Aurora 存储层可以快速创建卷的物理副本,而无需复制所有页面。页面最初在父卷和子卷之间共享,在修改页面时完成写入时的复制。克隆卷时没有重复成本。</li>\\n<li><strong>Backtrack</strong>:将数据库回退到特定时间点的快速方法,无需从备份中进行完全恢复。误丢了一张表?你可以用 Aurora Backtrack 来回退。<br />\\n在 Aurora 存储引擎的基础上建立了更多的关系数据库创新。我们进入了关系数据库的新时代,而 Aurora 只是一个开始。客户的声音是最好的回应。Capital One、Dow Jones、Netflix 和 Verizon 等各行业的领导者都在将关系数据库工作负载迁移到 Aurora,包括 MySQL 和 PostgreSQL 兼容版本。</li>\n</ul>\\n<h4><a id=\\"1__mysqldump__aurora_mysql__83\\"></a><strong>1 使用 mysqldump 实用程序创建数据库的转储,然后将该数据导入现有 aurora mysql 数据库集群</strong></h4>\\n<p>因为 aurora mysql 与 mysql 兼容,所以该过程与将 mysql 数据导入 rds mysql 的过程类似,可参考文档 <a href=\\"https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.NonRDSRepl.html\\" target=\\"_blank\\">https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.NonRDSRepl.html</a>。<br />\\n其整体架构如下图所示:</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/3c2d3be3a0b7497cad9d7452a2c047cf_image.png\\" alt=\\"image.png\\" /></p>\n<h5><a id=\\"11__mysql__89\\"></a><strong>1.1 安装并配置好 mysql 数据库</strong></h5>\\n<p>我在光环云裸金属服务器上部署了 mysql 数据库,具体部署过程略,可以百度。</p>\n<h5><a id=\\"12__mysql__91\\"></a><strong>1.2 创建 mysql 数据库的副本</strong></h5>\\n<h6><a id=\\"121__92\\"></a><strong>1.2.1 设置复制选项</strong></h6>\\n<p>编辑文件/etc/my.cnf sudo vi /etc/my.cnf<br />\\n更新[mysqld]字段如下:<br />\\n[mysqld] log-bin=mysql-bin server-id=1</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/41cc2e5f48f4497e8fbd98e34158d39c_image.png\\" alt=\\"image.png\\" /></p>\n<p>重启 mysql 服务 service mysqld restart</p>\n<h6><a id=\\"122__100\\"></a><strong>1.2.2 创建现有数据库的备份副本</strong></h6>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/57d1f557f4ba4bcab2e4966463df96b0_image.png\\" alt=\\"image.png\\" /></p>\n<p>上图中新建了一个数据库 schema_xuyi,现在将 schema_xuyi 进行备份,执行如下命令:</p>\n<pre><code class=\\"lang-\\">mysqldump \\\\\\n--databases schema_xuyi \\\\\\n--master-data=2 \\\\\\n--single-transaction \\\\\\n--order-by-primary \\\\\\n-r backup.sql \\\\\\n-u local_user \\\\\\n-p \\n</code></pre>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/d74ba1b3ae5843658a104eb5a289a9d5_image.png\\" alt=\\"image.png\\" /></p>\n<p>图中可见生成了备份文件 backup_xuyi.sql</p>\n<h6><a id=\\"13__aurora_mysql__118\\"></a><strong>1.3 创建 aurora mysql 数据库</strong></h6>\\n<p>具体创建过程省略,注意与此前的 mysql 数据库版本尽量一致。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/c08eeed3e8a147d2ae267e19b89bbd68_image.png\\" alt=\\"image.png\\" /></p>\n<p>远程连接到 aurora mysql 数据库,其初始状态如下图:</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/bc61810ba7aa42f3afded6cbab2d662e_image.png\\" alt=\\"image.png\\" /></p>\n<h6><a id=\\"14__mysql__aurora_mysql__sql__127\\"></a><strong>1.4 使用 mysql 命令远程连接到 aurora mysql 数据库并导入此前的 sql 文件</strong></h6>\\n<p>执行命令:<br />\\nmysql -h aurora-1-instance-1.cbgpcbkn8knw.us-east-1.rds.amazonaws.com -P 3306 -u admin -p<br />\\n其中aurora-1-instance-1.cbgpcbkn8knw.us-east-1.rds.amazonaws.com 部分是 aurora mysql 数据库的终端节点,连接成功</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/657034ed3b744faa90f93b442c68d40e_image.png\\" alt=\\"image.png\\" /></p>\n<p>执行命令 source backup_xuyi.sql;</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/d69975241a024da280d7ae989c36d55a_image.png\\" alt=\\"image.png\\" /></p>\n<p>执行命令 source backup_xuyi.sql;</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/dcefebc5a6e9442b99385340c4562da1_image.png\\" alt=\\"image.png\\" /></p>\n<p>Workbench 的刷新操作没找到,重新连接了一下 aurora mysql 数据库,可见其状态如下:</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/267414b9c34c4d13b619036f3f3fc15a_image.png\\" alt=\\"image.png\\" /></p>\n<p>其中已经有了 schema_xuyi 的库,说明 mysqldump 导入成功,本次测试只是为了验证从外部 mysql 导入到 aurora 的过程,至此本次操作完成。</p>\n<h4><a id=\\"2__S3_aurora_mysql__148\\"></a><strong>2 将完整备份文件和增量文件从数据库复制到 S3存储桶,然后从这些文件还原 aurora mysql 数据库集群</strong></h4>\\n<p>参考文档:<a href=\\"https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Migrating.ExtMySQL.html#AuroraMySQL.Migrating.ExtMySQL.S3\\" target=\\"_blank\\">https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Migrating.ExtMySQL.html#AuroraMySQL.Migrating.ExtMySQL.S3</a></p>\\n<h5><a id=\\"21__150\\"></a><strong>2.1 准备工作</strong></h5>\\n<h6><a id=\\"211__percona_151\\"></a><strong>2.1.1 在本地服务器上安装 percona</strong></h6>\\n<p>本地数据库版本是 mysql5.7,建议 percona 版本为 Percona XtraBackup 2.4<br />\\n执行以下命令:<br />\\nyum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm<br />\\nyum install -y percona-xtrabackup-24.x86_64</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/a6fd71bfec914c64b70a76eb6d1b60a0_image.png\\" alt=\\"image.png\\" /></p>\n<p>从上图可见 Percona-xtrabackup 安装成功。</p>\n<h6><a id=\\"212__aurora_mysql_S3_160\\"></a><strong>2.1.2 准许 aurora mysql 访问S3存储桶</strong></h6>\\n<p>在跟 aurora mysql 数据库相同的区域中创建一个存储桶<br />\\n过程比较简单,省略。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/95f220f97e5344d2a82e627bca697482_image.png\\" alt=\\"image.png\\" /></p>\n<p>创建IAM策略以访问 S3资源<br />\\n可以通过 IAM 控制台来创建相应的策略,具体过程省略,可以授予 aurora 访问 S3的所有权限</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/1dee100137d1480b98ba31d1fbf35a19_image.png\\" alt=\\"image.png\\" /></p>\n<p>创建IAM角色以允许 aurora mysql 访问 Amazon 服务<br />\\n具体创建角色的过程省略,可以参考文档: <a href=\\"https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.Authorizing.IAM.CreateRole.html\\" target=\\"_blank\\">https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.Authorizing.IAM.CreateRole.html</a><br />\\n如下图所示,创建了一个角色 role_aurora_to_s3,并将上一步的策略附加到了该角色上。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/96284697ffc74efdba5da8fd73b6a277_image.png\\" alt=\\"image.png\\" /></p>\n<p>将角色与 aurora mysql 数据库关联<br />\\n具体操作过程见文档 <a href=\\"https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.Authorizing.IAM.AddRoleToDBCluster.html\\" target=\\"_blank\\">https://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.Authorizing.IAM.AddRoleToDBCluster.html</a></p>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/ff464f9529b445d785bfe374d8f03411_image.png\\" alt=\\"image.png\\" /></p>\n<p>如上图所示,已经将角色与 aurora mysql 数据库相关联。为了让角色生效还需要修改参数组,我们选择新建一个参数组</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/5ed27ae7010b47c58c514cb52d9d624e_image.png\\" alt=\\"image.png\\" /></p>\n<p>其中参数“aurora_load_from_s3_role”的值更新为前面所创建角色的ARN。</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/4f1f08d99f5847688f3b48e45c92fe8c_image.png\\" alt=\\"image.png\\" /></p>\n<p>再修改数据库实例的数据库选项</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/49567a531976478eaedf979ab1ac5da3_image.png\\" alt=\\"image.png\\" /></p>\n<p>应用修改,立即重启数据库。</p>\n<h5><a id=\\"22__aurora_mysql__195\\"></a><strong>2.2 备份要还原为 aurora mysql 的数据库的文件</strong></h5>\\n<h6><a id=\\"221__196\\"></a><strong>2.2.1 准备工作</strong></h6>\\n<p>为了跟之前的数据库内容区别开来,特意新建了库 schema_test,并在其中新建了一张表 table_test,如下图所示:</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/833f4b60d262488bb71f612d84e597bb_image.png\\" alt=\\"image.png\\" /></p>\n<h6><a id=\\"222__percona_xtrabackup__201\\"></a><strong>2.2.2 使用 percona xtrabackup 创建备份</strong></h6>\\n<p>全量备份<br />\\nxtrabackup --user=root --password=XY-zte110 --backup --target-dir=/root/backupfiles</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/cc0d00ed3a834fa58076bb5ff8439800_image.png\\" alt=\\"image.png\\" /></p>\n<p>可见在当前目录下生成了一个 backupfiles 目录,该类目下的内容如上图所示。<br />\\n通过 Amazon CLI 将备份文件夹整个上传到 s3存储桶(具体上传的过程省略),登录s3控制台可见</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/fa54562b5ac640f3a61a3ddccfcd980a_image.png\\" alt=\\"image.png\\" /></p>\n<h5><a id=\\"23_S3_aurora_mysql__212\\"></a><strong>2.3 从S3存储桶还原 aurora mysql 数据库</strong></h5>\\n<p>登录 aurora 控制台,进入数据库页面</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/237cc9d710fb4109acc751e172f3bd43_image.png\\" alt=\\"image.png\\" /></p>\n<p>在数据库页面点击“从 S3还原”, 引擎选项-&gt;aurora 版本-&gt;我们选择的是 mysql5.7</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/6b6ab5f522d4439fbd11a80c9c578774_image.png\\" alt=\\"image.png\\" /></p>\n<p>点击“下一步”</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/fbd29107e4774e7aa534a5ffc4c3089e_image.png\\" alt=\\"image.png\\" /></p>\n<p>下一步,进入数据库详细信息页面进行设置,具体内容与新建 aurora 实例的过程相似</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/54de995c2fe1479aae4d6a091d037ad5_image.png\\" alt=\\"image.png\\" /></p>\n<p>下一步,配置高级设置</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/1aceb37e35754125b696d864d4e1433f_image.png\\" alt=\\"image.png\\" /></p>\n<p>从这个配置的过程来看,跟创建一个新的 aurora 实例完全相同,由此可以断定 aurora 从 s3还原实际上是重新起了一个 aurora 实例。最后点击“创建数据库”</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/fd908576b3534ed485900b3f1f640a32_image.png\\" alt=\\"image.png\\" /></p>\n<p>确实是新生成一个数据库实例,耐心等待吧。<br />\\n切换到数据库页面,可以看到有两个 aurora 实例</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/b1ee9f2cc79b4ad6803e79332798abaa_image.png\\" alt=\\"image.png\\" /><br />\\n<img src=\\"https://dev-media.amazoncloud.cn/ac2c46b315384421be4017478c385649_image.png\\" alt=\\"image.png\\" /></p>\n<p>上图中的实例 aurora-instance-xuyi-copy 就是从 s3还原出来的新的 aurora 实例,已经成功创建。现在远程到该实例查看数据库状况</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/f7ef28284e7e416ebf004784b5073fa4_image.png\\" alt=\\"image.png\\" /></p>\n<p>可见全量复制成功。 至此通过 S3还原 aurora 数据库完成。<br />\\n集群可能会产生费用</p>\n<h3><a id=\\"httpsawsamazoncomcngettingstarteddatabasesgetstartedncsnloc4trkfab555287c2e4517b90e65b760ecfc1csc_channelel_250\\"></a><strong><a href=\\"https://aws.amazon.com/cn/getting-started/databases/get-started/?nc=sn&amp;loc=4&amp;trk=fab55528-7c2e-4517-b90e-65b760ecfc1c&amp;sc_channel=el\\" target=\\"_blank\\">数据库免费试用链接及上手教程</a></strong></h3>\n<h4><a id=\\"_251\\"></a><strong>你需要的教程这里都有,不仅有视频教程还有文档教程</strong></h4>\\n<p><img src=\\"https://dev-media.amazoncloud.cn/4fbb6642a503476790f25ce39ec69533_image.png\\" alt=\\"image.png\\" /></p>\n<p>文档教程分为初级中级与高级</p>\n<p><img src=\\"https://dev-media.amazoncloud.cn/e7f83262ac0c4a92a7b2d7ec180aa7b9_image.png\\" alt=\\"image.png\\" /></p>\n"}
0
目录
关闭