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

开源数据库 - mysql - mysql-server-8.4(gtid主主同步+ keepalived热切换)部署方案

前置条件

假设主从信息

mysqlhostport
192.168.1.13306
192.168.1.23306
vip192.168.1.3

部署流程

导出测试环境表结构与数据

使用mysqldump

./mysqldump -ulzzc -p -S /tmp/mysql3306.sock --single-transaction --database lzzc > databaseLZZCxxxx.sql

查看gtid号

head -n 40 databaseLZZCxxxx.sql

安装mysql

下载mysql-server-8.4.0.tar.xz
MySQL :: Download MySQL Community Server (Archived Versions)

将安装包放置在/usr/local/ 目录下解压,并将解压后目录改名为mysql

添加my.cnf文件

cd /usr/local/mysql/
mkdir etc
cd etc
vi my.cnf

从库

[mysqld]
default-time-zone='+08:00'
bind-address=0.0.0.0
port=3306
user=mysql
socket=/tmp/mysql3306.sock
pid_file=/mysql/data/my.pid
basedir=/usr/local/mysql
datadir=/mysql/data
#character config
character_set_server=utf8mb4
explicit_defaults_for_timestamp=true
symbolic-links=0
log-error=/mysql/logs/mysql3306.err
log_bin = /mysql/binlog/mysql-bin
relay_log = /mysql/relaylog/relay-bin
slow_query_log_file = /mysql/logs/slow.log
slow_query_log=on
server-id=6 # 两个库的server-id需要不同
binlog_format=row
#innodb settings
innodb_buffer_pool_size=4G # cache_buffer大小
#skip-grant-tables
gtid-mode=on
enforce-gtid-consistency=true
log-replica-updates=ON
lower_case_table_names=1
interactive_timeout=28800000
wait_timeout=28800000
max_connections=1000
innodb_log_group_home_dir=/mysql/data
binlog_expire_logs_seconds=2592000 # 30天时间
[mysql]
socket = /tmp/mysql3306.sock

在根目录下创建mysql目录存放mysql数据与日志等,在/mysql中创建data,binlog ,logs,relaylog目录

系统创建mysql 用户组和用户

groupadd mysql
useradd -r -g mysql mysql

/usr/local/mysql/mysql目录赋权

chown -R mysql:mysql /usr/local/mysql
chown -R mysql:mysql /mysql

初始化mysql应用

cd /usr/local/mysql/bin
./mysqld --defaults-file=/usr/local/mysql/etc/my.cnf --initialize-insecure

等待初始化,查看/mysql/logs/mysql3306.err如果没有错误报错则继续执行

启动mysql

./mysqld_safe --defaults-file=/usr/local/mysql/etc/my.cnf &

查看mysql进程

ps -ef|grep mysql

mysql创建用户赋权

主/从库

登录root

./mysql -uroot -p -S /tmp/mysql3306.sock

进入mysql命令行,修改root密码

alter user 'root'@'localhost' identified by 'xxxxxx';

创建同步用户并赋权

create user 'repl'@'%' identified by 'replpassword';
grant replication slave on *.* to "repl"@"%";
flush privileges;

从库重置gtid、导入主库数据

重置gtid

show variables like "%gtid%";

输出类似如下图(正常gtid中会在gtid_executed中显示为本机的gtid,gtid_purged为导入的主库gtid)
![[Pasted image 20241111105605.png]]

reset binary logs and gtids; # 重置gtid

导入主库数据

./mysql -uroot -p -S /tmp/mysql3306.sock <databaseLZZCxxxx.sql

再次查看gtid,此时gtid_purged应该与主库的gtid一致

开启从库同步进程

设置同步指向

change replication source to source_host="192.168.1.1",source_port=3306,source_user="repl",source_password="replpassword",source_auto_position=1,get_source_public_key=1;

开启replica进程

start replica;

查看replica状态,输出类似:(主要查看Replica_IO_Running和Replica_SQL_Running以及Replica_SQL_Running_State三个值,前两个都是yes后面一个没有警告和报错就可以)

show replica status\G;
*************************** 1. row ***************************Replica_IO_State: Waiting for source to send eventSource_Host: 192.168.1.1Source_User: replSource_Port: 3306Connect_Retry: 60Source_Log_File: mysql-bin.000006Read_Source_Log_Pos: 237Relay_Log_File: relay-bin.000021Relay_Log_Pos: 321Relay_Source_Log_File: mysql-bin.000006Replica_IO_Running: YesReplica_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Source_Log_Pos: 237Relay_Log_Space: 782Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Source_SSL_Allowed: NoSource_SSL_CA_File: Source_SSL_CA_Path: Source_SSL_Cert: Source_SSL_Cipher: Source_SSL_Key: Seconds_Behind_Source: 0
Source_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Source_Server_Id: 7Source_UUID: 292e4a07-9e71-11ef-88a8-001a4a1601f1Source_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLReplica_SQL_Running_State: Replica has read all relay log; waiting for more updatesSource_Retry_Count: 10Source_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Source_SSL_Crl: Source_SSL_Crlpath: Retrieved_Gtid_Set: 292e4a07-9e71-11ef-88a8-001a4a1601f1:1-3Executed_Gtid_Set: 292e4a07-9e71-11ef-88a8-001a4a1601f1:1-3,
92c1608c-9cdb-11ef-a01e-001a4a1601fe:1-343,
eb66bcc8-9e70-11ef-858d-001a4a1601fe:1-4Auto_Position: 1Replicate_Rewrite_DB: Channel_Name: Source_TLS_Version: Source_public_key_path: Get_Source_public_key: 1Network_Namespace: 
1 row in set (0.00 sec)ERROR: 
No query specified

开启主库同步进程

设置同步指向

change replication source to source_host="192.168.1.2",source_port=3306,source_user="repl",source_password="replpassword",source_auto_position=1,get_source_public_key=1;

开启replica进程

start replica;

查看replica状态,输出类似:(主要查看Replica_IO_Running和Replica_SQL_Running以及Replica_SQL_Running_State三个值,前两个都是yes后面一个没有警告和报错就可以)

show replica status\G;
*************************** 1. row ***************************Replica_IO_State: Waiting for source to send eventSource_Host: 192.168.1.1Source_User: replSource_Port: 3306Connect_Retry: 60Source_Log_File: mysql-bin.000006Read_Source_Log_Pos: 237Relay_Log_File: relay-bin.000021Relay_Log_Pos: 321Relay_Source_Log_File: mysql-bin.000006Replica_IO_Running: YesReplica_SQL_Running: YesReplicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0Last_Error: Skip_Counter: 0Exec_Source_Log_Pos: 237Relay_Log_Space: 782Until_Condition: NoneUntil_Log_File: Until_Log_Pos: 0Source_SSL_Allowed: NoSource_SSL_CA_File: Source_SSL_CA_Path: Source_SSL_Cert: Source_SSL_Cipher: Source_SSL_Key: Seconds_Behind_Source: 0
Source_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error: Last_SQL_Errno: 0Last_SQL_Error: Replicate_Ignore_Server_Ids: Source_Server_Id: 7Source_UUID: 292e4a07-9e71-11ef-88a8-001a4a1601f1Source_Info_File: mysql.slave_master_infoSQL_Delay: 0SQL_Remaining_Delay: NULLReplica_SQL_Running_State: Replica has read all relay log; waiting for more updatesSource_Retry_Count: 10Source_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Source_SSL_Crl: Source_SSL_Crlpath: Retrieved_Gtid_Set: 292e4a07-9e71-11ef-88a8-001a4a1601f1:1-3Executed_Gtid_Set: 292e4a07-9e71-11ef-88a8-001a4a1601f1:1-3,
92c1608c-9cdb-11ef-a01e-001a4a1601fe:1-343,
eb66bcc8-9e70-11ef-858d-001a4a1601fe:1-4Auto_Position: 1Replicate_Rewrite_DB: Channel_Name: Source_TLS_Version: Source_public_key_path: Get_Source_public_key: 1Network_Namespace: 
1 row in set (0.00 sec)ERROR: 
No query specified

设置keepalived

主备服务器安装keepalived,可以使用rpm包安装或者源码编译

主库编辑keepalived配置文件keepalived.conf

# 检查mysql服务是否存活的脚本
vrrp_script chk_mysql {script "/usr/bin/killall -0 mysqld"
}
# vrrp配置虚IP
vrrp_instance VI_1 {# 状态:MASTER  另外一台机器为BACKUPstate MASTER# 绑定的网卡interface eth0# 虚拟路由id  两台机器需保持一致virtual_router_id 51# 优先级 MASTER的值要大于BACKUPpriority 100advert_int 1authentication {auth_type PASSauth_pass 1111}# 虚拟IP地址 两台keepalived需要一致virtual_ipaddress {192.168.1.3}# 检查脚本 vrrp_script的名字track_script {chk_mysql}
}

从库编辑keepalived配置文件keepalived.conf

# 检查mysql服务是否存活的脚本
vrrp_script chk_mysql {script "/usr/bin/killall -0 mysqld"
}
# vrrp配置虚IP
vrrp_instance VI_1 {# 状态:MASTER  另外一台机器为BACKUPstate BACKUP# 绑定的网卡interface eth0# 虚拟路由id  两台机器需保持一致virtual_router_id 51# 优先级 MASTER的值要大于BACKUPpriority 101advert_int 1authentication {auth_type PASSauth_pass 1111}# 虚拟IP地址 两台keepalived需要一致virtual_ipaddress {192.168.1.3}# 检查脚本 vrrp_script的名字track_script {chk_mysql}
}

主备库开启keepalived

systemctl start keepalived

剩余工作

自行测试主主同步、热切换

相关文章:

开源数据库 - mysql - mysql-server-8.4(gtid主主同步+ keepalived热切换)部署方案

前置条件 假设主从信息 mysqlhostport主192.168.1.13306从192.168.1.23306vip192.168.1.3 部署流程 导出测试环境表结构与数据 使用mysqldump ./mysqldump -ulzzc -p -S /tmp/mysql3306.sock --single-transaction --database lzzc > databaseLZZCxxxx.sql查看gtid号 …...

Java全栈体系路线

Java全栈体系路线 摘要 Java 是一门广泛应用于企业级开发的语言&#xff0c;具有强大的生态系统和丰富的工具支持。成为一名 Java 全栈开发工程师不仅需要掌握后端开发技能&#xff0c;还需要具备前端开发和数据库管理的能力。本文将详细介绍 Java 全栈开发的学习路线&#x…...

【Unity基础】Unity中如何导入字体?

在Unity中&#xff0c;不能像其他软件一样直接使用字体文件&#xff0c;需要通过FontAssetCreator将其转换成Texture的Asset文件&#xff0c;然后才能使用。 本文介绍了使用FontAssetCreator导入字体的过程&#xff0c;并对其参数设置进行了说明。 Font Asset Creator 是 Uni…...

使用NVIDIA GPU加速FFmpeg视频压制:完全指南

引言 在视频处理领域&#xff0c;FFmpeg是一个强大的工具。结合NVIDIA的硬件编码器NVENC&#xff0c;我们可以实现快速高效的视频压制。本文将详细解析一个实用的视频压制命令&#xff0c;帮助你理解每个参数的作用。 核心命令 ffmpeg -i input.mp4 -vf scale640:360 -c:v h…...

Python学习:scipy是什么?

文章目录 一、Scipy简介二、Scipy的组成部分1. 基础功能&#xff1a;2. 特殊函数&#xff1a;3. 优化&#xff1a;4. 积分&#xff1a;5. 插值&#xff1a;6. 信号处理&#xff1a;7. 图像处理&#xff1a;8. 统计分布&#xff1a;9. 空间数据结构和算法&#xff1a;10. 稀疏矩…...

spark的学习-05

SparkSql 结构化数据与非结构化数据 结构化数据就类似于excel表中的数据&#xff08;统计的都是结构化的数据&#xff09;一般都使用sparkSql处理结构化的数据 结构化的文件&#xff1a;JSON、CSV【以逗号分隔】、TSV【以制表符分隔】、parquet、orc 结构化的表&#xff1a;…...

SQL注入(SQL Injection)详解

SQL注入&#xff08;SQL Injection&#xff09;是一种代码注入技术&#xff0c;它通过在应用程序的输入字段中插入或“注入”恶意的SQL语句&#xff0c;从而操控后端数据库服务器执行非预期的命令。这种攻击方式常用于绕过应用程序的安全措施&#xff0c;未经授权地访问、修改或…...

深入解析 OpenHarmony 构建系统-2-目录结构与核心组件

引言 OpenHarmony作为一款面向全场景的分布式操作系统,其构建系统在开发过程中扮演着至关重要的角色。本文将详细介绍OpenHarmony构建系统的目录结构和核心组件,帮助开发者更好地理解和使用这一强大的工具。 目录结构概览 以下是OpenHarmony构建系统的目录结构,每个目录和…...

网络安全应急响应(归纳)

目录 一、概述二、理论 系统排查 系统基本信息 windowsLinux用户信息 WindowsLinux启动项&#xff1a;开机系统在前台或者后台运行的程序&#xff0c;是病毒等实现持久化驻留的常用方法。 WindowsLinux任务计划&#xff1a;由于很多计算机都会自动加载“任务计划”&#xff0c…...

【网络协议栈】网络层(上)网络层的基本理解、IP协议格式、网络层分组(内附手画分析图 简单易懂)

绪论​ “It does not matter how slowly you go as long as you do not stop.”。本章是自上而下的进入网络协议栈的第三个篇幅–网络层–&#xff0c;本章我将带你了解网络层&#xff0c;以及网络层中非常重要的IP协议格式和网络层的分片组装问题&#xff0c;后面将持续更新网…...

数据库类型介绍

1. 关系型数据库&#xff08;RDBMS&#xff09; 关系型数据库是最常见的一类数据库&#xff0c;它们通过表&#xff08;Table&#xff09;来存储数据&#xff0c;表之间通过关系&#xff08;如主键和外键&#xff09;来关联。 • MySQL&#xff1a;开源的关系型数据库管理系统&…...

一步一步从asp.net core mvc中访问asp.net core WebApi

"从asp.net core mvc中访问asp.net core WebApi"看到这个标题是不是觉得很绕口啊&#xff0c;但的确就是要讲一讲这样的访问。前面我们介绍了微信小程序访问asp.net core webapi(感兴趣的童鞋可以看看前面的博文有关WEBAPI的搭建)&#xff0c;这里我们重点不关心如何…...

linux中kubectl命令使用

一.命令介绍 kubectl 是 Kubernetes 集群管理的命令行工具&#xff0c;用于与 Kubernetes API 交互。你可以通过它来管理和操作 Kubernetes 集群中的资源&#xff0c;如 Pod、Deployment、Service 等。下面是如何在不同操作系统上下载和使用 kubectl 的方法。 二.下载 kubect…...

Linux 系统结构

Linux系统一般有4个主要部分&#xff1a;内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构&#xff0c;它们使得用户可以运行程序、管理文件并使用系统。 1. linux内核 内核是操作系统的核心&#xff0c;具有很多最基本功能&#xff0c;它…...

ESP32-S3设备智能化升级,物联网无线AI语音交互,让生活更加便捷和有趣

在人工智能和物联网技术的推动下&#xff0c;无线AI语音交互技术正在成为智能设备的新选择。这种技术的发展&#xff0c;不仅改变了我们与设备的沟通方式&#xff0c;更开启了一个新的智能交互方案。 想象一下&#xff0c;通过简单的语音指令&#xff0c;就能控制家中的灯光、…...

Python的函数(补充浅拷贝和深拷贝)

一、定义 函数的定义&#xff1a;实现【特定功能】的代码块。 形参&#xff1a;函数定义时的参数&#xff0c;没有实际意义 实参&#xff1a;函数调用/使用时的参数&#xff0c;有实际意义 函数的作用&#xff1a; 简化代码提高代码重用性便于维护和修改提高代码的可扩展性…...

oracle查询字段类型长度等字段信息

1.查询oracle数据库的字符集 SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER NLS_CHARACTERSET; 2.查询字段长度类型 SELECT * FROM user_tab_columns WHERE table_name user AND COLUMN_NAME SNAME 请确保将user替换为您想要查询的表名。sname为字段名 这里的字…...

C语言 | Leetcode C语言题解之第559题N叉树的最大深度

题目&#xff1a; 题解&#xff1a; /*** Definition for a Node.* struct Node {* int val;* int numChildren;* struct Node** children;* };*/int maxDepth(struct Node* root) {if (!root) {return 0;}int depth 0;// 创建空队列const int qCap 10e4 1;str…...

光流法(Optical Flow)

一、简介 光流法&#xff08;Optical Flow&#xff09;是一种用于检测图像序列中像素运动的计算机视觉技术。其基于以下假设&#xff1a; 1.亮度恒定性假设&#xff1a;物体在运动过程中&#xff0c;其像素值在不同帧中保持不变。 2.空间和时间上的连续性&#xff1a;相邻像素之…...

Rancher的安装

1. 概览 1.1 用户界面优势 Rancher 提供了一个直观的图形用户界面&#xff08;GUI&#xff09;。对于不熟悉 Kubernetes 复杂的命令行操作&#xff08;如使用kubectl&#xff09;的用户来说&#xff0c;通过 Rancher 的界面可以方便地进行资源管理。例如&#xff0c;用户可以在…...

Sqoop1 vs Sqoop2:架构之争与选型指南

Sqoop1 vs Sqoop2&#xff1a;架构之争与选型指南1. 引言&#xff1a;两个版本&#xff0c;一个困惑2. 核心差异&#xff1a;从架构到功能的全面对比2.1 架构对比&#xff1a;客户端 vs 客户端-服务器2.2 功能特性详细对比2.3 安全性对比&#xff1a;Sqoop2的核心优势3. 为什么…...

突破数据采集困境:Easy-Scraper 重构网页信息提取范式

突破数据采集困境&#xff1a;Easy-Scraper 重构网页信息提取范式 【免费下载链接】easy-scraper Easy scraping library 项目地址: https://gitcode.com/gh_mirrors/ea/easy-scraper 在数据驱动决策的时代&#xff0c;网页数据采集如同挖掘数字金矿。但传统工具往往陷入…...

Qwen1.5-0.5B-Chat电商应用:商品咨询机器人搭建教程

Qwen1.5-0.5B-Chat电商应用&#xff1a;商品咨询机器人搭建教程 1. 引言&#xff1a;为什么需要一个轻量级商品咨询机器人&#xff1f; 想象一下&#xff0c;你经营着一家网店&#xff0c;每天有成百上千的顾客涌入。他们的问题五花八门&#xff1a;“这件衣服有L码吗&#x…...

Windows音频捕获新方案:实现进程级精准录音的技术实践

Windows音频捕获新方案&#xff1a;实现进程级精准录音的技术实践 【免费下载链接】win-capture-audio An OBS plugin that allows capture of independant application audio streams on Windows, in a similar fashion to OBSs game capture and Discords application stream…...

openGauss服务化部署实战:systemd单元文件配置详解

1. 为什么需要systemd管理openGauss 每次重启服务器都要手动启动数据库&#xff1f;这种操作既低效又容易出错。把openGauss交给systemd管理后&#xff0c;你会发现数据库服务像系统内置服务一样听话——开机自动启动、异常自动重启、日志集中收集&#xff0c;这才是专业运维该…...

人体关键点检测实战:如何用OKS和AP评估模型性能(附Python代码示例)

人体关键点检测实战&#xff1a;OKS与AP指标深度解析与Python实现 在计算机视觉领域&#xff0c;人体姿态估计一直是热门研究方向&#xff0c;而准确评估模型性能则是项目落地的关键环节。不同于常规的目标检测任务&#xff0c;人体关键点检测需要更精细的评估体系——这正是OK…...

UModel:虚幻引擎资源解析工具零基础入门到高级应用指南

UModel&#xff1a;虚幻引擎资源解析工具零基础入门到高级应用指南 【免费下载链接】UEViewer Viewer and exporter for Unreal Engine 1-4 assets (UE Viewer). 项目地址: https://gitcode.com/gh_mirrors/ue/UEViewer 虚幻引擎资源解析是游戏开发与逆向工程领域的关键…...

8_Harness驾驭工程实践:企业级落地与OpenAI案例解析

8_Harness驾驭工程实践&#xff1a;企业级落地与OpenAI案例解析 关键字&#xff1a; 企业级落地、OpenAI、Ryan Lopopolo、Codex、Harness Engineering、Citi Bank、Ancestry、Ulta Beauty、Agent-First开发、部署策略、自托管、成本优化、迁移路径、最佳实践、0行手写代码、百…...

华为光猫配置解密工具技术架构解析与实现机制

华为光猫配置解密工具技术架构解析与实现机制 【免费下载链接】HuaWei-Optical-Network-Terminal-Decoder 项目地址: https://gitcode.com/gh_mirrors/hu/HuaWei-Optical-Network-Terminal-Decoder 在网络设备运维领域&#xff0c;华为光猫配置文件的安全加密机制为设备…...

从4G到RedCap:手把手教你升级老旧工业设备的无线通信模块(附功耗测试数据)

从4G到RedCap&#xff1a;工业设备无线通信模块升级实战指南 在工业物联网快速发展的今天&#xff0c;老旧设备的通信模块升级成为许多工厂面临的现实挑战。传统4G模块虽然稳定可靠&#xff0c;但面对5G时代RedCap技术带来的低功耗、低成本优势&#xff0c;升级改造已成为提升设…...