VPS服务器购买后MySQL主从集群搭建自动化脚本

购买VPS服务器后,搭建MySQL主从集群是提升数据库性能和可靠性的关键操作。手动搭建步骤繁琐且容易出错,借助自动化脚本能大幅降低操作门槛,缩短部署时间。
MySQL主从集群的基本原理
主从集群(主服务器Master负责接收写操作,从服务器Slave同步主服务器的变更记录并处理读请求)的核心是读写分离。主服务器专注写入,从服务器分担读取压力,既能提升整体吞吐量,又能通过数据冗余增强容灾能力。
自动化脚本搭建步骤
脚本主要涵盖MySQL安装、主从配置、同步测试三大环节,以下是CentOS系统下的详细实现。
步骤1:安装MySQL
首先需要在主从服务器上完成MySQL的基础安装,脚本会自动处理依赖下载和服务启动。
#!/bin/bash
# 安装基础依赖
yum install -y wget
# 下载MySQL Yum源
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
# 安装Yum仓库
yum localinstall -y mysql80-community-release-el7-3.noarch.rpm
# 安装MySQL服务端
yum install -y mysql-server
# 启动并设置开机自启
systemctl start mysqld
systemctl enable mysqld
步骤2:配置主服务器
主服务器需要开启二进制日志(记录写操作)并创建同步账号,具体操作通过脚本自动完成。
#!/bin/bash
# 追加主服务器配置到my.cnf
cat << EOF >> /etc/my.cnf
[mysqld]
server-id = 1 # 主服务器唯一标识
log-bin = mysql-bin # 开启二进制日志
binlog-do-db = your_db # 需要同步的数据库名(替换为实际名称)
EOF
# 重启服务使配置生效
systemctl restart mysqld
# 创建用于同步的账号
mysql -e "CREATE USER 'repl_user'@'%' IDENTIFIED BY 'your_password';" # 替换密码
mysql -e "GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';"
mysql -e "FLUSH PRIVILEGES;"
# 记录主服务器状态(用于从服务器连接)
mysql -e "SHOW MASTER STATUS\G" > master_status.txt
步骤3:配置从服务器
从服务器需要关联主服务器的日志文件和位置,脚本会自动提取主服务器状态并完成连接配置。
#!/bin/bash
# 追加从服务器配置到my.cnf
cat << EOF >> /etc/my.cnf
[mysqld]
server-id = 2 # 从服务器唯一标识(需与主服务器不同)
relay-log = mysql-relay-bin # 中继日志存储位置
EOF
# 重启服务
systemctl restart mysqld
# 提取主服务器日志信息
master_file=$(grep "File" master_status.txt | awk '{print $2}')
master_pos=$(grep "Position" master_status.txt | awk '{print $2}')
# 配置从服务器连接主服务器(替换主服务器IP)
mysql -e "CHANGE MASTER TO
MASTER_HOST='your_master_ip',
MASTER_USER='repl_user',
MASTER_PASSWORD='your_password',
MASTER_LOG_FILE='$master_file',
MASTER_LOG_POS=$master_pos;"
# 启动同步并检查状态
mysql -e "START SLAVE;"
mysql -e "SHOW SLAVE STATUS\G" # 确保Slave_IO_Running和Slave_SQL_Running均为Yes
同步测试验证
完成配置后需验证数据同步效果。在主服务器执行写入操作,观察从服务器是否同步:
# 主服务器创建测试数据库
mysql -e "CREATE DATABASE test_db;"
# 从服务器查看是否同步
mysql -e "SHOW DATABASES LIKE 'test_db';"
购买VPS服务器后,通过上述自动化脚本可快速搭建高可用的MySQL主从集群。实际使用中可根据业务需求调整同步数据库范围(binlog-do-db)或添加更多从服务器,进一步提升读性能。