【2025最新】Ubuntu22.04 安装 MySQL8.0 教程
文章目录
- 1. 更新软件包
- 2. 安装最新版本
- 3. 启动 MySQL 服务
- 4. 检查 MySQL 版本
- 5. 修改 root 密码
- 6、创建允许远程访问的用户
- 方案一:创建新用户并授权
- 方案二:修改 root 用户允许远程访问
- 7. 修改 MySQL 配置文件
- 8. 重启 MySQL 服务
- 9. 开放防火墙端口(默认3306)
- 10. 验证远程连接
- 11. IDEA 远程登录 MySQL
- 方案一:代码验证
- 方案二:IDEA 界面操作
- 12. 常见问题排查
- ERROR 2003 (HY000): Can't connect to MySQL server
- ERROR 1130 (HY000): Host 'xxx.xxx.xxx.xxx' is not allowed
- ERROR 1045 (28000): Access denied
确保你是系统的管理员(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.DriverjdbcUrl: jdbc:mysql://MySQL服务器地址:3306/mysqlusername: rootpassword: 你创建的密码
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 是否匹配。