【2025最新】Ubuntu22.04 安装 MySQL8.0 教程

发布于:2025-07-02 ⋅ 阅读:(21) ⋅ 点赞:(0)


确保你是系统的管理员(root),能够省掉很多麻烦,安装数据库需要很高的权限。

1. 更新软件包

sudo apt update

执行结果:

在这里插入图片描述

我们可以查看一下可用的软件包

sudo apt search mysql-server

执行结果:

在这里插入图片描述

2. 安装最新版本

sudo apt install -y mysql-server

3. 启动 MySQL 服务

sudo systemctl start mysql

可以看到 mysql 已经安装好了

在这里插入图片描述

如果 MySQL 正在运行,将看到 “active (running)” 的输出信息。

4. 检查 MySQL 版本

mysql --version

执行结果:

在这里插入图片描述

5. 修改 root 密码

先以 root 身份登录

mysql -uroot -p

执行结果:

在这里插入图片描述

然后修改 root 密码

alter user 'root'@'localhost' identified with mysql_native_password by '你的密码';

执行结果:

在这里插入图片描述

最后刷新密码

flush privileges;

执行结果:

在这里插入图片描述

验证密码是否修改成功:

在这里插入图片描述

可以看到第一次我没有输密码,无法登录。第二次输入修改后的密码,已经登录成功了!

6、创建允许远程访问的用户

方案一:创建新用户并授权

创建用户,其中:

  • username 替换为用户名
  • password 替换为密码
  • remote_ip 替换为远程客户端 IP,或者 % 允许所有 IP
CREATE USER 'username'@'remote_ip' IDENTIFIED BY 'password';

授予权限(建议按需授权,此处示例授予所有数据库的完全权限)

GRANT ALL PRIVILEGES ON *.* TO 'username'@'remote_ip' WITH GRANT OPTION;

刷新权限

FLUSH PRIVILEGES;

方案二:修改 root 用户允许远程访问

更新 root 用户的 host 为 %(允许任意 IP )

UPDATE mysql.user SET Host='%' WHERE User='root' AND Host='localhost';

然后刷新权限

FLUSH PRIVILEGES;

查询是否修改成功

SELECT user,plugin,host FROM mysql.user;

可以看到,此时 root 允许所有用户远程访问

在这里插入图片描述

7. 修改 MySQL 配置文件

Linux 下打开:

vim /etc/mysql/mysql.conf.d/mysqld.cnf   # 是编辑mysqld.cnf, 而不是mysql.cnf !

注:如果该配置文件不存在,则打开:vim /etc/my.cnf

修改如下:

bind-address = 0.0.0.0  # 允许所有IP连接(默认值为127.0.0.1,仅限本地)

在这里插入图片描述

8. 重启 MySQL 服务

# Ubuntu/Debian
sudo systemctl restart mysql   

# CentOS/RHEL
sudo systemctl restart mysqld  

执行结果:

在这里插入图片描述

9. 开放防火墙端口(默认3306)

打开 ufw

sudo ufw allow 3306/tcp
sudo ufw reload

或者打开 firewalld

sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

10. 验证远程连接

拿另外一台服务器测试能否远程连接

mysql -h mysql_server_ip -u root -p

mysql_server_ip 换成你安装 MySQL 的服务器 IP 地址。

执行结果:

在这里插入图片描述

11. IDEA 远程登录 MySQL

方案一:代码验证

application.yml 文件中添加 MySQL 配置(这个主要是方便后续开发工作)

在这里插入图片描述

具体格式如下:

spring:
  datasource:
    prod:
      driver-class-name: com.mysql.jdbc.Driver
      jdbcUrl: jdbc:mysql://MySQL服务器地址:3306/mysql
      username: root
      password: 你创建的密码

MySQL 数据的连接 URL 通常具有如下格式:

jdbc:mysql://<hostname>:<port>/<dbname> ?user=<username> &password=<password>
  • hostname:数据库服务器的主机名或者 IP 地址
  • port:数据库监听的端口,默认是 3306
  • dbname:要连接的数据库名字(我用的是 databases 里面默认有个名字叫做 mysql 的库)
  • username:用于连接数据库的用户名
  • password:对应的密码

接下来写一个 Spring Boot 测试类验证连接是否成功,记得修改 JDBC_URL USERNAME PASSWORD

package info.bicoin.tiger;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * 快速数据库连接测试
 * 不依赖Spring Boot,直接测试JDBC连接
 */
public class QuickDatabaseTest {

    // 数据库连接配置 - 使用新的cj驱动格式并优化参数
    private static final String JDBC_URL = "jdbc:mysql://MySQL服务器地址:3306/mysql";
    private static final String USERNAME = "root";
    private static final String PASSWORD = "你的密码";

    public static void main(String[] args) {
        System.out.println("=== 快速数据库连接测试 ===");
        System.out.println("正在测试连接到: MySQL服务器地址:3306/mysql");
        System.out.println();

        try {
            // 移除已弃用的驱动加载方式,使用SPI自动加载
            // Class.forName("com.mysql.jdbc.Driver");
            System.out.println("✅ MySQL驱动加载成功");

            // 测试连接
            System.out.println("正在尝试连接数据库...");
            long startTime = System.currentTimeMillis();

            try (Connection connection = DriverManager.getConnection(JDBC_URL, USERNAME, PASSWORD)) {
                long endTime = System.currentTimeMillis();
                long duration = endTime - startTime;

                System.out.println("✅ 数据库连接成功!");
                System.out.println("连接耗时: " + duration + "ms");
                System.out.println("数据库URL: " + connection.getMetaData().getURL());
                System.out.println("数据库产品名称: " + connection.getMetaData().getDatabaseProductName());
                System.out.println("数据库版本: " + connection.getMetaData().getDatabaseProductVersion());
                System.out.println();
                System.out.println("🎉 数据库连接测试通过!");

            } catch (SQLException e) {
                System.err.println("❌ 数据库连接失败!");
                System.err.println("错误代码: " + e.getErrorCode());
                System.err.println("SQL状态: " + e.getSQLState());
                System.err.println("错误信息: " + e.getMessage());

                // 根据错误代码给出建议
                if (e.getErrorCode() == 1045) {
                    System.err.println("建议: 用户名或密码错误");
                } else if (e.getErrorCode() == 1049) {
                    System.err.println("建议: 数据库不存在");
                } else if (e.getErrorCode() == 2003) {
                    System.err.println("建议: 无法连接到数据库服务器,请检查网络连接和防火墙设置");
                } else if (e.getErrorCode() == 0) {
                    System.err.println("建议: 网络连接超时,请检查数据库服务器是否可访问");
                }

                e.printStackTrace();
            }

        } catch (Exception e) {
            System.err.println("❌ 发生未知错误!");
            System.err.println("错误信息: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

执行结果:

在这里插入图片描述

方案二:IDEA 界面操作

在右边的侧边栏点击数据库图标,然后添加 MySQL

(注:如果你右侧边栏没有数据库图标的话,说明你用的是 IDEA 是免费版的,必须用订阅版才行)

在这里插入图片描述

然后来到了 data sources 界面:

  • 在 Host 填入 MySQL 服务器所在的 IP 地址
  • 接着填入用户名 root 和密码

在这里插入图片描述

点击下方的 Test Connection 进行测试连接,此时我们可以看到是连接成功了
在这里插入图片描述

连接成功之后只显示默认架构(也就是数据库),可以切换要显示的数据库。

在这里插入图片描述

具体的建库和建表操作大家可以自行在网上搜索,这里不做过多概述。

12. 常见问题排查

ERROR 2003 (HY000): Can’t connect to MySQL server

原因:防火墙未放行端口或 MySQL 未监听外网。

解决方案:

# 检查端口监听状态
netstat -tuln | grep 3306
# 应显示:0.0.0.0:3306 或 :::3306

ERROR 1130 (HY000): Host ‘xxx.xxx.xxx.xxx’ is not allowed

原因:用户权限未正确配置。

解决方案:

-- 检查用户权限
SELECT Host, User FROM mysql.user;
-- 确保目标IP或'%'存在授权记录

ERROR 1045 (28000): Access denied

原因:密码错误或用户无权限。

解决:确认用户名、密码及授权 IP 是否匹配。


网站公告

今日签到

点亮在社区的每一天
去签到