Ubuntu 24.04 搭建 Java 17 + Maven + MySQL 5.7 开发环境完整指南
Ubuntu 24.04 搭建 Java 17 + Maven + MySQL 5.7 开发环境完整指南
写在前面:关于 MySQL 5.7 的现状
MySQL 5.7 已经 EOL(生命周期结束),Ubuntu 24.04 官方源也不再提供 MySQL 5.7 —— 直接
apt install mysql-server装到的是 MySQL 8.0。因此本文的推荐策略是:
- 兼容旧项目:用 Docker 跑 MySQL 5.7,最稳、最干净;
- 新项目:直接使用 MySQL 8.0 或 MariaDB。
适用环境:Ubuntu 24.04 LTS(x86_64)。
目录
- 更新系统
- 安装 Java 17 JDK
- 安装 Maven
- 安装 MySQL 5.7(Docker 方案)
- 备选:Ubuntu 24.04 原生 MySQL 8.0
- 防火墙设置
- 验证完整环境
- 常见问题 FAQ
- 最终推荐组合
一、更新系统
安装任何软件之前,先更新软件包索引和已安装软件:
sudo apt update
sudo apt upgrade -y如果升级了内核等核心组件,建议重启一次(可选):
sudo reboot二、安装 Java 17 JDK
2.1 安装 OpenJDK 17
Ubuntu 24.04 官方仓库自带 OpenJDK 17,直接安装:
sudo apt install -y openjdk-17-jdk2.2 验证安装
java -version
javac -version预期输出类似:
openjdk version "17.0.x"2.3 配置 JAVA_HOME
Maven、Tomcat、Spring Boot 等大量工具链都依赖 JAVA_HOME。
先确认 Java 的实际安装路径:
readlink -f $(which java)
# 通常输出:/usr/lib/jvm/java-17-openjdk-amd64/bin/java写入系统级环境变量:
sudo tee /etc/profile.d/java.sh <<'EOF'
export JAVA_HOME="$(dirname "$(dirname "$(readlink -f "$(command -v java)")")")"
export PATH="$JAVA_HOME/bin:$PATH"
EOF使其生效并验证:
source /etc/profile.d/java.sh
echo $JAVA_HOME
# 预期输出:/usr/lib/jvm/java-17-openjdk-amd642.4 多版本共存时切换默认 Java
sudo update-alternatives --config java
sudo update-alternatives --config javac三、安装 Maven
3.1 APT 安装
sudo apt install -y maven3.2 验证
mvn -version预期输出类似:
Apache Maven 3.x.x
Java version: 17.x.x注意:务必确认这里显示的Java version是 17。如果不是,先检查echo $JAVA_HOME和java -version,必要时重新执行source /etc/profile.d/java.sh。
3.3 可选:配置阿里云镜像加速
国内网络下载 Maven 依赖较慢时,配置阿里云镜像:
mkdir -p ~/.m2
cat > ~/.m2/settings.xml <<'EOF'
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>aliyunmaven</id>
<mirrorOf>central</mirrorOf>
<name>Aliyun Maven Mirror</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
</mirrors>
</settings>
EOF四、安装 MySQL 5.7(Docker 方案,推荐)
由于 Ubuntu 24.04 官方源没有 MySQL 5.7,最省心的方式是用 Docker 运行。
4.1 安装并启动 Docker
sudo apt install -y docker.io
sudo systemctl enable docker
sudo systemctl start docker
sudo systemctl status docker # 按 q 退出状态查看4.2 可选:当前用户免 sudo 使用 Docker
sudo usermod -aG docker $USER
newgrp docker # 或重新登录会话
docker ps # 不报权限错误即配置成功不配置也可以,后续所有命令前加 sudo 即可。
4.3 拉取并启动 MySQL 5.7 容器
docker pull mysql:5.7启动容器(先把 YourStrongPass123! 改成你自己的强密码):
docker run -d \
--name mysql57 \
--restart unless-stopped \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD='YourStrongPass123!' \
-e TZ=Asia/Shanghai \
-v mysql57_data:/var/lib/mysql \
mysql:5.7 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci参数速查:
| 参数 | 说明 |
|---|---|
--name mysql57 | 容器名称 |
-p 3306:3306 | 映射 MySQL 端口 |
-e MYSQL_ROOT_PASSWORD | root 密码 |
-e TZ | 容器时区 |
-v mysql57_data:/var/lib/mysql | 数据持久化到命名卷 |
--character-set-server=utf8mb4 | 服务端字符集 |
--collation-server=utf8mb4_unicode_ci | 默认排序规则 |
3306 被占用时改成 -p 3307:3306,后续连接端口相应改为 3307。4.4 确认启动成功
docker ps
docker logs -f mysql57 # 看到 "ready for connections" 即成功,Ctrl+C 退出跟踪4.5 连接 MySQL
安装本地客户端:
sudo apt install -y mysql-client两种方式任选其一:
# 方式一:本机客户端连接
mysql -h 127.0.0.1 -P 3306 -uroot -p
# 方式二:直接进入容器执行
docker exec -it mysql57 mysql -uroot -p4.6 创建业务数据库和账号
CREATE DATABASE appdb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'appuser'@'%' IDENTIFIED BY 'AppPass123!';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'%';
FLUSH PRIVILEGES;
SHOW DATABASES;
EXIT;'appuser'@'%'允许任意来源地址连接。生产环境不要随意开放%,建议限制具体来源 IP。
用普通账号验证:
mysql -h 127.0.0.1 -P 3306 -uappuser -p appdb4.7 容器日常运维命令
| 操作 | 命令 |
|---|---|
| 停止 | docker stop mysql57 |
| 启动 | docker start mysql57 |
| 重启 | docker restart mysql57 |
| 查看日志 | docker logs mysql57 |
| 进入容器 | docker exec -it mysql57 bash |
| 删除容器 | docker stop mysql57 && docker rm mysql57 |
| 删除数据卷(慎重,数据丢失) | docker volume rm mysql57_data |
4.8 备份与恢复
# 备份 appdb
docker exec mysql57 sh -c 'mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" appdb' > appdb_backup.sql
# 恢复到 appdb
docker exec -i mysql57 sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" appdb' < appdb_backup.sql4.9 可选:用 Docker Compose 管理
Ubuntu 24.04 安装 Compose V2:
sudo apt install -y docker-compose-v2
mkdir -p ~/mysql57 && cd ~/mysql57
cat > docker-compose.yml <<'EOF'
services:
mysql57:
image: mysql:5.7
container_name: mysql57
restart: unless-stopped
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: YourStrongPass123!
TZ: Asia/Shanghai
volumes:
- mysql57_data:/var/lib/mysql
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
volumes:
mysql57_data:
EOF常用操作:
docker compose up -d # 启动
docker compose ps # 查看状态
docker compose logs -f # 跟踪日志
docker compose down # 停止
docker compose down -v # 停止并删除数据卷(慎重)五、备选:Ubuntu 24.04 原生 MySQL 8.0
新项目建议直接用系统自带的 MySQL 8.0:
sudo apt install -y mysql-server
sudo systemctl enable --now mysql
sudo systemctl status mysql
sudo mysql_secure_installation # 安全初始化初始化和建库:
sudo mysqlCREATE DATABASE appdb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'AppPass123!';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;测试:
mysql -uappuser -p appdb六、防火墙设置
纯本机开发无需开放 3306。需要远程访问且使用 UFW 时:
sudo ufw allow 3306/tcp
sudo ufw reload更安全的做法是只放行指定 IP:
sudo ufw allow from 192.168.1.100 to any port 3306查看规则:
sudo ufw status强烈建议:不要把 MySQL 3306 直接暴露公网。生产环境应通过内网、VPN、SSH 隧道或云安全组限制访问来源。
七、验证完整环境
# 1. Java —— 预期 openjdk version "17"
java -version
# 2. Maven —— 预期显示 Maven 版本 + Java 17
mvn -version
# 3. MySQL —— 进入后执行 SELECT VERSION();
mysql -h 127.0.0.1 -P 3306 -uroot -pSELECT VERSION(); 结果参考:
| 安装方式 | 预期版本 |
|---|---|
| Docker MySQL 5.7 | 5.7.x |
| Ubuntu 24.04 原生 | 8.0.x |
八、常见问题 FAQ
Q1:mvn -version 显示的不是 Java 17
echo $JAVA_HOME
java -version
source /etc/profile.d/java.sh仍不对则手动指定:
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATHQ2:Docker 启动 MySQL 5.7 后立刻退出
先看日志定位原因:
docker logs mysql57常见原因:
- root 密码过于简单;
- 3306 端口被占用(改用
-p 3307:3306,连接时mysql -h 127.0.0.1 -P 3307 -uroot -p); - 数据卷权限异常;
- ARM 架构镜像兼容性问题(见 Q5)。
Q3:忘记 MySQL root 密码
Docker 方式最省事的做法是重建容器(会丢数据,重要数据先备份数据卷):
docker stop mysql57
docker rm mysql57
docker volume rm mysql57_data然后重新执行启动命令。
Q4:远程连接失败
排查顺序:
docker ps确认端口映射正常:0.0.0.0:3306->3306/tcp;检查账号 host 限制:
SELECT user, host FROM mysql.user;如果是
'appuser'@'localhost',该账号只能本机连接,需要创建远程账号:CREATE USER 'appuser'@'%' IDENTIFIED BY 'AppPass123!'; GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'%'; FLUSH PRIVILEGES;- 检查服务器防火墙(UFW)和云厂商安全组。
Q5:MySQL 5.7 不支持 ARM64?
在 ARM64 环境(部分云服务器、树莓派、Apple Silicon 虚拟机)下,mysql:5.7 镜像可能不可用或运行异常。建议改用:
- MySQL 8.0
- MariaDB
- 或在 x86_64 机器上部署 MySQL 5.7
九、最终推荐组合
场景一:开发/测试,需要兼容旧项目
| 组件 | 方案 |
|---|---|
| Java 17 JDK | apt 安装 |
| Maven | apt 安装 |
| MySQL 5.7 | Docker 安装 |
一键命令总结:
sudo apt update
sudo apt upgrade -y
sudo apt install -y openjdk-17-jdk maven docker.io mysql-client
sudo systemctl enable --now docker
sudo docker run -d \
--name mysql57 \
--restart unless-stopped \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD='YourStrongPass123!' \
-e TZ=Asia/Shanghai \
-v mysql57_data:/var/lib/mysql \
mysql:5.7 \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_unicode_ci
# 连接验证
mysql -h 127.0.0.1 -P 3306 -uroot -p场景二:生产环境新项目
| 组件 | 方案 |
|---|---|
| Java 17 JDK | apt 安装 |
| Maven | apt 安装 |
| MySQL | 8.0(apt 原生安装) |
一键命令总结:
sudo apt update
sudo apt upgrade -y
sudo apt install -y openjdk-17-jdk maven mysql-server
sudo systemctl enable --now mysql
sudo mysql_secure_installation小结
- Java 17 和 Maven 在 Ubuntu 24.04 上一行 apt 搞定,重点是配好
JAVA_HOME并确认 Maven 用的是 Java 17; - MySQL 5.7 已 EOL 且官方源不再提供,旧项目用 Docker 跑 5.7,新项目直接上 8.0;
- 数据持久化交给命名卷,备份用
mysqldump,安全上永远不要把 3306 裸奔到公网。