在Debian上安装MySQL
先参考白白白给大魔王的Debian12安装mysql-server(超级详细版本)_debian12 安装mysql-CSDN博客
如果不行再试试我的方法
下面是我遇到的情况
先安装wget,dpkg,gunpg。
然后进入MySQL官网下载主页https://www.mysql.com/cn/downloads/
社区版下载https://dev.mysql.com/downloads/
再是https://dev.mysql.com/downloads/repo/apt/
如图
我是懒得改,直接抄的前面博主的指令
wget https://dev.mysql.com/get/mysql-apt-config_0.8.33-1_all.deb
#mysql-apt-config_0.8.33-1_all.deb为要下载的版本
wget https://dev.mysql.com/get/mysql-apt-config_0.8.33-1_all.deb
--2025-08-10 23:17:38-- https://dev.mysql.com/get/mysql-apt-config_0.8.33-1_all.deb
Resolving dev.mysql.com (dev.mysql.com)... 184.87.103.166, 2600:140e:6:397::2e31, 2600:140e:6:393::2e31
Connecting to dev.mysql.com (dev.mysql.com)|184.87.103.166|:443... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: https://repo.mysql.com//mysql-apt-config_0.8.33-1_all.deb [following]
--2025-08-10 23:17:38-- https://repo.mysql.com//mysql-apt-config_0.8.33-1_all.deb
Resolving repo.mysql.com (repo.mysql.com)... 23.202.138.125, 2600:140b:2:18f::1d68, 2600:140b:2:187::1d68
Connecting to repo.mysql.com (repo.mysql.com)|23.202.138.125|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 18072 (18K) [application/x-debian-package]
Saving to: ‘mysql-apt-config_0.8.33-1_all.deb’mysql-apt-config_0.8.33-1_all 100%[=================================================>] 17.65K --.-KB/s in 0.002s2025-08-10 23:17:39 (11.2 MB/s) - ‘mysql-apt-config_0.8.33-1_all.deb’ saved [18072/18072]
接下来继续安装mysql服务器
sudo dpkg -i mysql-apt-config_0.8.33-1_all.deb
这是我遇到的问题
sudo dpkg -i mysql-apt-config_0.8.33-1_all.deb
dpkg: regarding mysql-apt-config_0.8.33-1_all.deb containing mysql-apt-config, pre-dependency problem:mysql-apt-config pre-depends on lsb-releaselsb-release is not installed.dpkg: error processing archive mysql-apt-config_0.8.33-1_all.deb (--install):pre-dependency problem - not installing mysql-apt-config
Errors were encountered while processing:mysql-apt-config_0.8.33-1_all.deb
我问AI回答说
这个错误提示
lsb-release is not installed
说明安装mysql-apt-config
需要依赖lsb-release
包,但当前系统中没有安装。解决方法很简单,先安装lsb-release
即可
# 安装依赖包 lsb-release
sudo apt update
sudo apt install -y lsb-release# 重新安装 mysql-apt-config 配置包
sudo dpkg -i mysql-apt-config_0.8.33-1_all.deb
等待一段时间mysql安装,然后会弹出这样的界面
AI回答
这是配置
mysql-apt-config
时选择 MySQL 服务器版本的界面,不同版本有不同特点,以下是各版本说明和选择建议:版本说明
mysql-8.0
:是 MySQL 较为稳定的通用版本,功能全面,社区支持广泛,适合大多数常规的开发、测试和生产环境,对新特性需求不是特别激进的场景选它很稳妥。mysql-innovation
:属于创新版本,会包含最新的实验性特性,但稳定性相对弱一些,一般不建议生产环境使用,适合想尝鲜、测试新功能的技术探索场景。mysql-8.4-lts
:LTS
代表长期支持(Long - Term Support ),该版本在稳定性、兼容性和 bug 修复方面有持续保障,适合对稳定性要求极高、需要长期运维的生产环境,比如企业级核心业务系统。mysql-cluster-8.0
等集群相关版本:如果你要搭建 MySQL 集群环境(如 MySQL NDB Cluster ),才需要选这类集群专属版本;普通单机或常规主从架构,不用考虑这些。None
:不指定特定版本,一般也不建议选,会让后续安装逻辑变复杂。选择建议
- 常规使用(开发 / 测试 / 生产):优先选
mysql-8.0
,稳定且功能覆盖广,遇到问题容易找解决方案。- 生产环境追求长期稳定:选
mysql-8.4-lts
,能获得更长久的官方技术支持,减少因版本迭代带来的维护风险。- 技术探索、测试新功能:可尝试
mysql-innovation
,但别直接用于生产。- 搭建集群:根据实际集群方案选对应的
mysql-cluster-xxx
版本,不过要注意,MySQL 集群部署相对复杂,要提前了解好架构和运维要点。选好后,按回车确认(界面下方
<Ok>
位置,通常按回车或Tab
切到Ok
再回车 ),继续后续 MySQL 安装流程即可。
当前界面是
mysql-apt-config
的产品配置选择环节,以下是各选项说明和选择建议:选项说明
MySQL Server & Cluster
:
会配置官方仓库中 MySQL 服务器和集群相关的软件源,涵盖单机数据库、集群(如 NDB Cluster )等产品,是最常用的选项,适合要安装 MySQL 数据库服务的场景。MySQL Connectors
:
主要配置 MySQL 连接器(如 MySQL - Python、MySQL - Java 等语言驱动)的软件源,如果你只是想装数据库服务,一般不用单独选这个;但如果后续要通过多种语言连接 MySQL ,且想从官方源获取最新驱动,可考虑。OK
:确认当前配置,保存并退出配置界面,让选择生效。选择建议
如果你核心需求是安装 MySQL 数据库服务器(不管单机还是后续可能搭建集群 ),直接选
MySQL Server & Cluster
(当前已默认选中,界面也显示Currently selected: mysql-8.0
,配置是匹配常规需求的 ),然后按回车(或用Tab
键切到<Ok>
再回车 )确认即可。确认后,继续执行后续步骤(
sudo apt update
更新软件源、sudo apt install mysql-server
安装服务器等 ),就能完成 MySQL 在 Debian 系统的部署啦。
然后我就遇到这个问题
done!
update-alternatives: using /var/lib/mecab/dic/ipadic-utf8 to provide /var/lib/mecab/dic/debian (mecab-dictionary) in auto mode
Setting up libperl5.36:amd64 (5.36.0-7+deb12u2) ...
Setting up mysql-community-client (8.0.43-1debian12) ...
Setting up mysql-client (8.0.43-1debian12) ...
Setting up perl (5.36.0-7+deb12u2) ...
Setting up mysql-community-server (8.0.43-1debian12) ...
update-alternatives: using /etc/mysql/mysql.cnf to provide /etc/mysql/my.cnf (my.cnf) in auto mode
dpkg: error processing package mysql-community-server (--configure):installed mysql-community-server package post-installation script subprocess returned error exit status 1
dpkg: dependency problems prevent configuration of mysql-server:mysql-server depends on mysql-community-server (= 8.0.43-1debian12); however:Package mysql-community-server is not configured yet.dpkg: error processing package mysql-server (--configure):dependency problems - leaving unconfigured
Processing triggers for libc-bin (2.36-9+deb12u9) ...
Errors were encountered while processing:mysql-community-servermysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)
这个错误表明在安装
mysql-community-server
以及依赖它的mysql-server
包时出现了问题,是需要处理的。具体原因和解决方法如下:错误原因
dpkg
报错installed mysql-community-server package post-installation script subprocess returned error exit status 1
,这意味着mysql-community-server
安装后的配置脚本执行出错了,导致mysql-community-server
没有正确配置完成。而mysql-server
依赖于mysql-community-server
,因此mysql-server
也无法完成配置。常见导致这个问题的原因有:
- 端口占用:MySQL 默认使用 3306 端口,如果该端口被其他进程占用,MySQL 服务启动配置时就会失败。
- 文件权限问题:MySQL 在初始化数据目录、写入配置文件等操作时,若没有相应的权限,也会导致配置脚本执行失败。
- 配置冲突:系统中可能存在与 MySQL 默认配置冲突的设置,例如某些系统参数设置、其他数据库残留配置等。
后面我用AI给我的提示
1. 检查端口占用情况
使用 netstat
或 ss
命令查看 3306 端口是否被占用:
sudo netstat -tlnp | grep 3306
# 或者
sudo ss -tlnp | grep 3306
一开始不知道是什么原因,试着启动MySQL服务看看,结果发现是端口被占用
sudo systemctl start mysql
Job for mysql.service failed because the control process exited with error code.
See "systemctl status mysql.service" and "journalctl -xeu mysql.service" for details.
ducker@LAPTOP-R74E5ETB:~$ sudo systemctl status mysql.service
Failed to dump process list for 'mysql.service', ignoring: Input/output error
× mysql.service - MySQL Community ServerLoaded: loaded (/lib/systemd/system/mysql.service; disabled; preset: enabled)Active: failed (Result: exit-code) since Sun 2025-08-10 23:42:55 CST; 1min 7s agoDocs: man:mysqld(8)http://dev.mysql.com/doc/refman/en/using-systemd.htmlProcess: 5491 ExecStartPre=/usr/share/mysql-8.0/mysql-systemd-start pre (code=exited, status=0/SUCCESS)Process: 5526 ExecStart=/usr/sbin/mysqld (code=exited, status=1/FAILURE)Main PID: 5526 (code=exited, status=1/FAILURE)Status: "Server shutdown complete"Error: 98 (Address already in use)Tasks: 37 (limit: 9349)Memory: 476.5MCGroup: /system.slice/mysql.serviceAug 10 23:42:52 LAPTOP-R74E5ETB systemd[1]: Starting mysql.service - MySQL Community Server...
Aug 10 23:42:55 LAPTOP-R74E5ETB systemd[1]: mysql.service: Main process exited, code=exited, status=1/FAILURE
Aug 10 23:42:55 LAPTOP-R74E5ETB systemd[1]: mysql.service: Failed to kill control group /system.slice/mysql.service, ig>
Aug 10 23:42:55 LAPTOP-R74E5ETB systemd[1]: mysql.service: Failed to kill control group /system.slice/mysql.service, ig>
Aug 10 23:42:55 LAPTOP-RE5ETB systemd[1]: mysql.service: Failed to kill control group /system.slice/mysql.service, ig>
Aug 10 23:42:55 LAPTOP-RE5ETB systemd[1]: mysql.service: Failed to kill control group /system.slice/mysql.service, ig>
Aug 10 23:42:55 LAPTOP-RE5ETB systemd[1]: mysql.service: Failed with result 'exit-code'.
Aug 10 23:42:55 LAPTOP-RE5ETB systemd[1]: Failed to start mysql.service - MySQL Community Server.
从报错信息
Error: 98 (Address already in use)
可知,MySQL 服务启动失败是因为默认端口(3306)被其他进程占用了。以下是详细解决步骤:1. 找出占用端口的进程
执行以下命令,查看哪个进程占用了 3306 端口:
bash
sudo netstat -tlnp | grep 3306 # 或用 ss 命令(更推荐,netstat 部分系统可能默认未安装) sudo ss -tlnp | grep 3306
输出类似如下格式(以
ss
为例):plaintext
LISTEN 0 128 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=1234,fd=12))
pid=1234
就是占用端口的进程 ID,"mysqld"
表示进程名(如果是其他程序,比如mariadb
或其他应用,也会显示对应名称 )。2. 处理占用进程
情况 1:占用进程是其他 MySQL/MariaDB 实例
如果看到进程名是
mysqld
(另一个 MySQL 实例)或mariadbd
(MariaDB 进程),说明系统里可能残留了旧版本数据库,或误装了多个数据库服务。
- 停止并卸载多余的服务(以 MariaDB 为例):
bash
sudo systemctl stop mariadb sudo apt remove --purge mariadb-server mariadb-client
- 清理残留配置后,再重启当前要使用的 MySQL 服务:
bash
sudo systemctl start mysql
情况 2:占用进程是其他无关程序
如果看到是其他程序(比如某个自定义应用、调试工具等)占用了 3306 端口,直接停止该进程即可:
bash
# 假设进程 ID 是 1234,替换成实际查到的 PID sudo kill -9 1234 # 若进程是系统服务,用 systemctl 停止(如某服务叫 custom-app) sudo systemctl stop custom-app
停止后,重新启动 MySQL 服务:
bash
sudo systemctl start mysql
3. 改 MySQL 端口(备用方案)
如果不想停止占用进程,也可以修改 MySQL 自身的端口(比如改成 3307 ):
- 编辑 MySQL 配置文件:
bash
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
- 找到
port = 3306
这一行,修改为:plaintext
port = 3307
- 保存退出后,重启 MySQL 服务:
bash
sudo systemctl restart mysql
之后连接 MySQL 时,需要指定新端口(如
mysql -u root -p -P 3307
),或在客户端配置里同步修改端口。4. 验证启动结果
完成上述操作后,再次检查 MySQL 状态:
bash
sudo systemctl status mysql.service
如果输出
Active: active (running)
,说明启动成功;若仍失败,继续看日志/var/log/mysql/error.log
找其他报错(比如权限、数据目录问题等)。按这个流程,基本能解决端口冲突导致的启动失败问题,优先推荐停止 / 卸载冲突进程,保持 3306 端口给主要的 MySQL 服务使用~
我又尝试着看看是哪些进程占据这些端口
sudo ss -tlnp | grep 3306
LISTEN 0 151 0.0.0.0:3306 0.0.0.0:*
LISTEN 0 70 127.0.0.1:33060 0.0.0.0:*
我Linux学的不是很好,也没有找到是哪两个进程,最后选择重启Debian系统,重进就成功了,
也是谢天谢地。
小意外
sudo systemctl start mysql
[sudo] password for ducker:
Sorry, try again.
[sudo] password for ducker:
Sorry, try again.
[sudo] password for ducker:
sudo: 3 incorrect password attempts
ducker@LAPTOP-R94E5ETB:~$ sudo systemctl start mysql
[sudo] password for ducker:
Sorry, try again.
[sudo] password for ducker:
sudo: 1 incorrect password attempt
这里我应该输入sudo的密码,结果一直输成mysql的root密码了😂😂😂
也是希望对大家有所帮助。
后面补充
我后又登入debian,又出现端口被占用,查看mysql的error.log错误日志
于是决定改mysql的端口
在 Linux 系统中修改 MySQL 的端口号(默认端口为 3306),需要修改 MySQL 的配置文件并重启服务,具体步骤如下:
一、找到 MySQL 配置文件
MySQL 的配置文件通常位于以下路径之一(不同 Linux 发行版可能不同):
- Ubuntu/Debian:
/etc/mysql/mysql.conf.d/mysqld.cnf
- CentOS/RHEL:
/etc/my.cnf
或/etc/my.cnf.d/mysql-server.cnf
- 通用路径:
/etc/mysql/my.cnf
可以通过
find / -name "mysqld.cnf" 2>/dev/null
命令搜索配置文件位置。二、修改端口号配置
用文本编辑器(如
nano
或vim
)打开配置文件,例如:bash
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf # Ubuntu/Debian 示例
在
[mysqld]
段落中找到或添加port
参数,设置为目标端口(如 3307):ini
[mysqld] port = 3307 # 修改为新端口(1-65535 之间,避免与其他服务冲突) # 其他配置...
保存并退出编辑器(
nano
按Ctrl+O
保存,Ctrl+X
退出;vim
按:wq
保存退出)。三、验证端口是否冲突(可选)
确保新端口未被其他服务占用,避免启动失败:
bash
# 检查端口是否被占用(以 3307 为例) sudo netstat -tulpn | grep 3307 # 或使用 lsof(需先安装:sudo apt install lsof) sudo lsof -i :3307
若输出为空,说明端口未被占用;若有输出,需更换其他端口。
四、重启 MySQL 服务
修改配置后需重启服务使端口生效:
bash
# Ubuntu/Debian 系统 sudo systemctl restart mysql# CentOS/RHEL 系统 sudo systemctl restart mysqld
五、验证端口是否生效
查看 MySQL 服务监听的端口:
bash
sudo netstat -tulpn | grep mysql
若输出中包含
LISTEN
和新端口(如3307
),说明修改成功:plaintext
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 1234/mysqld
登录 MySQL 验证(需指定新端口):
bash
mysql -u root -p -P 3307 # -P 小写是密码,大写 P 是端口
能成功登录则表示端口修改生效。
六、注意事项
防火墙配置:若系统启用了防火墙(如
ufw
或firewalld
),需开放新端口,否则客户端无法连接:bash
# Ubuntu/Debian(ufw) sudo ufw allow 3307/tcp sudo ufw reload# CentOS/RHEL(firewalld) sudo firewall-cmd --add-port=3307/tcp --permanent sudo firewall-cmd --reload
客户端连接:后续客户端(如
mysql
命令、Navicat 等)连接时,必须指定新端口(默认端口已失效)。主从复制 / 集群:若 MySQL 用于主从复制或集群,需同步修改所有节点的端口配置,并在连接时指定新端口(如从库配置
MASTER_PORT = 3307
)。安全性:避免使用常见端口(如 3306)可降低被扫描攻击的风险,但更重要的是通过权限控制和防火墙限制访问。
通过以上步骤,即可成功修改 Linux 系统中 MySQL 的端口号。