目 录CONTENT

文章目录

数据存储高可用 - MySQL主从复制实践指南

Administrator
2025-10-24 / 0 评论 / 0 点赞 / 16 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

数据存储高可用 - MySQL主从复制实践指南

文章简介

在企业级微服务架构中,数据存储的高可用性是保障业务连续性的关键要素。本文作为《若依微服务项目云原生部署实战》专栏的第4篇,将深入探讨MySQL主从复制的原理、配置方法及在若依微服务项目中的实际应用,帮助读者构建稳定可靠的数据存储架构。

重要提醒:由于安装包使用网盘,其链接经常被取消分享,请联系张师傅(微信:ggttxlss)获取完整的离线安装包。

目标读者

  • 微服务架构师
  • DevOps工程师
  • 数据库管理员
  • 云原生技术实践者

实际应用场景背景

在若依微服务项目的云原生部署实践中,数据存储的高可用性是保障业务连续性的关键。特别是在电商、金融等对数据一致性要求极高的场景中,通过MySQL主从复制技术实现读写分离和故障切换,能够有效提升系统性能和数据安全性。本篇文章将基于真实的项目实践,详细讲解如何在虚拟机环境中部署和配置MySQL主从架构。

一、服务器资源规划方案

1.1 企业级硬件配置标准

主节点(写操作承载):192.168.3.7  

从节点(读操作负载):192.168.3.8  

二、安装MySQL企业级环境

2.1 安装包准备

# 5.7.17版本安装包下载地址:
https://pan.quark.cn/s/7b94f1f5dfd1 # 如遇链接失败,请添加张师傅微信:ggttxlss

2.2 安装步骤

在主从节点上执行以下操作:

  • 解压安装包
tar -xvf mysql-5.7.17.tar
  • 创建安装目录
mkdir -p mysql_install_package
mv mysql-community-* ./mysql_install_package/
  • 卸载mariadb
yum list installed | grep mariadb
systemctl stop mariadb
rm -rf /etc/my.cnf
rm -rf /var/lib/mysql
rpm -e --nodeps mariadb-server mariadb
  • 安装mysql
yum -y install mysql-community-*.rpm
rpm -ivh --force --nodeps *.rpm
# 查看安装结果
rpm -qa | grep mysql
systemctl start mysqld
# 单独查看某一个进程有没有
ps -C mysqld 
  • 开机自启
systemctl enable mysqld
  • 修改密码
# 初始密码
grep password /var/log/mysqld.log

# 登陆
mysql -hlocalhost -uroot -p
# 默认密码什么都不能做,因此需要修改密码
alter user root@"localhost" identified by "Huawei@123";

  • 允许远程登录
# 添加root用户,可以从任意地方登录
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Huawei@123' WITH GRANT OPTION;
FLUSH PRIVILEGES;

三、核心配置文件深度解析

3.1 主节点配置模板(my.cnf)

企业级生产环境配置参数,建议根据实际负载动态调整

[mysqld]
# 基础架构配置
server-id=0307                # 企业级4位编码规范(主节点标识)
log-bin=mysql-bin-0307        # 二进制日志命名规范(含节点标识)
binlog_format=MIXED           # 混合日志格式(企业级数据完整性保障)

# 性能调优参数
innodb_buffer_pool_size=2G    # 物理内存70%分配(企业级缓存优化)
innodb_flush_log_at_trx_commit=2  # 日志刷新策略(性能与可靠性平衡)
innodb_log_file_size=128M     # 日志文件扩容(减少checkpoint开销)
thread_cache_size=128         # 线程池复用优化(高并发场景必备)

# 连接管理配置
max_connections=1024          # 企业级并发连接数(支持千级连接)
wait_timeout=28800            # 非交互连接超时(避免僵尸连接)

# 字符集配置
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

# 其他优化配置
bind-address = 0.0.0.0
port = 3306

3.2 从节点配置要点

企业级高可用集群从节点配置规范

[mysqld]
# 基础架构配置
server-id=0308                # 从节点唯一标识
relay_log=mysql-relay-bin-0308 # 中继日志命名规范
read_only=ON                  # 从库只读策略(数据安全防护)

# 复制优化配置
slave_parallel_workers=4      # 多线程复制(MySQL 5.7+并行复制技术)

# 性能调优参数
innodb_buffer_pool_size=2G    # 物理内存70%分配(企业级缓存优化)
innodb_flush_log_at_trx_commit=2  # 日志刷新策略(性能与可靠性平衡)
innodb_log_file_size=128M     # 日志文件扩容(减少checkpoint开销)
thread_cache_size=128         # 线程池复用优化(高并发场景必备)

# 连接管理配置
max_connections=1024          # 企业级并发连接数(支持千级连接)
wait_timeout=28800            # 非交互连接超时(避免僵尸连接)

# 字符集配置
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

# 其他优化配置
bind-address = 0.0.0.0
port = 3306

这是张师傅的配置文件,包含0307(master)和0308(slave)
0307.my.cnf
0308.my.cnf

四、主从复制架构搭建流程

4.1 初始化主节点

登录Master节点MySQL,创建复制用户:

mysql -u root -p

CREATE USER 'repluser'@'%' IDENTIFIED BY 'ciTools@345';
GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'%';
FLUSH PRIVILEGES;

-- 验证账户权限
SHOW GRANTS FOR 'repluser'@'%';

-- 查看主库状态
SHOW MASTER STATUS;

记录下FilePosition的值,后续配置Slave时需要使用。

4.2 配置从节点

在Slave节点上配置主从关系:

mysql -u root -p

-- 配置主库信息(日志文件需动态获取)
CHANGE MASTER TO 
  MASTER_HOST='192.168.3.7',
  MASTER_USER='repluser',
  MASTER_PASSWORD='ciTools@345',
  MASTER_LOG_FILE='mysql-bin-0307.000001',  -- 动态获取当前日志文件
  MASTER_LOG_POS=154;  -- 动态获取当前日志位置
  
-- 启动从库复制
START SLAVE;

-- 验证复制状态
SHOW SLAVE STATUS\G
-- 核心监控指标:
-- Slave_IO_Running: Yes
-- Slave_SQL_Running: Yes
-- Seconds_Behind_Master: 0

4.3 验证主从复制

在Master节点创建测试数据库和表:

CREATE DATABASE test_replication;
USE test_replication;

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  email VARCHAR(100)
);

INSERT INTO users (name, email) VALUES ('张三', 'zhangsan@example.com');

在Slave节点验证数据是否同步:

USE test_replication;
SELECT * FROM users;

五、数据库备份策略

在生产环境中,定期备份数据库是保障数据安全的重要措施。以下是一个自动化备份所有数据库的脚本示例:

#!/bin/bash  

set -x 
 
# MySQL 配置  
HOST="192.168.3.7"
PORT="3306"
MYSQL_USER="root"  
MYSQL_PASSWORD="Huawei@123"  
date=$(date +%Y%m%d-%H%M%S)  
BASE_BACKUP_DIR="/data/mysqldump"  
BACKUP_DIR="$BASE_BACKUP_DIR/$date"  
ARCHIVE_FILE="$BASE_BACKUP_DIR/${date}.tar.gz"

# 创建备份目录(如果不存在)  
mkdir -p $BACKUP_DIR  
  
# 获取所有数据库列表(排除系统数据库)
DATABASES=$(mysql -u $MYSQL_USER -p$MYSQL_PASSWORD -h $HOST -P $PORT -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema|mysql|sys)")  
  
# 遍历所有数据库并进行备份  
for DB in $DATABASES; do  
  BACKUP_FILE="$BACKUP_DIR/${DB}_backup_$date.sql"  
  echo "$BACKUP_FILE"  
  mysqldump -u $MYSQL_USER -p$MYSQL_PASSWORD -h $HOST -P $PORT -R -E --single-transaction $DB > $BACKUP_FILE  
  
  # 检查备份是否成功  
  if [ $? -ne 0 ]; then  
    echo "[$date] Backup failed for database: $DB" >> $BASE_BACKUP_DIR/backup.log  
  else  
    echo "[$date] Backup successful for database: $DB, file: $BACKUP_FILE" >> $BASE_BACKUP_DIR/backup.log  
  fi  
done  

# 创建备份的 tar.gz 文件
tar -zcvf $ARCHIVE_FILE -C $BASE_BACKUP_DIR $date

# 检查 tar.gz 创建是否成功
if [ $? -eq 0 ]; then
  echo "[$date] Archive created successfully: $ARCHIVE_FILE" >> $BASE_BACKUP_DIR/backup.log
  
  # 删除原始的备份文件夹
  rm -rf $BACKUP_DIR
  echo "[$date] Original backup directory deleted: $BACKUP_DIR" >> $BASE_BACKUP_DIR/backup.log
else
  echo "[$date] Archive creation failed" >> $BASE_BACKUP_DIR/backup.log
fi


# 删除4周前的备份文件  
find $BASE_BACKUP_DIR/* -type d  -mtime +28 -exec rm -r {} \;  
find $BASE_BACKUP_DIR -type f -name "*.tar.gz" -mtime +28 -exec rm {} \;

echo "[$date] Old backups deleted (older than 4 weeks)" >> $BASE_BACKUP_DIR/backup.log

设置定时任务,每天凌晨2点执行备份:

# 编辑定时任务
crontab -e
# 添加以下内容
0 2 * * * /data/mysqldump/backupall.sh >/dev/null 2>&1 &

六、数据库用户管理规范

为了更好地管理和维护数据库用户信息,推荐使用Excel文件记录相关信息,包括用户名、密码、数据库名等。在/upload/files/目录下的mysql管理.xlsx文件可用于记录这些信息。
mysql管理.xlsx,如果大家有更好的方法,请留言评论,非常欢迎提意见。

通过Excel表格管理的优势:

  1. 统一管理所有数据库用户的账号和密码信息
  2. 快速生成创建数据库、用户授权的SQL语句
  3. 方便批量操作和审计
  4. 降低人为操作失误风险

使用方法:

  1. 在Excel表格中录入数据库实例信息、用户名、密码等
  2. 利用Excel公式拼接生成对应的SQL命令
  3. 将生成的SQL命令直接复制到MySQL命令行中执行

例如,可以通过以下方式快速创建数据库和用户:

-- 创建数据库
CREATE DATABASE IF NOT EXISTS ruoyi DEFAULT CHARACTER SET UTF8MB4 COLLATE UTF8MB4_GENERAL_CI;

-- 创建用户并授权
CREATE USER 'ruoyi_user'@'%' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON ruoyi.* TO 'ruoyi_user'@'%';
FLUSH PRIVILEGES;

这种方式可以大大提高数据库初始化和日常维护的效率,同时保证操作的一致性和准确性。

参考资料

  1. MySQL官方文档 - Replication
  2. 《高性能MySQL》第三版
  3. 若依微服务官方文档
  4. CentOS官方文档
  5. 虚拟机部署mysql单机5.7.17版本
  6. 虚拟机部署Mysql主从复制的5.7.17版本
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区