在日常开发或部署过程中,很多小伙伴需要在 Ubuntu 服务器上部署 MySQL 数据库,并支持远程访问 root 用户。手动配置过程繁琐、容易出错。本文为你准备了一套 可自定义配置的自动化脚本,一键完成安装 + 配置 + 开放远程访问。
🧩 可自定义配置参数说明
配置项 | 说明 | 默认值 |
---|---|---|
MYSQL_ROOT_PASSWORD |
MySQL root 用户密码 | pgsql@Lzy2025++ |
MYSQL_PORT |
MySQL 监听端口 | 3306 |
MYSQL_BIND_ADDRESS |
MySQL 绑定地址,0.0.0.0 表示允许远程 |
0.0.0.0 |
📜 脚本内容(支持配置参数)
保存以下内容为 install_mysql.sh
,即可一键部署:
#!/bin/bash
# ============================
# ✅ 可配置参数(可通过环境变量传入)
# ============================
MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-'mysql123'} # 设置 root 密码,支持自定义
MYSQL_PORT=${MYSQL_PORT:-3306} # MySQL监听端口,默认3306
MYSQL_BIND_ADDRESS=${MYSQL_BIND_ADDRESS:-'0.0.0.0'} # 设置允许连接的 IP,默认所有地址
echo "[1/6] 更新APT源并安装MySQL Server..."
apt update
DEBIAN_FRONTEND=noninteractive apt install -y mysql-server # 静默安装MySQL,不弹交互框
echo "[2/6] 启动MySQL服务..."
systemctl enable mysql # 设置为开机启动
systemctl start mysql # 启动服务
echo "[3/6] 设置MySQL root密码并允许远程连接..."
mysql -u root <<EOF
-- 修改 root 用户的认证插件为 mysql_native_password(兼容大部分客户端)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '${MYSQL_ROOT_PASSWORD}';
-- 创建 root@'%' 用户,允许远程连接,设置相同密码
CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}';
-- 授予 root@'%' 完整权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
-- 刷新权限表
FLUSH PRIVILEGES;
EOF
echo "[4/6] 修改MySQL配置文件,允许远程访问..."
MYSQL_CONF="/etc/mysql/mysql.conf.d/mysqld.cnf"
# 修改或追加 bind-address 行
sed -i "s/^bind-address.*/bind-address = ${MYSQL_BIND_ADDRESS}/" "$MYSQL_CONF" || echo "bind-address = ${MYSQL_BIND_ADDRESS}" >> "$MYSQL_CONF"
# 修改或追加 port 行
sed -i "s/^port.*/port = ${MYSQL_PORT}/" "$MYSQL_CONF" || echo "port = ${MYSQL_PORT}" >> "$MYSQL_CONF"
echo "[5/6] 重启MySQL服务以应用配置..."
systemctl restart mysql
echo "[6/6] MySQL安装与配置完成 ✅"
echo "📌 你现在可以通过以下命令远程连接数据库:"
echo " mysql -h [服务器IP] -P ${MYSQL_PORT} -u root -p"
🧪 使用方法
将脚本保存为
install_mysql.sh
给脚本赋予执行权限:
chmod +x install_mysql.sh
可自定义配置执行:
MYSQL_ROOT_PASSWORD=myPassword123 MYSQL_PORT=3307 ./install_mysql.sh
或使用默认配置:
./install_mysql.sh
📌 最终效果
- ✅ MySQL 自动安装完成
- ✅ root 密码配置完成
- ✅ 支持远程访问
- ✅ 防火墙无干扰(请确保你服务器安全组或
ufw
已放行 3306 端口)
🚧 常见问题排查
问题 | 解决方式 |
---|---|
连接报错 Can not read response from server |
检查 MySQL 是否监听公网地址 / 防火墙是否开放 |
root 无法远程连接 | 检查是否授权 root@'%' 并使用 mysql_native_password |
外部工具无法连接 | 检查是否勾选了 useSSL=false 、端口号是否正确 |