前言
你是否也遇到过这样的尴尬:
在全新的Debian 12系统上,满怀期待地运行sudo apt install mysql-server,却只换来一句冷冰冰的提示——“Package not found”?
更糟的是,当你尝试添加MySQL官方APT仓库时,又撞上 “系统不被支持” 或GPG密钥过期/缺失 的报错。明明Debian 12已经是稳定版,为什么连MySQL都装不上?
别急——这并不是你的操作失误,而是MySQL官方尚未正式支持Debian 12的APT仓库 所致。
本文将为你彻底梳理这一问题的根源,并提供 三种切实可行的解决方案:
- 使用完全兼容的MariaDB(推荐大多数用户)
- 通过Docker快速部署原版MySQL
- 手动安装官方通用二进制包
无论你是开发者、运维人员,还是Linux新手,都能在这里找到最适合你的安装路径。让我们一起绕过坑,把数据库稳稳跑起来!

1.使用完全兼容的MariaDB
MariaDB是MySQL的完全兼容替代品,由原作者开发,Debian官方维护。
1.1 MariaDB优点
- 开箱即用,官方支持
-
Debian 12官方仓库直接提供mariadb-server,一条命令即可安装,无需第三方源、无GPG密钥问题、无兼容性警告。
-
高度兼容MySQL
支持绝大多数MySQL的语法、函数、存储引擎、客户端协议。
绝大多数基于MySQL的应用(WordPress、Nextcloud、Laravel、Django等)无需修改即可无缝迁移。
-
性能更优
-
MariaDB在某些读写负载下表现优于MySQL,且默认配置更轻量。
-
开源纯粹,社区驱动
-
由MySQL原始作者Michael Widenius创建,坚持开源路线,无Oracle商业策略干扰,更新透明。
-
自动安全更新
-
通过 apt upgrade 即可获得Debian官方维护的安全补丁,运维成本极低。
1.2 MariaDB缺点
-
不完全支持 MySQL 所有高级功能
某些MySQL专属特性在MariaDB中不可用或实现不同。
如果你的应用重度依赖这些企业级功能,可能无法直接替换。
-
版本命名与MySQL不同步
-
MariaDB 10.11 ≈ MySQL 8.0,但版本号体系不同,初学者容易混淆。
-
部分云服务/工具默认适配MySQL
-
某些SaaS工具、备份脚本或监控插件可能默认检测mysql命令或路径,在MariaDB上需微调。
-
长期项目若锁定MySQL生态,迁移成本存在
1.3 部署MariaDB
更新本地软件包列表,安装MariaDB数据库服务端和客户端:
sudo apt update
sudo apt install mariadb-server mariadb-client -y
启动并启用:
sudo systemctl enable --now mariadb
运行安全初始化(可选但推荐):
sudo mysql_secure_installation
2.通过Docker快速部署原版MySQL
2.1 通过Docker部署优点
- 快速启动:一行命令即可运行最新版MySQL,无需处理依赖或编译。
- 环境隔离:不污染主机系统,卸载只需删除容器。
- 版本灵活:轻松切换MySQL 5.7、8.0、8.4等任意版本。
- 跨平台一致:开发、测试、生产环境行为一致。
2.2 通过Docker部署缺点
- 网络/镜像问题:国内拉取镜像可能慢或失败(需配镜像加速器)。
- 持久化需配置:数据默认在容器内,重启可能丢失(需挂载卷)。
- 性能略低:相比直接安装,有轻微容器开销(通常可忽略)。
- 运维稍复杂:日志、备份、监控需额外处理(不如系统服务直观)。
2.3 通过Docker部署
安装docker(如未安装):
sudo apt install docker.io -y
sudo systemctl enable --now docker
运行MySQL 8.4 LTS:
sudo docker run -d \
--name mysql \
-e MYSQL_ROOT_PASSWORD=your_root_password \
-p 3306:3306 \
mysql:8.4-lts
3.手动安装MySQL8.4安装指南(推荐)
将详细介绍如何在Linux (Debian/Ubuntu) 上手动安装MySQL 8.4,并进行基本配置。
3.1 安装前准备
在安装MySQL之前,先更新系统包并安装所需的库文件:
sudo apt update && sudo apt upgrade -y
sudo apt-get install -y libaio1 libnuma1 libncurses6


3.2 下载MySQL8.4
切换目录下载MySQL 8.4.4二进制包。:
cd ~
wget https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-8.4.4-linux-glibc2.28-x86_64.tar.xz

3.3 创建MySQL用户和用户组
为MySQL进程创建一个独立用户,确保安全:
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql

3.4 安装MySQL
解压并移动到/usr/local/:
cd /usr/local
sudo tar xvf ~/mysql-8.4.4-linux-glibc2.28-x86_64.tar.xz
sudo mv mysql-8.4.4-linux-glibc2.28-x86_64 mysql
cd /usr/local/mysql
sudo mkdir mysql-files
sudo chmod 750 mysql-files
设置权限:
sudo chown -R mysql:mysql /usr/local/mysql


3.5 添加环境变量
添加MySQL到系统路径:
echo 'export PATH=$PATH:/usr/local/mysql/bin' | sudo tee -a /etc/profile
source /etc/profile

3.6 配置MySQL服务器
创建my.cnf配置文件:
cd /etc
sudo touch my.cnf
sudo chown root:root my.cnf
sudo chmod 644 my.cnf
编辑my.cnf:
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
port=3306
log-error=/usr/local/mysql/data/mysql_error.log
user=mysql
secure_file_priv=/usr/local/mysql/mysql-files
local_infile=OFF
lower_case_table_names=1

3.7 初始化MySQL数据目录
cd /usr/local/mysql
sudo bin/mysqld --defaults-file=/etc/my.cnf --initialize-insecure

3.8 配置MySQL systemd服务
创建systemd服务文件:
cd /usr/lib/systemd/system
sudo touch mysqld.service
sudo chmod 644 mysqld.service
编辑mysqld.service:
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
# Have mysqld write its state to the systemd notify socket
Type=notify
# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0
# Start main service
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf $MYSQLD_OPTS
# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql
# Sets open_files_limit
LimitNOFILE = 10000
Restart=on-failure
RestartPreventExitStatus=1
# Set environment variable MYSQLD_PARENT_PID. This is required for restart.
Environment=MYSQLD_PARENT_PID=1
PrivateTmp=false

重新加载systemd并启用服务:
sudo systemctl daemon-reload
sudo systemctl enable mysqld.service
sudo systemctl start mysqld.service
sudo systemctl status mysqld.service

3.9 设置MySQL Root用户密码
mysql -u root --skip-password
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

3.10 验证MySQL运行状态
检查数据库列表:
cd /usr/local/mysql
bin/mysqlshow -u root -p

查看MySQL版本:
bin/mysqladmin -u root -p version

登录mysql看一看刚才密码是否成功:
mysql -u root -p

想在本地Debian 12上装好MySQL后,让外网能访问你的数据库(比如远程调试、演示Demo或连接手机App)?
但你没有公网IP,路由器也不会配端口转发——别急,用cpolar就能一键穿透内网!
只需一条命令,cpolar就能把本地3306端口安全映射到公网,生成一个临时HTTPS/ TCP地址,随时随地远程连上你的MySQL,无需改网络、不暴露服务器。
开发测试、临时协作,效率直接拉满!
4.安装cpolar内网穿透工具
4.1 什么是cpolar?
cpolar是一款安全高效的内网穿透工具,无需公网IP或复杂配置,只需一条命令,即可将本地服务器、Web服务或任意端口映射到公网,让你随时随地远程访问内网应用,特别适合开发调试、远程运维和应急部署等场景。
4.2 部署cpolar
cpolar可以将你本地电脑中的服务(如 SSH、Web、数据库)映射到公网。即使你在家里或外出时,也可以通过公网地址连接回本地运行的开发环境。
❤️以下是安装cpolar步骤:
使用一键脚本安装命令:
sudo curl https://get.cpolar.sh | sh

安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)
sudo systemctl status cpolar

Cpolar安装和成功启动服务后,在浏览器上输入虚拟机主机IP加9200端口即:【ip:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web配置界面,接下来在web界面配置即可:
打开浏览器访问本地9200端口,使用cpolar账户密码登录即可,登录后即可对隧道进行管理。

5.配置公网地址
通过配置,你可以在本地WSL或Linux系统上运行SSH服务,并通过Cpolar将其映射到公网,从而实现从任意设备远程连接开发环境的目的。
- 隧道名称:可自定义,本例使用了:mysql,注意不要与已有的隧道名称重复
- 协议:tcp
- 本地地址:3306
- 端口类型:随机临时TCP端口
- 地区:China Top

创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址,接下来就可以在其他电脑或者移动端设备(异地)上,使用任意一个地址在终端中访问即可。
- tcp 表示使用的协议类型
-
2.tcp.cpolar.top是 Cpolar 提供的域名
-
10595是随机分配的公网端口号

通过Cpolar提供的公网地址和端口,mysql就可以从任意一台主机连接到啦!

6.保留固定TCP公网地址
使用cpolar为其配置TCP地址,该地址为固定地址,不会随机变化。

选择区域和描述:有一个下拉菜单,当前选择的是“China Top”。
右侧输入框,用于填写描述信息。
保留按钮:在右侧有一个橙色的“保留”按钮,点击该按钮可以保留所选的TCP地址。
列表中显示了一条已保留的TCP地址记录。
- 地区:显示为“China Top”。
-
地址:显示为“28.tcp.cpolar.top:11621”。

登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道mysql,点击右侧的编辑。

修改隧道信息,将保留成功的TCP端口配置到隧道中。
- 端口类型:选择固定TCP端口
- 预留的TCP地址:填写保留成功的TCP地址
点击更新。

创建完成后,打开在线隧道列表,此时可以看到随机的公网地址已经发生变化,地址名称也变成了保留和固定的TCP地址。

最后测试一下固定的地址是否好用,测试命令:
mysql -h 28.tcp.cpolar.top -P 11621 -u admin -p

这样,我们成功打破了“没有公网IP就无法远程访问数据库”的固有认知。
总结
Debian 12虽暂未被MySQL官方APT支持,但这并不意味着你无法使用可靠的数据库服务。
MariaDB是更简单、更安全的首选;若必须使用原版MySQL,Docker提供了灵活高效的替代路径。
技术的本质是解决问题,而非拘泥于工具名称。选对方案,你的数据库服务一样能稳如磐石!
感谢您对本篇文章的喜爱,有任何问题欢迎留言交流。cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站



