Debian 12装不了MySQL?官方源不支持?这里有解决方案!

前言

你是否也遇到过这样的尴尬:

在全新的Debian 12系统上,满怀期待地运行sudo apt install mysql-server,却只换来一句冷冰冰的提示——“Package not found”?

更糟的是,当你尝试添加MySQL官方APT仓库时,又撞上 “系统不被支持” 或GPG密钥过期/缺失 的报错。明明Debian 12已经是稳定版,为什么连MySQL都装不上?

别急——这并不是你的操作失误,而是MySQL官方尚未正式支持Debian 12的APT仓库 所致。

本文将为你彻底梳理这一问题的根源,并提供 三种切实可行的解决方案:

  • 使用完全兼容的MariaDB(推荐大多数用户)
  • 通过Docker快速部署原版MySQL
  • 手动安装官方通用二进制包

无论你是开发者、运维人员,还是Linux新手,都能在这里找到最适合你的安装路径。让我们一起绕过坑,把数据库稳稳跑起来!

downloaded-image

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

5145960d180191a3afa3fe912fe90dfd

d791b5c06b575e5b69b6fc1efcac6a55

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

7938679d60cfd8b854d0829af1071cf0

3.3 创建MySQL用户和用户组

为MySQL进程创建一个独立用户,确保安全:

sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql

fbe27c738e29aae8fc0cd38875a98ef6

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

a5fdb169ed89d6581b65cb9286007924

4a2991a3448b6f8eff133768febee5c9

3.5 添加环境变量

添加MySQL到系统路径:

echo 'export PATH=$PATH:/usr/local/mysql/bin' | sudo tee -a /etc/profile
source /etc/profile

059945400c12a8ed1273646a6e403449

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

7e7ab77a9cf005d9c79dc1beec0a4db0

3.7 初始化MySQL数据目录

cd /usr/local/mysql
sudo bin/mysqld --defaults-file=/etc/my.cnf --initialize-insecure

08d32ed9c6dbf298ab3332156571b50f

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

b272c6828740de79797256f1edb7c75b

重新加载systemd并启用服务:

sudo systemctl daemon-reload
sudo systemctl enable mysqld.service
sudo systemctl start mysqld.service
sudo systemctl status mysqld.service

4b5327e2ce794588835403186d5b1490

3.9 设置MySQL Root用户密码

mysql -u root --skip-password
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

9534d84c455b51788758aaefd13112b4

3.10 验证MySQL运行状态

检查数据库列表:

cd /usr/local/mysql
bin/mysqlshow -u root -p

b3f3a26e79e98fd87373ddd63a8f58f1

查看MySQL版本:

bin/mysqladmin -u root -p version

f1a21dccbcbf88035a4fff881901c9a6

登录mysql看一看刚才密码是否成功:

mysql -u root -p

eba9816e5b504d2393decda5c7d2b41d

想在本地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步骤:

官网在此:https://www.cpolar.com

使用一键脚本安装命令:

sudo curl https://get.cpolar.sh | sh

image-20250814101639846

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

sudo systemctl status cpolar

22e5adfaf290a17fc3384bb296055259

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

打开浏览器访问本地9200端口,使用cpolar账户密码登录即可,登录后即可对隧道进行管理。

8a6698b1bf26d64ba3645827fbfb1c29

5.配置公网地址

通过配置,你可以在本地WSL或Linux系统上运行SSH服务,并通过Cpolar将其映射到公网,从而实现从任意设备远程连接开发环境的目的。

  • 隧道名称:可自定义,本例使用了:mysql,注意不要与已有的隧道名称重复
  • 协议:tcp
  • 本地地址:3306
  • 端口类型:随机临时TCP端口
  • 地区:China Top

image-20251121161040290

创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址,接下来就可以在其他电脑或者移动端设备(异地)上,使用任意一个地址在终端中访问即可。

  • tcp 表示使用的协议类型

  • 2.tcp.cpolar.top是 Cpolar 提供的域名

  • 10595是随机分配的公网端口号

image-20251121161216586

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

image-20251121161426116

6.保留固定TCP公网地址

使用cpolar为其配置TCP地址,该地址为固定地址,不会随机变化。

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

  • 地区:显示为“China Top”。

  • 地址:显示为“28.tcp.cpolar.top:11621”。

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

image-20251121161748794

修改隧道信息,将保留成功的TCP端口配置到隧道中。

  • 端口类型:选择固定TCP端口
  • 预留的TCP地址:填写保留成功的TCP地址

点击更新

image-20251121161823772

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

image-20251121161901525

最后测试一下固定的地址是否好用,测试命令:

mysql -h 28.tcp.cpolar.top -P 11621 -u admin -p

image-20251121162000079

这样,我们成功打破了“没有公网IP就无法远程访问数据库”的固有认知。

总结

Debian 12虽暂未被MySQL官方APT支持,但这并不意味着你无法使用可靠的数据库服务。

MariaDB是更简单、更安全的首选;若必须使用原版MySQL,Docker提供了灵活高效的替代路径。

技术的本质是解决问题,而非拘泥于工具名称。选对方案,你的数据库服务一样能稳如磐石!

感谢您对本篇文章的喜爱,有任何问题欢迎留言交流。cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站

Share:

发表回复

目录

On Key

推荐文章