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)。


目录

  1. 更新系统
  2. 安装 Java 17 JDK
  3. 安装 Maven
  4. 安装 MySQL 5.7(Docker 方案)
  5. 备选:Ubuntu 24.04 原生 MySQL 8.0
  6. 防火墙设置
  7. 验证完整环境
  8. 常见问题 FAQ
  9. 最终推荐组合

一、更新系统

安装任何软件之前,先更新软件包索引和已安装软件:

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-jdk

2.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-amd64

2.4 多版本共存时切换默认 Java

sudo update-alternatives --config java
sudo update-alternatives --config javac

三、安装 Maven

3.1 APT 安装

sudo apt install -y maven

3.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_PASSWORDroot 密码
-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 -p

4.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 appdb

4.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.sql

4.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 mysql
CREATE 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 -p

SELECT VERSION(); 结果参考:

安装方式预期版本
Docker MySQL 5.75.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:$PATH

Q2: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:远程连接失败

排查顺序:

  1. docker ps 确认端口映射正常:0.0.0.0:3306->3306/tcp;
  2. 检查账号 host 限制:

    SELECT user, host FROM mysql.user;

    如果是 'appuser'@'localhost',该账号只能本机连接,需要创建远程账号:

    CREATE USER 'appuser'@'%' IDENTIFIED BY 'AppPass123!';
    GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'%';
    FLUSH PRIVILEGES;
  3. 检查服务器防火墙(UFW)和云厂商安全组。

Q5:MySQL 5.7 不支持 ARM64?

在 ARM64 环境(部分云服务器、树莓派、Apple Silicon 虚拟机)下,mysql:5.7 镜像可能不可用或运行异常。建议改用:

  • MySQL 8.0
  • MariaDB
  • 或在 x86_64 机器上部署 MySQL 5.7

九、最终推荐组合

场景一:开发/测试,需要兼容旧项目

组件方案
Java 17 JDKapt 安装
Mavenapt 安装
MySQL 5.7Docker 安装

一键命令总结:

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 JDKapt 安装
Mavenapt 安装
MySQL8.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 裸奔到公网。

标签: Ubuntu, java 17, maven, mysql5.7

添加新评论