面试问题浓缩总结 面试问题浓缩总结
  • Go
  • Java
  • C/C++
  • JavaScript/HTML
  • MySQL
  • Redis
  • MongoDB
  • 操作系统
  • 计算机网络
  • spring全家桶
  • mybatis
  • 中间件
  • 软件相关
  • 系统相关
  • 算法
  • 数据结构
  • 设计模式
  • CMU硕士经典100题
  • 剑指offer
  • 重点手撕代码
  • 程序员面试金典
  • 3月
  • 4月
  • 智力题
  • 业务问题
  • 一些技术
  • 安全相关
APP下载 (opens new window)
GitHub (opens new window)
  • Go
  • Java
  • C/C++
  • JavaScript/HTML
  • MySQL
  • Redis
  • MongoDB
  • 操作系统
  • 计算机网络
  • spring全家桶
  • mybatis
  • 中间件
  • 软件相关
  • 系统相关
  • 算法
  • 数据结构
  • 设计模式
  • CMU硕士经典100题
  • 剑指offer
  • 重点手撕代码
  • 程序员面试金典
  • 3月
  • 4月
  • 智力题
  • 业务问题
  • 一些技术
  • 安全相关
APP下载 (opens new window)
GitHub (opens new window)
  • MySQL

    • 数据库基础
    • 引擎
    • 索引
    • 事务和锁
    • 视图,存储过程,函数,触发器
    • SQL语句及优化
    • 分布式和备份
      • 主从复制
        • 作用
        • 解决的问题
        • 工作原理
      • 读写分离
      • 数据恢复
    • 高频面试题
    • MySQL底层
  • Redis

  • MongoDB

  • 数据库
  • MySQL
小游
2021-03-21

分布式和备份

# 主从复制

将主数据库中的DDL和DML操作通过二进制日志(BINLOG)传输到从数据库上,然后将这些日志重新执行(重做);从而使得从数据库的数据与主数据库保持一致。

# 作用

  1. 主数据库出现问题,可以切换到从数据库。
  2. 可以进行数据库层面的读写分离。
  3. 可以在从数据库上进行日常备份。

# 解决的问题

  • 数据分布:随意开始或停止复制,并在不同地理位置分布数据备份
  • 负载均衡:降低单个服务器的压力
  • 高可用和故障切换:帮助应用程序避免单点失败
  • 升级测试:可以用更高版本的MySQL作为从库

# 工作原理

  • master提交完事务后,写入binlog (Binary log:主数据库的二进制日志)
  • slave连接到master,获取binlog
  • master创建dump线程,推送binglog到slave
  • slave启动一个IO线程读取同步过来的master的binlog,记录到relay log中继日志中 (Relay log:从服务器的中继日志)
  • slave再开启一个sql线程读取relay log事件并在slave执行,完成同步
  • slave记录自己的binglog

img

# 读写分离

读写分离是依赖于主从复制,而主从复制又是为读写分离服务的。因为主从复制要求slave不能写只能读(如果对slave执行写操作,那么show slave status将会呈现Slave_SQL_Running=NO,此时你需要按照前面提到的手动同步一下slave)。

  1. 使用mysql-proxy代理
  2. 使用AbstractRoutingDataSource+aop+annotation在dao层决定数据源。
  3. 使用AbstractRoutingDataSource+aop+annotation在service层决定数据源

# 数据恢复

MySQL的binlog日志是MySQL日志中非常重要的一种日志,记录了数据库所有的DML操作。通过binlog日志我们可以进行数据库的读写分离、数据增量备份以及服务器宕机时的数据恢复。

# 根据位置导出 SQL 文件
mysqlbinlog --no-defaults --base64-output=decode-rows -v \
 --start-position "2508132" --stop-position "2511004" \
 --database test_binlog  mysql-bin.000034 \
 > /home/mysql_backup/test_binlog_step1.sql
 
mysqlbinlog --no-defaults --base64-output=decode-rows -v \
 --start-position "2508813" --stop-position "2509187" \
 --database test_binlog  mysql-bin.000034 \
 > /home/mysql_backup/test_binlog_step2.sql

# 使用 mysql 进行恢复
mysql -u cisco -p < /home/mysql_backup/test_binlog_step1.sql
mysql -u cisco -p < /home/mysql_backup/test_binlog_step2.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14

MySQL 5.7 - 通过 BINLOG 恢复数据 - 来份锅包肉 - 博客园 (cnblogs.com) (opens new window)

编辑 (opens new window)
上次更新: 2021/04/13, 13:33:16
SQL语句及优化
高频面试题

← SQL语句及优化 高频面试题→

Theme by Vdoing | Copyright © 2021-2021 小游
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式