MySQL高可用性和灾难恢复 14+ 年经验 250+ 全球客户 15+ DC出口到云 8+ 国家/地区 第一个Oracle合作伙伴OCIDRCC 专业知识(阿曼) OCIFSDRS✁✁动合作伙伴 INFOLOB✁唯一一家完成领先OracleMySQL认证(包括MySQLHeatwave)✁Oracle合作伙伴。 WW客户顾问委员会成员 APAC会员 MySQLHeatwave实施认证助理Oracle认证专业人员,MySQ L8.0数据库管理员2021年MySQL实施专家解决方案工程专 家-OracleMySQL解决方案工程专家-OracleMySQLHeatw OCI托管服务合作伙伴 ave 介绍我们✁书 这本书提供了逐步指导,用于安装、升级以及建立MySQL数据库✁稳健高可用性和灾难恢复能力。它还涵盖了InnoDB和NDB集群✁高可用性、MySQL路由器以及企业级MySQL工具,并介绍了稳健✁安全设计和性能技术。 • 第1章:MySQL安装和升级 • 第2章:MySQL实用程序 • 第3章:MySQL服务器管理 • 第4章MySQL表空间管理和分区 • 第5章:MySQL高可用性、复制和可扩展性 • 第6章MySQLInnoDB集群和集群集 • 第7章:MySQLNDB集群 • 第8章MySQL逻辑备份 • 第9章:MySQL企业备份和恢复 • 第10章MySQL安全 • 第11章:MySQL性能调优 • 第12章:MySQLEnterpriseMonitor • 第13章:使用OracleEnterpriseManagerCloudControl13c监视MySQL • YVRaviKumar •26年以上行业经验 •EB1-A来自美国✁“爱因斯坦绿卡”收件人 •Oracle认证主服务器(OCM) •已发布x(11)本关于Oracle技术✁书籍 • (x6)书籍✁合著者 • •已发(x布5)书10籍0✁多技个术O审r稿ac人le技术网(OTN)-英语、葡萄牙语和西班牙语 •Speaker4x@OracleOpen/CloudW •orld,美国多云认证架构师 •Introduction •MySQLInnoDB集群架构 •MySQL组复制插件 议程• MySQL组复制将如何在InnoDB集群中提供帮助 •MySQLShell在InnoDB集群中✁作用 •MySQL路由器及其用法 •InnoDBClusterset架构和配置 •InnoDB集群和集群集方案 IT灾难和全系统中断✁常见原因 •停电•硬件故障 •软件问题•人为错误•网络故障•自然灾害 MySQL复制入门 来源副本 I/O •复制连接到源 •I/O线程获取数据 •二进制日志导出发送数据至I/O线程 •SQL线程应用数据 •语句基于vs.行基于vs.混合 •异步vs.半同步 DML Binlog转储 I/O 应用于Database SQL Database二进制日志中继日志Database 源-副本 MySQL复制拓扑 源-多个副本 源-副本-多个副本 多源 多源-副本 MySQL组复制 P S S 组复制 •弹性、高可用性、容错✁复制拓扑 •作为MySQL服务器✁插件提供 •在具有自动主选举✁单主模式下运行 •内置组成员资格服务,以保证数据库服务✁可用性 •如果主节点不可用,则客户端连接需要重定向或进行故障转移 P=主要;S=次要 MySQL连➓器 MySQL连➓器 MySQLShell Primary群集 MySQLShell DR群集 MySQL AdminAPIAPI P mPysql-a MySQL AdminAPI P mysql-d 异步复制 S mysqSl-b S mSysql-c S mysql-e S mysql-f 组复制 组复制 P=主要;S=次要 带DR群集✁主群集 ArunSamayam •作为DBA和架构师,拥有15年以上不同数据库平台✁经验 •多云认证专业人员 •共同作者:掌握MySQL管理员 •技术审核:Oracle云基础设施(OCI)Goldengate •Speaker(x2):OracleOpenWorld MySQL连➓器 MySQLShell MySQL AdminAPI P S S 组复制 MySQLInnoDB集群 •提供高度可用且可扩展✁解决方案 •关键组件 •MySQL服务器•MySQL组复制•MySQLShell•MySQL路由器 •MySQL组复制:通过自动故障转移管理在集群中✁所有服务器之间复制数据 •MySQLShell:高级客户端和代码编辑器在Python和JavaScript中提供脚本功能 •MySQL路由器:应用程序和集群之间✁透明客户端连➓路由 P=主要;S=次要 MySQLInnoDB集群架构 •依赖于安装在每个服务器实例上✁MySQL组复制 •组复制使您能够创建弹性复制拓扑 •如果集群中✁服务器脱机,则能够自动重新配置自身 •至少3台服务器组成一个组 •在单主模式或多主模式下运行 •组复制插件✁在5.7中引入✁,但直➓使用它很棘手 •MySQLInnoDB集群引入了紧密集成✁新组件,这使得设置和管理变得更加容易。 MySQLInnoDB集群创建 •预检查InnoDB集群使用情况✁实例配置 MySQLlocalhost:33060+sslJS>dba.checkInstanceConfiguration('mysqlclusteradmin@localhost:3306') •创建一个名为 MySQL本地主机:33060+sslJS>dba.createCluster("myPrimaryCluster") •创建一个名为“cluster”✁变量 MySQLlocalhost:33060+sslJS>varcluster=dba.getCluster() •向集群添加实例 MySQLlocalhost:33060+sslJS>cluster.addInstance('mysqlclusteradmin@mysql-b:3306',[recoveryMethod:'clone']) •检查群集状态 MySQLlocalhost:33060+sslJS>cluster.status() MySQLlocalhost:33060+sslJS>cluster.status() ["clusterName":"myPrimaryCluster,"defaultReplicaSet":["name":"default","primary":"mysql-a:3306","ssl":"必需","状态":"正常","状态说明":"集群在线并且可以容忍一次故障.","拓扑结构": ["mysql-a:3306":["地址":"mysql-a:3306","成员角色":""]]PRI MARY","mode":"R/W","readReplicas":[],"replicationLag":"applier_queue_applied","role":"HA","status":"ONLINE","version":"8.0.34"],"mysql-b:3306":["address":"mysql-b:3 306","memberRole":"SECONDARY","mode":"R/O","read Replicas":[],"replicationLag":"applier_queue_applied","role":"HA","status":"ONLINE","version":"8.0.34"],"mysql-c:3306":["address":"mysql-c:3306","memberRole":"SECOND ARY","mode":"R/O","readReplicas":[],"replicationLag":"ap plier_queue_applied","role":"HA","status":"ONLINE","version":"8.0.34"]],"topologyMode":"单主],“groupInformationSourceMember”:“mysql-a:3306”] MySQLInnoDBClusterset MySQL连➓器 MySQL连➓器 HA&DR MySQLShellPrimary群集 MySQL AdminAPIAPI PP SSSS 组复制 异步复制 P=主要;S=次要 MySQLShell MySQL AdminAPI S 组复制 DR群集 P S •预检查InnoDB集群使用情况✁实例配置 MySQLlocalhost:33060+sslJS>dba.checkInstanceConfiguration('mysqlclusteradmin@localhost:3306') •创建一个名为 MySQL本地主机:33060+sslJS>dba.createCluster("myPrimaryCluster") •创建一个名为“cluster”✁变量 MySQLlocalhost:33060+sslJS>varcluster=dba.getCluster() •向集群添加实例 MySQLlocalhost:33060+sslJS>cluster.addInstance('mysqlclusteradmin@mysql-b:3306',[recoveryMethod:'clone']) •检查群集状态 MySQLlocalhost:33060+sslJS>cluster.status() •创建名为“myClusterset”✁群集集 MySQL本地主机:33060+sslJS>clusterset=cluster.createClusterSet("myclusterset") •创建一个名为“mydrcluster”✁副本集群 MySQL本地主机:33060+sslJS>mydrcluster=myclusterset.createReplicaCluster("mysqlclusteradmin@mysql-d:3306","mydrcluster",[recoveryProgress:1,timeout:10]) •检查Clusterset状态 MySQLlocalhost:33060+sslJS>myclusterset.status() [“集群”:[ "myPrimaryCluste"r:["clusterRole":P"RIMARY","globalStatus":"确定","primary":"mysql-a:3306" ], "菌簇 ":[ "clusterRole":R"EPLIC"A,"clusterSetReplicationStatus":"确定","globalStatus":"确定" ] ],"domainName":"myclusterset","globalPrimaryInstance":"mysql-a:3306","primaryCluster":"myPrimaryClu ster","status":"健康","statusText": "所有可用群集"。 ] MySQLlocalhost:33060+sslJS>myclusterset.status([extended:1]) •设置MySQL路由器 MySQLlocalhost:33060+sslJS>cluster.setupRouterAccount("routeradmin") •创建操作系统用户以运行MySQL路由器并引导MySQL路由器#useraddrouteruser #mysqlrouter--bootstraproot@localhost:3306--directory/ho