系统:debian 12

一、安装前准备

1、更新源、卸载mariadb、清除旧的mysql,确保是学习或新服务器才可这样操作

#更新系统软件源与依赖
sudo apt update && sudo apt upgrade -y

# 停止并禁用所有相关服务
sudo systemctl stop mysql mariadb 2>/dev/null
sudo systemctl disable mysql mariadb 2>/dev/null

# 卸载所有MySQL/MariaDB软件包
sudo apt purge -y mysql-* mariadb-* libmysqlclient* libmariadb*
sudo apt autoremove -y
sudo apt autoclean

# 删除所有数据、配置和日志文件(⚠️ 会永久删除所有数据库!有数据请先备份)
sudo rm -rf /etc/mysql /var/lib/mysql /var/log/mysql /var/run/mysqld /var/lib/mariadb

# 关键:删除所有旧APT源和密钥文件(这是解决签名错误的核心前提)
sudo rm -f /etc/apt/sources.list.d/mysql* /etc/apt/sources.list.d/mariadb*
sudo rm -f /usr/share/keyrings/mysql* /usr/share/keyrings/mariadb*
sudo rm -f /etc/apt/trusted.gpg.d/mysql* /etc/apt/trusted.gpg.d/mariadb*

# 清空APT缓存
sudo apt clean

二、手动创建 MySQL 8.0 LTS APT 源

1、创建配置文件

# 创建MySQL 8.0专属源配置文件
sudo tee /etc/apt/sources.list.d/mysql.list <<EOF
deb [arch=amd64 signed-by=/usr/share/keyrings/mysql.gpg] http://repo.mysql.com/apt/debian bookworm mysql-8.0
deb-src [signed-by=/usr/share/keyrings/mysql.gpg] http://repo.mysql.com/apt/debian bookworm mysql-8.0
EOF

2、导入 MySQL 官方 2025 最新有效密钥:使用官方 2025 年 11 月发布的新密钥,有效期至 2027 年 10 月

# 下载并导入2025年最新官方密钥(这是全网唯一有效的密钥)
curl -fsSL https://repo.mysql.com/RPM-GPG-KEY-mysql-2025 | sudo gpg --dearmor -o /usr/share/keyrings/mysql.gpg

# 设置正确的密钥文件权限
sudo chmod 644 /usr/share/keyrings/mysql.gpg


#验证新密钥有效性(必须看到expires: 2027-10-22)
gpg --no-default-keyring --keyring /usr/share/keyrings/mysql.gpg --list-keys


# 更新源
sudo apt update

# 安装MySQL 8.0服务器和客户端
sudo apt install -y mysql-server mysql-client

3、注意,这边看了很多网上教程都是有bug安装不成功:wget https://repo.mysql.com//mysql-apt-config_0.8.34-1_all.deb   因为https://repo.mysql.com/RPM-GPG-KEY-mysql-2023 已经在 2025-10-22 过期,官方直到 2025 年 11 月才悄悄发布了RPM-GPG-KEY-mysql-2025新密钥,旧的 2023 密钥文件至今仍在官网未被删除,导致很多mysql8的安装教程都失效了。

4、对话框界面:

* 设置root密码

* 选择 MySQL 默认的用户密码加密 / 认证插件。

  • 如果你是全新项目,且使用的驱动 / 客户端支持 MySQL 8.0+(比如新版 Go、Python、PHP 驱动),直接选推荐的 Use Strong Password Encryption,安全性更高。
  • 如果你需要兼容旧版 PHP(如老版本的 PDO/MySQLi)、老版客户端或第三方工具,选 Use Legacy Authentication Method,避免后续连接报错。

三、安全配置和安装验证

1、给新装的 MySQL 做安全初始化、关闭高危默认配置,生产 / 自用环境必跑

# 运行官方安全加固脚本
sudo mysql_secure_installation

2. 常见问答建议(直接照着选就行)

运行时提问,推荐答案(通用安全配置):

  1. Change the password for root?N(保留原有 root 密码,不会改动现有账号密码,适合已经提前设置好密码的场景。)
  2. Remove anonymous users?Y(删除匿名用户)
  3. Disallow root login remotely?Y(禁止 root 远程登录)
  4. Remove test database and access to it?Y(移除 test 库)
  5. Reload privilege tables now?Y(刷新权限)

3、验证安装结果

# 检查服务运行状态
sudo systemctl status mysql

# 登录MySQL并查询:root 对应的 host 为 localhost,不会出现 %(代表禁止远程登录)
mysql -u root -p -e "SELECT user,host FROM mysql.user;SELECT VERSION();"

  • 现在 root 仅能本机登录,外部机器 / 远程工具无法用 root 连接
  • 若后续需要远程访问数据库,建议新建普通业务账号并授权,不要放开 root 远程权限。

四、如果是加强版:Use Strong Password Encryption创建账户

#先本地登录 MySQL
mysql -u root -p

1、无需兼容旧版mysql客户端的账户:适用于 PHP7.4.4+(mysqlnd)、新版mysql客户端

-- 创建允许所有IP访问的用户(%代表任意IP)
CREATE USER 'user_new'@'%' IDENTIFIED BY '你的强密码';

-- 如果只允许本地访问(更安全)
-- CREATE USER 'user_new'@'localhost' IDENTIFIED BY '你的强密码';

-- 如果只允许特定IP访问(生产环境推荐)
-- CREATE USER 'user_new'@'192.168.1.100' IDENTIFIED BY '你的强密码';



-- 授权所有数据库的所有权限(开发环境用,生产环境禁止)
GRANT ALL PRIVILEGES ON *.* TO 'user_new'@'%' WITH GRANT OPTION;

-- 只授权特定数据库的所有权限(推荐)
-- GRANT ALL PRIVILEGES ON 你的数据库名.* TO 'user_new'@'%';

-- 只授权特定权限(生产环境最佳实践)
-- GRANT SELECT, INSERT, UPDATE, DELETE ON 你的数据库名.* TO 'user_new'@'%';

--刷新权限使配置生效
FLUSH PRIVILEGES;

2、兼容旧客户端:传统加密 mysql_native_password (如果非必要,既然已经选择加强密码就不要再建兼容账户了)

--方式1:允许任意 IP访问(对应 % 规则)
-- 兼容版:指定传统加密插件,适配 Navicat12、低版本PHP等旧客户端
CREATE USER 'user_old'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
-- 授权所有库所有权限(开发环境)
GRANT ALL PRIVILEGES ON *.* TO 'user_old'@'%' WITH GRANT OPTION;
-- 刷新权限
FLUSH PRIVILEGES;


--方式2:仅本地访问
CREATE USER 'user_old'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';
GRANT ALL PRIVILEGES ON *.* TO 'user_old'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;

-- 方式3:仅指定 IP访问(生产推荐)
CREATE USER 'user_old'@'192.168.1.100' IDENTIFIED WITH mysql_native_password BY '秘密';
GRANT ALL PRIVILEGES ON *.* TO 'user_old'@'192.168.1.100' WITH GRANT OPTION;
FLUSH PRIVILEGES;

3、删除账户

查询已有的用户:SELECT user,host FROM mysql.user;

删除具体用户:DROP USER 'user_new'@'%';

刷新权限:FLUSH PRIVILEGES;

4、注意:如果是腾讯云服务器,记得把防火墙配置允许端口3306策略

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐