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

MySQL 5.7使用 GTID 和 Binlog高可用方案

文章目录

  • 介绍
    • GTID和Binlog的关系
      • GTID(Global Transaction ID)
      • Binlog(二进制日志)
  • MySQL5.7基于yum搭建
    • 安装 MySQL
    • 初始化并设置远程登录密码
  • 配置基于GTID的复制模式
    • 第一台主服务器配置
      • 主服务器配置
      • 启动从服务
    • 第二台主服务器配置
      • 主服务器配置
      • 启动从服务

介绍

GTID和Binlog的关系

GTID 和 Binlog 是互补的技术。GTID 提供了更高级的事务跟踪和管理机制,而 Binlog 则是底层的日志记录机制。在 GTID 模式下,每个事务在写入 binlog 时都会附带一个 GTID,从而实现更加可靠和简化的复制管理。

  • GTID 用于全局唯一标识事务,简化复制管理和故障恢复。
  • Binlog 用于记录数据更改事件,是数据恢复和复制的基础。

在许多高可用方案中,GTID 和 Binlog 是结合使用的。GTID 为每个事务提供唯一标识符,简化了复制和故障恢复,而 Binlog 依然是底层的变更日志机制。


GTID(Global Transaction ID)

  1. 定义:
    GTID 是一个全局唯一的事务标识符。它由 MySQL 5.6 引入,用于跟踪和标识服务器上的每个事务。

  2. 组成:
    GTID 由 source_id:transaction_id 组成,其中 source_id 通常是服务器的 UUID,transaction_id 是事务在该服务器上的序号。

  3. 用途:

    • 用于主从复制:GTID 确保每个事务在主服务器和从服务器上都有唯一的标识,有助于简化复制和故障恢复。
    • 自动故障切换:在 GTID 模式下,复制的管理变得更加简单和自动化,有助于自动故障切换。
  4. 优势:

    • 自动化:GTID 模式下,可以实现更自动化的故障恢复和复制管理。
    • 去重:避免了事务重复应用的问题。、
    • 灵活性:在主从切换和故障恢复中更加灵活。、

Binlog(二进制日志)

  1. 定义:
    Binlog 是 MySQL 用于记录所有更改数据的 SQL 语句的日志文件。它记录所有导致数据更改的事件(如插入、更新、删除操作)。

  2. 组成:
    Binlog 文件由一系列事件组成,每个事件记录了某个数据更改操作。

  3. 用途:

    • 数据恢复:通过重放 binlog,可以恢复数据库到特定的时间点。
    • 主从复制:从服务器可以读取主服务器的 binlog 并重放其中的事件,从而实现数据同步。
  4. 优势:

    • 数据恢复:通过 binlog,可以将数据库恢复到特定时间点。
    • 复制:Binlog 是 MySQL 主从复制的基础,确保从服务器可以同步主服务器的数据变化。

MySQL5.7基于yum搭建

安装 MySQL

# 下载MySQL yum 包
wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm# 查看是否有mariadb
rpm -qa |grep mariadb# 删除mariadb依赖
yum remove -y mariadb-libs.x86_64# 安装密钥
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022# 安装 MySQL 源
rpm -Uvh mysql57-community-release-el7-10.noarch.rpm# 安装 MySQL 服务器
yum install -y mysql-community-server# 启动服务
systemctl start mysqld
systemctl enable mysqld# 防火墙开放端口
firewall-cmd  --permanent --add-port=3306/tcp
firewall-cmd --reload

初始化并设置远程登录密码

查看密码

[root@mysql1 ~]# grep 'temporary password' /var/log/mysqld.log
2024-08-05T02:26:48.667443Z 1 [Note] A temporary password is generated for root@localhost: y7XtM-u9dVwt

登录MySQL

[root@mysql mysql]# mysql -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.35Copyright (c) 2000, 2021, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> 

初始化密码(密码有复杂度,数字大小写和符号)

mysql> ALTER USER USER() IDENTIFIED BY 'Gdh%Y4C4BMyH';
Query OK, 0 rows affected (0.00 sec)mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

支持root用户允许远程连接mysql数据库

mysql> grant all privileges on *.* to 'root'@'%' identified by 'Gdh%Y4C4BMyH' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

配置基于GTID的复制模式

GTID(全局事务标识符)是 MySQL 提供的一种新型复制方式,它简化了主从复制的配置和管理,确保数据的一致性和完整性。在配置 MySQL 双主复制之前,我们需要确保两台主服务器都启用了 GTID 模式。

在2台MySQL服务器上创建拥有复制权限的用户

# 创建拥有复制权限的用户
grant replication slave on *.* to 'synchronize'@'%' identified by 'Abc-1234';# 刷新权限使其生效
flush privileges;

第一台主服务器配置

主服务器配置

修改第一台主服务器的配置文件 /etc/my.cnf,添加以下内容:

server-id = 100                 # 设置服务器的唯一标识符。
log_bin = mysql-bin             # 启用二进制日志记录。
gtid_mode = ON                  # 启用 GTID 模式。
enforce_gtid_consistency = true # 强制 GTID 一致性。

在这里插入图片描述

修改完配置文件后,重启 MySQL 服务使配置生效:

systemctl restart mysqld

启动从服务

在创建好用户之后,进入 MySQL 数据库执行以下命令,将第二台服务器配置为从服务器:

进入 MySQL数据库

mysql -u root -p 

执行以下命令

change master to
master_host="172.25.14.12",
master_user="synchronize",
master_password="Abc-1234",
master_auto_position=1;

在这里插入图片描述

启动从服务:

start slave;

第二台主服务器配置

主服务器配置

在第二台主服务器上,同样需要修改配置文件 /etc/my.cnf,添加以下内容:

server-id = 101                 # 设置服务器的唯一标识符。
log_bin = mysql-bin             # 启用二进制日志记录。
gtid_mode = ON                  # 启用 GTID 模式。
enforce_gtid_consistency = true # 强制 GTID 一致性。

修改完配置文件后,重启 MySQL 服务使配置生效:

systemctl restart mysqld

启动从服务

进入 MySQL 数据库执行以下命令,将第一台主服务器配置为从服务器:

进入 MySQL数据库

mysql -u root -p 

执行以下命令

change master to
master_host="172.25.14.11",
master_user="synchronize",
master_password="Abc-1234",
master_auto_position=1;

启动从服务:

start slave;

查看是否成功同步

show slave status\G;

在这里插入图片描述



参考文档:
Centos7.0 安装 MYSQL5.7
Linux中MySQL 双主复制(互为主从)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Nginx 常用配置
  • ctfshow-web入门-sql注入(web186-web190)
  • python后端 启用 gzip 压缩响应体
  • 虚拟DOM、Vue渲染流程
  • Python3 爬虫 数据抓包
  • 【深入剖析】Spring依赖注入的最佳实践(@Autowired的正确用法)
  • 【RabbitMQ】直连交换机_扇形交换机_主题交换机
  • Vision Pro 3D 目标跟踪实战案例:厨房场景应用
  • QTableView使用示例-Qt模型视图代理(Model-View-Delegate)使用示例
  • Go-反射
  • 2024最新最全面的Selenium 3.0 + Python自动化测试框架
  • LeetCode每日一题_572.另一棵树的子树
  • C#学习笔记14:SYN6288语音模块_Winform上位机控制软件
  • 使用Variadic Templates(可变参数模板)实现printf
  • electron 配置、打包 -报错解决
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • echarts的各种常用效果展示
  • ECMAScript6(0):ES6简明参考手册
  • E-HPC支持多队列管理和自动伸缩
  • Laravel 菜鸟晋级之路
  • magento2项目上线注意事项
  • nfs客户端进程变D,延伸linux的lock
  • Python学习之路13-记分
  • ReactNativeweexDeviceOne对比
  • spark本地环境的搭建到运行第一个spark程序
  • SpiderData 2019年2月16日 DApp数据排行榜
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • - 概述 - 《设计模式(极简c++版)》
  • 关于Flux,Vuex,Redux的思考
  • 检测对象或数组
  • 设计模式走一遍---观察者模式
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 小而合理的前端理论:rscss和rsjs
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 字符串匹配基础上
  • scrapy中间件源码分析及常用中间件大全
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​业务双活的数据切换思路设计(下)
  • #HarmonyOS:软件安装window和mac预览Hello World
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (一)WLAN定义和基本架构转
  • (转)视频码率,帧率和分辨率的联系与区别
  • .net core Redis 使用有序集合实现延迟队列
  • .net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET编程——利用C#调用海康机器人工业相机SDK实现回调取图与软触发取图【含免费源码】
  • /proc/vmstat 详解
  • @Autowired @Resource @Qualifier的区别
  • @hook扩展分析