【数据库相关】TxSQL新增数据库节点步骤
TxSQL新增数据库节点步骤
- 准备工作与注意事项
- 具体操作步骤
- 第 1 步:在主库上创建复制专用账号
- 第 2 步:对主库进行锁表并获取二进制日志坐标
- 第 3 步:备份主库数据并传输到新从库
- 第 4 步:主库解锁
- 第 5 步:在新从库服务器上准备数据
- 第 6 步:配置新从库
- 第 7 步:在从库上配置主从复制链路
- 第 8 步:启动从库复制进程并验证
- 第 9 步:更新应用配置或中间件
- 流程总结与后续监控
好的,为自建的 TDSQL(这里我们理解为基于 MySQL 构建的、类似 TDSQL 架构的数据库集群,如 Master-Slave 或 Group Replication 集群)新增一个数据库从节点,需要一套严谨的手工操作流程。
与腾讯云托管的 TDSQL 不同,自建集群的数据同步、配置修改、服务发现等所有步骤都需要手动完成。
以下是详细的步骤指南,假设您的基础架构是标准的 MySQL 主从复制(Master-Slave Replication)。
准备工作与注意事项
⚠️ 重要前提:
- 选择业务低峰期:整个操作过程会对主库产生 I/O 和网络压力,务必在业务低峰期进行。
- 备份主库:操作前,强烈建议对主数据库进行一次全量备份。
- 规划好网络与配置:确保新节点与主节点网络互通,且
server_id
等配置不会冲突。
📋 准备信息:
项目 | 示例 | 说明 |
---|---|---|
主库 IP | 192.168.1.100 | 现有主数据库服务器的 IP 地址 |
新从库 IP | 192.168.1.101 | 新增加的从数据库服务器的 IP 地址 |
复制账号 | repl | 专门用于主从复制的数据库用户 |
复制密码 | Repl@123 | 复制用户的密码 |
主库端口 | 3306 | 主数据库的监听端口 |
数据目录 | /var/lib/mysql | MySQL 数据文件存放目录 |
具体操作步骤
第 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 步:在新从库服务器上准备数据
- 安装 MySQL:确保新服务器上已安装与主库完全相同版本的 MySQL。
- 停止 MySQL 服务:
$ systemctl stop mysql
- 清空数据目录(如果是全新安装可跳过):
$ rm -rf /var/lib/mysql/*
- 恢复备份数据:
如果使用 mysqldump:
如果使用 XtraBackup:$ mysql -uroot -p < /tmp/full_backup.sql
# 将传输过来的文件权限修改为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 步:启动从库复制进程并验证
-
启动 Slave:
mysql> START SLAVE; -- MySQL 8.0+ 推荐使用 START REPLICA;
-
检查复制状态(这是最关键的一步):
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 步:更新应用配置或中间件
新的从节点已经加入集群,但应用程序还无法使用它进行读操作。您需要:
- 更新应用配置:如果应用直接连接数据库,需要在配置文件中添加新从库的连接信息。
- 更新中间件:如果使用了数据库中间件(如 ProxySQL, MaxScale, HAProxy),需要将新从库的IP加入后端服务器组(Backend Servers)并重新加载配置。
流程总结与后续监控
整个手动添加从节点的流程可以总结为以下图表:
后续工作:
- 监控:持续监控
Seconds_Behind_Master
指标,确保复制延迟为0。 - 告警:对
Slave_IO_Running
和Slave_SQL_Running
状态设置告警,一旦变为No
或Connecting
立即排查。 - 测试:进行简单的读写测试,在主库插入数据,观察从库是否成功同步。
自建集群的扩容是一个高风险操作,务必做好预案和备份。如果可能,强烈建议采用自动化工具(如 Ansible)或选择云数据库服务来规避手动操作的风险和繁琐性。