从库挂机了怎么恢复同步 哪儿有什么岁月静好,只不过是有人帮你顶住了锅而已。服务宕掉通常都在不经意间,一旦从库服务挂掉了怎么办。
在主服务的 binlog dump 线程将指定的 binlog 信息发给从服务时,除了日志内容,还包括本次发送内容在主服务端的 bin-log 日志文件名称以及位置信息。
从服务的 I/O 线程接收到信息后将日志内容写入realy-log 文件(mysql-relay-bin.xxxxxx)的末端,并将读取到的主服务端的 bin-log 的文件名和位置记录到 master-info 中(通过 show slave status 中的 Master_Info_File 字段可以看到 master.info 保存的位置),以便下一次读取时能告诉主服务从哪里开始同步。
从服务的 SQL 线程检测到 realy-log 新增了内容后,解析日志文件生成对应的 sql 语句,并应用这些 sql 到数据库,保证主从数据一致性。
所以,及时从库挂掉了,因为有 master.info 记录了上一次同步的位置,只要同步服务再次启动,那就可以从上次同步的位置继续增量同步了。
那话说主库宕了怎么办,这就是另一个悲伤的故事了,就没有从库挂掉这么简单了,如果马上启动那就是最好的解决办法。如果由于硬件或者比较棘手的问题导致没办法立即重启,那就要选一个从库升级为主库,选择的标准是数据最接近主库的,也就是最后一次同步时间最晚的。如果有可能(比如主服务只是数据库无法启动,但机器还在)还要到主服务上拉取最新的 bin-log 进行同步。最后进行一系列设置将选中的从库变更为主库配置。(就不展开说了,因为再展开就露馅儿了,我也不会)
ShardingSphere-JDBC 实现读写分离 主从分离之后,就要做系统的读写分离了,写操作走主节点,读操作走从节点。这就需要数据库中间件来帮忙了,现在比较流行的中间件有Atlas、Cobar、Mycat、Sharding-Sphere,具体选择哪个或者自研,要看各个公司的标准了。
Sharding-Sphere 包括 ShardingSphere-JDBC 和 ShardingSphere-Proxy。
ShardingSphere-JDBC 定位为轻量级 Java 框架,在 Java 的 JDBC 层提供的额外服务。 它使用客户端直连数据库,以 jar 包形式提供服务,无需额外部署和依赖,可理解为增强版的 JDBC 驱动,完全兼容 JDBC 和各种 ORM 框架。
适用于任何基于 JDBC 的 ORM 框架,如:JPA, Hibernate, Mybatis, Spring JDBC Template 或直接使用 JDBC。 支持任何第三方的数据库连接池,如:DBCP, C3P0, BoneCP, Druid, HikariCP 等。 支持任意实现 JDBC 规范的数据库,目前支持 MySQL,Oracle,SQLServer,PostgreSQL 以及任何遵循 SQL92 标准的数据库。 ShardingSphere-JDBC Architecture
接下来简单演示一下 ShardingSphere-JDBC + Spring Boot + MyBatis 实现简单的读写分离。
版本说明
JDK:1.8
Spring Boot:2.3.2.RELEASE (当前最新版本)
mybatis-spring-boot-starter:2.1.3 (当前最新版)
ShardingSphere-JDBC:4.1.1 (当前最新版) |