所有命令均需以 root 或 sudo 权限执行。
摘要:本文以 MySQL 9.7.2 二进制包为例,完整演示在 Linux 上从零安装 MySQL 并启用随机端口的全过程。内容涵盖系统依赖安装、用户与目录创建、随机端口生成、
/etc/my.cnf配置、数据库初始化、Systemd 服务托管、root 密码修改、防火墙放行,以及 Spring Boot 连接适配,并附常用管理命令与端口验证方法,适合需要自定义端口部署 MySQL 的开发者参考。
前置准备
- 已下载
mysql-9.7.2-linux-glibc2.28-x86_64.tar.xz。 - 具有
root权限。
第 1 步:安装系统依赖
sudo yum install -y libaio numactl
第 2 步:创建 mysql 用户和组
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
第 3 步:解压安装包至目标目录
cd /tmp
sudo tar -xvf mysql-9.7.2-linux-glibc2.28-x86_64.tar.xz -C /opt/
第 4 步:创建数据、日志、binlog 目录并设置权限
sudo mkdir -p /opt/mysql/{data,binlog,log}
sudo chown -R mysql:mysql /opt/mysql
第 5 步:生成随机端口并写入配置文件
使用 Shell 生成一个 1024~65535 范围内的随机端口(避开常见服务端口),并存入变量:
# 生成随机端口(示例:使用 $RANDOM 取模)
RANDOM_PORT=$((RANDOM % 64512 + 1024))
echo "生成的随机端口为: $RANDOM_PORT"
注意:若端口已被占用,后续启动会失败,可重复执行生成新的随机端口。
第 6 步:创建 MySQL 配置文件 /etc/my.cnf
使用以下内容(已移除所有 MySQL 9.7 废弃参数),并将 port 替换为上一步生成的 $RANDOM_PORT:
sudo vi /etc/my.cnf
粘贴以下配置,**手动将 port = 3306 改为 **port = 你的随机端口(或使用 sed 自动替换):
[mysqld]
# 基础设置
user = mysql
port = 你的随机端口 # 此处替换为实际端口号
basedir = /opt/mysql
datadir = /opt/mysql/data
socket = /tmp/mysql.sock
pid-file = /opt/mysql/mysqld.pid
# Binlog 设置
log-bin = /opt/mysql/binlog/mysql-bin
binlog_expire_logs_seconds = 2592000
# 日志设置
log-error = /opt/mysql/log/mysqld.log
slow-query-log = 1
slow-query-log-file = /opt/mysql/log/mysql-slow.log
long-query-time = 2
# 字符集与连接数
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
max_connections = 10000
# 自增ID配置
auto_increment_increment = 10
auto_increment_offset = 1
自动替换端口(可选):执行以下命令将 你的随机端口 替换为实际值:
sudo sed -i "s/你的随机端口/$RANDOM_PORT/" /etc/my.cnf
第 7 步:初始化数据库
sudo rm -rf /opt/mysql/data/*
sudo /opt/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql
初始化成功后,获取临时密码:
sudo grep 'temporary password' /opt/mysql/log/mysqld.log
第 8 步:创建 Systemd 服务文件
sudo vi /etc/systemd/system/mysqld.service
内容如下(端口变量不影响服务文件,因为端口在配置文件中指定):
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
Type=notify
TimeoutSec=0
ExecStart=/opt/mysql/bin/mysqld --defaults-file=/etc/my.cnf
LimitNOFILE=10000
Restart=on-failure
RestartPreventExitStatus=1
PrivateTmp=false
第 9 步:启动服务并设置开机自启
sudo systemctl daemon-reload
sudo systemctl start mysqld
sudo systemctl enable mysqld
sudo systemctl status mysqld
第 10 步:修改 root 密码
登录时需指定端口(用 -P 参数):
/opt/mysql/bin/mysql -uroot -p -P $RANDOM_PORT
输入临时密码后,执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
FLUSH PRIVILEGES;
EXIT;
第 11 步:(可选)防火墙开放随机端口
若系统防火墙启用,需开放该端口:
# firewalld
sudo firewall-cmd --permanent --add-port=$RANDOM_PORT/tcp
sudo firewall-cmd --reload
# 或 iptables
sudo iptables -I INPUT -p tcp --dport $RANDOM_PORT -j ACCEPT
第 12 步:Spring Boot 适配配置(使用随机端口)
在 Spring Boot 的 application.properties 中,JDBC URL 需显式指定端口:
spring.datasource.url=jdbc:mysql://你的服务器IP:${RANDOM_PORT}/你的数据库名?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
spring.datasource.username=你的用户名
spring.datasource.password=你的密码
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
若使用 application.yml:
spring:
datasource:
url: jdbc:mysql://你的服务器IP:${RANDOM_PORT}/你的数据库名?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
username: 你的用户名
password: 你的密码
driver-class-name: com.mysql.cj.jdbc.Driver
注意:这里的 ${RANDOM_PORT} 是占位符,实际部署时需替换为第 5 步生成的具体端口号。您可以将端口写入环境变量或配置文件供 Spring Boot 读取。
管理命令(指定端口)
- 登录 MySQL:
/opt/mysql/bin/mysql -uroot -p -P $RANDOM_PORT - 服务管理:
sudo systemctl start|stop|restart|status mysqld(端口不影响)
验证随机端口
sudo netstat -tlnp | grep mysqld
输出应显示监听在第 5 步生成的随机端口上。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/snowhite91/article/details/164209656



