当前位置: 首页 > news >正文

【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 是否匹配。

http://www.lryc.cn/news/578192.html

相关文章:

  • 零成本接入+企业级部署:2025年AI大模型实战指南
  • Linux云计算基础篇(2)
  • 对称非对称加密,https和http,https通讯原理,Charles抓包原理
  • 三态门Multisim电路仿真——硬件工程师笔记
  • 大模型在多发性硬化预测及治疗方案制定中的应用研究
  • Python 安装使用教程
  • 探索未来AI的无限可能:使用oTTomator Live Agent Studio平台上的开源AI代理!
  • JSON-LD 开发手册
  • 衡石科技chatbot分析手册--钉钉数据问答机器人配置
  • 衡石科技使用手册-企业即时通讯工具数据问答机器人用户手册
  • java中agent的作用
  • 免费文件管理 智能转换GC-Prevue:PDF 转 Word 多种格式 一键完成
  • 云手机主要是指什么?
  • 纯前端本地文件管理器(VSCode风格)(浏览器对本地文件增删改查)
  • DAY 45 Tensorboard使用介绍
  • 2 大语言模型基础-2.2 生成式预训练语言模型GPT-2.2.2 有监督下游任务微调-Instruct-GPT强化学习奖励模型的结构改造与维度转换解析
  • 高效读取文件中指定行段的两种方法
  • 矩阵方程 线性代数
  • EA自动交易完全指南:从策略设计到实盘部署
  • 区块链技术有哪些运用场景?
  • CppCon 2018 学习:A Little Order! Delving into the STL sorting algorithms
  • 《如何在 Spring 中实现 MQ 消息的自动重连:监听与发送双通道策略》
  • mkyaffs2img 的 命令行工具的编译
  • Dubbo3高并发控制实战技巧
  • SCAU期末笔记 - 操作系统 选填题
  • QT中QSS样式表的详细介绍
  • localStorage 和 sessionStorage
  • Python + Selenium 自动化爬取途牛动态网页
  • 在vue当中使用动画
  • Hily×亚矩云手机:社交元宇宙的“云端心跳加速器”