Debian 12 可直接用 apt 安装 MySQL 8.4 LTS:先确认 x86_64 架构并安装 libaio1t64、libmecab2 依赖,再通过官方 APT 源(mysql-apt-config_0.8.30-1_all.deb)添加 8.4 仓库,执行 apt update && apt install mysql-server 即可完成安装与自动配置。

能直接用 apt 装,别折腾二进制包或源码编译——Debian 12 官方源已收录 MySQL 8.4 LTS,安装快、配置稳、后续升级有保障。
确认系统架构和基础依赖是否就绪
MySQL 8.4 要求 64 位系统,且必须有 libaio1t64、libmecab2 等底层库。Debian 12 默认没装全,漏了会导致 mysqld 启动失败或服务注册异常。
- 运行
uname -m确保输出是x86_64 - 执行
sudo apt update && sudo apt install -y libaio1t64 libmecab2补齐关键依赖 - 如果之前装过旧版 MySQL(如 5.7 或 8.0),先清理:
sudo apt remove --purge mysql-server mysql-client mysql-common,再删残留数据目录/var/lib/mysql(注意备份)
添加 MySQL 官方 APT 源并安装
Debian 12 自带的 mysql-server 包仍是 8.0,要装 8.4 必须换源。官方 repo 提供签名验证和版本锁定能力,比手动下 .deb-bundle.tar 更可靠。
- 下载并安装 MySQL APT 配置工具:
wget https://dev.mysql.com/get/mysql-apt-config_0.8.30-1all.deb && sudo dpkg -i mysql-apt-config_0.8.30-1all.deb,安装时用方向键选中mysql-8.4并回车确认 - 更新索引:
sudo apt update,此时apt-cache policy mysql-server应显示候选版本为8.4.x - 安装服务:
sudo apt install -y mysql-server,过程中会自动生成 root 密码(记在/etc/mysql/debian.cnf或终端提示里)
启动后立即检查三项关键状态
安装成功不等于能用。常见卡点不是安装失败,而是服务起来但连不上、权限不对、或默认绑定 localhost 导致远程访问被拒。
- 查进程:
systemctl is-active mysql必须返回active;若为failed,看日志:journalctl -u mysql -n 50 --no-pager,90% 是libaio1t64缺失或/var/lib/mysql权限错 - 连本地:
mysql -u root -p,输密码后进得去才算通;进不去先试sudo mysql(靠系统用户认证),再运行ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'yourpass'; FLUSH PRIVILEGES; - 查监听:
ss -tlnp | grep :3306,若只看到127.0.0.1:3306,需改/etc/mysql/mysql.conf.d/mysqld.cnf中的bind-address为0.0.0.0(仅测试环境),再sudo systemctl restart mysql
小内存机器(2GB)必须调低 innodb_buffer_pool_size
MySQL 8.4 默认把 innodb_buffer_pool_size 设为物理内存的 75%,2GB 机器会预占 1.5GB,极易触发 OOM Killer 杀掉 mysqld 进程——这和“装不了”无关,是默认配置太激进。
- 编辑
/etc/mysql/mysql.conf.d/mysqld.cnf,在[mysqld]下加一行:innodb_buffer_pool_size = 256M - 顺手限制连接数:
max_connections = 30,避免并发稍高就卡死 - 改完必须重启:
sudo systemctl restart mysql,再用mysql -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"确认生效
真正容易被忽略的是:MySQL 8.4 默认禁用 local_infile,且 secure_file_priv 指向空目录。如果后续要用 LOAD DATA INFILE,得提前在配置里放开,否则报错 The MySQL server is running with the --secure-file-priv option...。


















