当前位置: 首页 > news >正文

mysql 主从复制 读写分离 MHA

在高可用性和高性能的数据库系统中,MySQL主从复制、读写分离和MHA(Master High Availability)是重要的技术手段。下面详细介绍它们的概念、配置方法和实践。

1. MySQL 主从复制

概念

MySQL主从复制是一种从主数据库(Master)到一个或多个从数据库(Slave)的数据复制机制。主库上的数据变更会异步地复制到从库,从而实现数据的冗余备份和读写分离。

配置方法
  1. 配置主库

    • 编辑my.cnf文件:
      [mysqld]
      server-id=1
      log-bin=mysql-bin
      
    • 重启MySQL服务:
      sudo systemctl restart mysql
      
    • 创建用于复制的用户并授权:
      CREATE USER 'replica'@'%' IDENTIFIED BY 'password';
      GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
      FLUSH PRIVILEGES;
      
    • 获取主库的二进制日志位置:
      SHOW MASTER STATUS;
      
  2. 配置从库

    • 编辑my.cnf文件:
      [mysqld]
      server-id=2
      
    • 重启MySQL服务:
      sudo systemctl restart mysql
      
    • 配置从库:
      CHANGE MASTER TOMASTER_HOST='master_host_ip',MASTER_USER='replica',MASTER_PASSWORD='password',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=position;
      START SLAVE;
      
    • 检查复制状态:
      SHOW SLAVE STATUS\G;
      

2. 读写分离

读写分离是将写操作定向到主库,而将读操作定向到从库,从而提高系统的读性能。实现读写分离的方法有多种,常见的方法是使用中间件,如ProxySQL或MySQL Router。

ProxySQL 配置方法
  1. 安装ProxySQL

    sudo apt-get install proxysql
    
  2. 配置ProxySQL

    • 登录到ProxySQL管理控制台:
      mysql -u admin -p -h 127.0.0.1 -P 6032
      
    • 配置主从服务器:
      INSERT INTO mysql_servers (hostgroup_id, hostname, port, weight) VALUES (1, 'master_host_ip', 3306, 1);
      INSERT INTO mysql_servers (hostgroup_id, hostname, port, weight) VALUES (2, 'slave_host_ip', 3306, 1);
      
    • 配置读写分离规则:
      INSERT INTO mysql_query_rules (rule_id, match_pattern, destination_hostgroup, apply) VALUES (1, '^SELECT', 2, 1);
      
    • 加载并保存配置:
      LOAD MYSQL SERVERS TO RUNTIME;
      SAVE MYSQL SERVERS TO DISK;
      LOAD MYSQL QUERY RULES TO RUNTIME;
      SAVE MYSQL QUERY RULES TO DISK;
      

3. MHA(Master High Availability)

MHA是一个自动化的主从复制故障切换解决方案,能够在主库出现故障时,自动选择新的主库并重新配置复制。

配置方法
  1. 安装MHA

    • 安装MHA Manager:
      sudo apt-get install mha4mysql-manager
      
    • 安装MHA Node:
      sudo apt-get install mha4mysql-node
      
  2. 配置MHA Manager

    • 创建配置文件:

      [server default]
      manager_workdir=/var/log/mha/app1
      manager_log=/var/log/mha/app1/manager.log
      user=manager
      password=password
      repl_user=replica
      repl_password=password
      ssh_user=root[server1]
      hostname=master_host_ip[server2]
      hostname=slave1_host_ip[server3]
      hostname=slave2_host_ip
      
    • 配置SSH免密登录:

      ssh-keygen -t rsa
      ssh-copy-id root@server1
      ssh-copy-id root@server2
      ssh-copy-id root@server3
      
  3. 启动MHA Manager

    • 启动MHA Manager:
      masterha_manager --conf=/etc/mha/app1.cnf
      
    • 检查MHA状态:
      masterha_check_status --conf=/etc/mha/app1.cnf
      

总结

通过配置MySQL主从复制、实现读写分离以及使用MHA进行高可用性管理,可以有效地提高数据库系统的性能和可靠性。这些技术手段不仅能分担数据库负载,还能在主库故障时快速恢复,确保系统的稳定运行。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Android APK混淆处理方案分析
  • MySQL 存储引擎详解
  • 关于 夜莺n9e 的简易部署
  • 动态接口调优:在Mojo模型中调整模型的输入输出接口
  • 学习记录:ESP32控制舵机 FREERTOS BLE
  • RuoYi-Vue-Plus(动态添加移除数据源)
  • 构建查询洞察 UI
  • WEB前端10- Fetch API(同步/异步/跨域处理)
  • 基于Markdown的文档网站生成工具-VitePress框架
  • 强制通风(2):发动机为什么要进行曲轴强制通风?它的目的是什么呢?
  • 深入 Symfony 服务容器:依赖注入的艺术
  • 基于web的物流配送管理系统/基于客户时间窗变化的物流配送管理系统/快递配送管理系统
  • AI发展下的伦理挑战,应当如何应对?
  • go语言day15 goroutine
  • 搜索与下载Stable Diffusion 模型
  • $translatePartialLoader加载失败及解决方式
  • [case10]使用RSQL实现端到端的动态查询
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • canvas绘制圆角头像
  • node-glob通配符
  • PHP 7 修改了什么呢 -- 2
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • WinRAR存在严重的安全漏洞影响5亿用户
  • Yeoman_Bower_Grunt
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 搞机器学习要哪些技能
  • 使用 QuickBI 搭建酷炫可视化分析
  • 微信小程序填坑清单
  • 小而合理的前端理论:rscss和rsjs
  • 学习使用ExpressJS 4.0中的新Router
  • 【云吞铺子】性能抖动剖析(二)
  • 7行Python代码的人脸识别
  • MPAndroidChart 教程:Y轴 YAxis
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #android不同版本废弃api,新api。
  • #QT(一种朴素的计算器实现方法)
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (12)Hive调优——count distinct去重优化
  • (2022 CVPR) Unbiased Teacher v2
  • (3)选择元素——(17)练习(Exercises)
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (HAL库版)freeRTOS移植STMF103
  • (二)pulsar安装在独立的docker中,python测试
  • (十)T检验-第一部分
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (转)Linux下编译安装log4cxx
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET学习教程二——.net基础定义+VS常用设置
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • [240527] 谷歌 CEO 承认 AI 编造虚假信息问题难解(此文使用 @gemini 命令二次创作)| ICQ 停止运作
  • [AI StoryDiffusion] 创造神奇故事,AI漫画大乱斗!
  • [Android实例] 保持屏幕长亮的两种方法 [转]