TxSQL新增数据库节点步骤

      • 准备工作与注意事项
      • 具体操作步骤
        • 第 1 步:在主库上创建复制专用账号
        • 第 2 步:对主库进行锁表并获取二进制日志坐标
        • 第 3 步:备份主库数据并传输到新从库
        • 第 4 步:主库解锁
        • 第 5 步:在新从库服务器上准备数据
        • 第 6 步:配置新从库
        • 第 7 步:在从库上配置主从复制链路
        • 第 8 步:启动从库复制进程并验证
        • 第 9 步:更新应用配置或中间件
      • 流程总结与后续监控

好的,为自建的 TDSQL(这里我们理解为基于 MySQL 构建的、类似 TDSQL 架构的数据库集群,如 Master-Slave 或 Group Replication 集群)新增一个数据库从节点,需要一套严谨的手工操作流程。

与腾讯云托管的 TDSQL 不同,自建集群的数据同步、配置修改、服务发现等所有步骤都需要手动完成

以下是详细的步骤指南,假设您的基础架构是标准的 MySQL 主从复制(Master-Slave Replication)。


准备工作与注意事项

⚠️ 重要前提:

  1. 选择业务低峰期:整个操作过程会对主库产生 I/O 和网络压力,务必在业务低峰期进行。
  2. 备份主库:操作前,强烈建议对主数据库进行一次全量备份。
  3. 规划好网络与配置:确保新节点与主节点网络互通,且 server_id 等配置不会冲突。

📋 准备信息:

项目示例说明
主库 IP192.168.1.100现有主数据库服务器的 IP 地址
新从库 IP192.168.1.101新增加的从数据库服务器的 IP 地址
复制账号repl专门用于主从复制的数据库用户
复制密码Repl@123复制用户的密码
主库端口3306主数据库的监听端口
数据目录/var/lib/mysqlMySQL 数据文件存放目录

具体操作步骤

第 1 步:在主库上创建复制专用账号

登录到主库服务器,在 MySQL 中执行以下命令,创建一个专门用于数据复制的账户。

mysql> CREATE USER 'repl'@'192.168.1.101' IDENTIFIED BY 'Repl@123';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.101';
mysql> FLUSH PRIVILEGES;

说明'repl'@'192.168.1.101' 表示只允许从 IP 为 192.168.1.101 的服务器使用 repl 用户连接,这是为了安全。

第 2 步:对主库进行锁表并获取二进制日志坐标

为了获取一份一致性的数据快照,需要暂时锁定主库的写操作。

mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;

记录下 SHOW MASTER STATUS 命令输出的关键信息,稍后配置从库时会用到

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |      745 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
  • File: mysql-bin.000003
  • Position: 745

保持这个终端窗口打开,否则锁会释放! 快速进行下一步的数据备份。

第 3 步:备份主库数据并传输到新从库

使用 mysqldump 或物理备份工具(如 Percona XtraBackup)进行备份。XtraBackup 可以在不长时间锁表的情况下进行热备,更适合生产环境。

方法A:使用 mysqldump(适用于数据量不大或可接受短暂锁表的情况)

# 在主库服务器上执行
$ mysqldump -uroot -p --all-databases --master-data > full_backup.sql# 将备份文件传输到新的从库服务器
$ scp full_backup.sql root@192.168.1.101:/tmp/

方法B(推荐):使用 Percona XtraBackup(热备,最小化锁表时间)

# 1. 在主库上安装XtraBackup并执行备份
$ xtrabackup --backup --user=root --password --target-dir=/path/to/backup/# 2. 准备备份
$ xtrabackup --prepare --target-dir=/path/to/backup/# 3. 将备份文件SCP或RSYNC到新从库服务器
$ rsync -avp /path/to/backup/ root@192.168.1.101:/var/lib/mysql/
第 4 步:主库解锁

数据备份完成后,回到第2步的MySQL终端,释放主库的锁。

mysql> UNLOCK TABLES;

主库现在可以正常处理写入了。

第 5 步:在新从库服务器上准备数据
  1. 安装 MySQL:确保新服务器上已安装与主库完全相同版本的 MySQL。
  2. 停止 MySQL 服务
    $ systemctl stop mysql
    
  3. 清空数据目录(如果是全新安装可跳过):
    $ rm -rf /var/lib/mysql/*
    
  4. 恢复备份数据
    如果使用 mysqldump:
    $ mysql -uroot -p < /tmp/full_backup.sql
    
    如果使用 XtraBackup:
    # 将传输过来的文件权限修改为mysql用户
    $ chown -R mysql:mysql /var/lib/mysql/
    # XtraBackup已经完成了数据恢复的准备
    
第 6 步:配置新从库

编辑新从库的 MySQL 配置文件 /etc/my.cnf/etc/mysql/my.cnf.d/server.cnf

[mysqld]
# 核心配置:每个节点的server_id必须唯一
server-id = 2# 可选配置:开启中继日志和二进制日志(方便后续做级联复制或切换)
relay-log = /var/lib/mysql/mysql-relay-bin
log-bin = /var/lib/mysql/mysql-bin# 可选配置:指定需要复制的数据库(如不设置,默认复制所有)
#replicate-do-db = my_application_db# 可选配置:忽略复制系统库,避免冲突
replicate-ignore-db = mysql
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
replicate-ignore-db = sys

保存配置文件后,启动 MySQL 服务:

$ systemctl start mysql
第 7 步:在从库上配置主从复制链路

登录到新从库的 MySQL,执行以下命令,使用第2步获取的信息。

mysql> CHANGE MASTER TO-> MASTER_HOST='192.168.1.100',      -- 主库IP-> MASTER_USER='repl',               -- 复制账号-> MASTER_PASSWORD='Repl@123',      -- 复制密码-> MASTER_LOG_FILE='mysql-bin.000003', -- 第2步的File-> MASTER_LOG_POS=745;               -- 第2步的Position
第 8 步:启动从库复制进程并验证
  1. 启动 Slave

    mysql> START SLAVE;   -- MySQL 8.0+ 推荐使用 START REPLICA;
    
  2. 检查复制状态(这是最关键的一步):

    mysql> SHOW SLAVE STATUS\G
    

    查看输出结果,重点关注以下字段

    • Slave_IO_State: 等待主库发送事件
    • Slave_IO_Running: Yes
    • Slave_SQL_Running: Yes
    • Seconds_Behind_Master: 0 (表示没有延迟,这是最终目标。刚开始可能是一个很大的数,会逐渐减少)
    • Last_IO_Errno, Last_SQL_Errno: 0 (必须为0,表示没有错误)

    !https://file+.vscode-resource.vscode-cdn.net/Users/pan/Downloads/slave_status.png

第 9 步:更新应用配置或中间件

新的从节点已经加入集群,但应用程序还无法使用它进行读操作。您需要:

  1. 更新应用配置:如果应用直接连接数据库,需要在配置文件中添加新从库的连接信息。
  2. 更新中间件:如果使用了数据库中间件(如 ProxySQL, MaxScale, HAProxy),需要将新从库的IP加入后端服务器组(Backend Servers)并重新加载配置。

流程总结与后续监控

整个手动添加从节点的流程可以总结为以下图表:

在主库创建复制账号
锁主库表并获取binlog坐标
备份主库数据
主库解锁
传输备份到新节点
新节点恢复数据
配置新节点my.cnf
确保server-id唯一
启动新节点MySQL服务
在新节点执行
CHANGE MASTER TO命令
启动Slave复制进程
检查Slave状态
确认IO/SQL线程正常运行
更新应用或中间件配置

后续工作:

  • 监控:持续监控 Seconds_Behind_Master 指标,确保复制延迟为0。
  • 告警:对 Slave_IO_RunningSlave_SQL_Running 状态设置告警,一旦变为 NoConnecting 立即排查。
  • 测试:进行简单的读写测试,在主库插入数据,观察从库是否成功同步。

自建集群的扩容是一个高风险操作,务必做好预案和备份。如果可能,强烈建议采用自动化工具(如 Ansible)或选择云数据库服务来规避手动操作的风险和繁琐性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/95750.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/95750.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/95750.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter快速安装配置全指南

1、JDK安装(Java Development Kit) 1.1.JDK下载 JDK下载址&#xff1a; Java Downloads | Oracle &#xff08;jdk-8u211-windows-x64.exe&#xff09; Android 基于 Java 语言开发&#xff0c;所以必须安装Java环境&#xff0c;Java 环境分JDK 和JRE &#xff0c;JDK提…

设计模式最佳实践 - 模板模式 + 责任链模式

废话不多说&#xff0c;直接切入正题&#xff0c;本篇要讲的是 模板模式 责任链模式 实践。该最佳实践本身就是一种对 责任链模式的增强&#xff0c;模板模式通过 父类 强耦合&#xff0c;预定义好 责任链 next 方法 的前后一些切面行为&#xff0c;优雅简洁。先上示例&#x…

Python快速入门专业版(十一):布尔值与None:Python中的“真假”与“空值”(附逻辑判断案例)

目录引言&#xff1a;为什么“真假”与“空值”是编程的核心逻辑1.布尔值&#xff08;bool&#xff09;&#xff1a;Python中的“真”与“假”1.1 布尔值的基础特性1.2 布尔运算&#xff1a;and、or、not的逻辑规则代码示例&#xff1a;基础布尔运算进阶特性&#xff1a;短路求…

C++学习知识小结

1. 什么是类&#xff1f;什么是对象&#xff1f;两者之间什么关系&#xff1f; 类是一类事物的共同特征的抽象描述&#xff0c;它定义这类所有的属性和方法 可以理解为模版类本身不占用空间&#xff0c;它只是一种定义&#xff0c;描述了对象一个是什么样子、能做什么 对象是根…

9. Mono项目与Unity的关系

1.Mono项目简介 2.Mono项目与Unity是如何结合的 3.从Mono到IL2CPP演变过程1.Mono项目简介 1).定义Mono是一个自由、开源的项目, 由Xamarin现属于微软主导开发; 它的目标是创建一个一套兼容于微软.NET Framework 的跨平台工具2).核心功能a.C#编译器能将你写的C#代码编译成IL(中间…

谷歌Genie 3:让你的照片变成可以玩的游戏世界

你是否曾凝视着一张完美的旅行照片&#xff0c;想象着如果能走进那个画面&#xff0c;自由探索会是怎样一种体验&#xff1f;或者&#xff0c;你是否曾被一幅画的奇幻氛围所吸引&#xff0c;渴望能在那片色彩斑斓的世界里奔跑跳跃&#xff1f;过去&#xff0c;这只是白日梦。而…

Cursor 提示词探索——如何打造真正懂自己的Agent

最近看到鱼皮的Cursor提示词分享&#xff08;微信公众平台)&#xff0c;刚好之前也在做Agent开发&#xff0c;跟提示词打交道的多&#xff0c;也经常发现 ai 蠢蠢的&#xff0c;一点不会根据提示词设计的来&#xff0c;按鱼皮的分享研究了一下&#xff0c;写了这篇博客。 Curs…

C++ 内存模型:用生活中的例子理解并发编程

C 内存模型&#xff1a;用生活中的例子理解并发编程 文章目录C 内存模型&#xff1a;用生活中的例子理解并发编程引言&#xff1a;为什么需要内存模型&#xff1f;核心概念&#xff1a;改动序列原子类型&#xff1a;不可分割的操作内存次序&#xff1a;不同的同步级别1. 宽松次…

AI急速搭建网站:Gemini、Bolt或Jules、GitHub、Cloudflare Pages实战全流程!

文章目录AI急速搭建网站&#xff1a;Gemini、Bolt或Jules、GitHub、Cloudflare Pages实战全流程&#xff01;&#x1f680; 极速建站新范式&#xff1a;Gemini、Bolt.new、GitHub & Cloudflare Pages 全流程实战&#xff01;第一步&#xff1a;创意可视化与代码生成 — Goo…

Qwen2.5-VL实现本地GPTQ量化

本文不生产技术,只做技术的搬运工!! 前言 公开的Qwen2.5-VL模型虽然功能非常强大,但有时面对专业垂直领域的问题往往会出现一些莫名其妙的回复,这时候大家一版选择对模型进行微调,而微调后的模型如果直接部署则显存开销过大,这时就需要执行量化,下面将介绍执行本地GPT…

【Redis】常用数据结构之Hash篇:从常用命令到使用场景详解

目录 1.前言 插播一条消息~ 2.正文 2.1Hash与String对比 2.2常用命令 2.2.1HSET 2.2.2HGET 2.2.3HEXISTS 2.2.4HDEL 2.2.5HKEYS 2.2.6HVALS 2.2.7HGETALL 2.2.8HMGET 2.2.9HLEN 2.2.10HSETNX 2.2.11HINCRBY 2.2.12HINCRBYFLOAT 2.3内部编码 2.3.1. ziplist&…

OSPF基础部分知识点

OSPF基础 前言 路由器 根据 路由表 转发数据包&#xff0c;路由表项 可通过手动配置 和动态路由协议 生成。&#xff08;两种生成方式&#xff09;静态路由比动态路由使用更少的带宽&#xff0c;并且不占用CPU资源来计算和分析路由更新。当网络结构比较简单时&#xff0c;只需配…

Flutter 真 3D 游戏引擎来了,flame_3d 了解一下

在刚刚结束的 FlutterNFriends 大会上&#xff0c;Flame 展示了它们关于 3D 游戏的支持&#xff1a;flame_3d &#xff0c;Flame 是一个以组件系统&#xff08;Flame Component System, FCS&#xff09;、游戏循环、碰撞检测和输入处理为核心的 Flutter 游戏框架&#xff0c;而…

无需公网IP,电脑随时与异地飞牛同步互联保持数据一致性

最近小白有这样一个烦恼&#xff1a;随身带着的电脑每天都在更新内容&#xff0c;于是就会有很多很多的存稿。电脑的空间开始变得不够用了。各式各样的图片、视频、文稿等内容&#xff0c;如果要整理到飞牛NAS上&#xff0c;好像很麻烦&#xff0c;而且每次都是需要回到家里才能…

数据库中间件ShardingSphere v5.2.1

数据库中间件ShardingSphere v5.2.1 文章目录数据库中间件ShardingSphere v5.2.1一 概述1 数据库的瓶颈2 优化的手段3 主从复制4 读写分离5 分库分表5.1 背景5.2 垂直分片5.3 水平分片6 ShardingSphere简介二 ShardingSphere-JDBC讲解1 读写分离实现1.1 基于Docker搭建MySQL主从…

[Upscayl图像增强] Electron主进程命令 | 进程间通信IPC

第三章&#xff1a;Electron主进程命令 欢迎回来&#x1f43b;‍❄️ 在第一章&#xff1a;渲染器用户界面&#xff08;前端&#xff09;中&#xff0c;我们探索了您与之交互的按钮和菜单。然后在第二章&#xff1a;AI模型中&#xff0c;我们了解了让您的图像看起来更棒的&qu…

电竞护航小程序成品搭建三角洲行动护航小程序开发俱乐部点单小程序成品游戏派单小程序定制

功能列表&#xff1a;商家入驻 成为管事 平台公告 客服密钥 客服管理 发单模板 快捷发单 自定义发单 打手入驻 订单裁决 即时通讯 &#xff08;接单者员与发单者&#xff09; 打手排行 邀请排行 余额提现技术栈&#xff1a;前端uniapp 后端java

Redis数据库基础

1.关系型数据库和NoSQL数据库数据库主要分为两大类:关系型数据库与NoSQL数据库关系型数据库&#xff0c;是建立在关系模型基础是的数据库&#xff0c;其借助集合代数等数学概念和方法来处理数据库中的数据主流的MySQL&#xff0c;Oracle&#xff0c;MS SQL Server 和DB2都属于这…

【Java实战㉗】Java日志框架实战:Logback与Log4j2的深度探索

目录一、日志框架概述1.1 日志的作用1.2 常见日志框架1.3 日志级别二、Logback 框架实战2.1 Logback 依赖导入2.2 Logback 配置文件2.3 日志输出格式自定义2.4 Logback 进阶配置三、Log4j2 框架实战3.1 Log4j2 依赖导入3.2 Log4j2 配置文件3.3 Log4j2 与 SLF4J 整合3.4 日志框架…

基于WFOA与BP神经网络回归模型的特征选择方法研究(Python实现)

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取 或者私信获取。 1.项目背景 在大数据分析与智能建模领域&#xff0c;高维数据广泛存在于金融预测、环境监测和工业过程控制等场景…