news 2026/6/23 23:02:49

告别apt-get:手动dpkg安装MySQL 8.0.26到Ubuntu 20.04的完整流程与原理浅析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
告别apt-get:手动dpkg安装MySQL 8.0.26到Ubuntu 20.04的完整流程与原理浅析

深入解析:手动dpkg安装MySQL 8.0.26到Ubuntu 20.04的技术实践

在Linux系统管理中,软件包安装通常被视为一项基础操作。大多数用户习惯于使用apt-get或yum这类高级包管理工具,它们能自动处理依赖关系,简化安装流程。然而,这种便利性背后隐藏着复杂的底层机制,而理解这些机制正是提升系统管理能力的关键。本文将带您深入探索手动使用dpkg安装MySQL 8.0.26的全过程,不仅提供操作指南,更着重解析每个步骤背后的技术原理。

1. 准备工作与环境配置

1.1 获取MySQL 8.0.26的deb包

MySQL官方提供了多种安装方式,我们需要从官网下载适用于Ubuntu 20.04的deb包集合。访问MySQL社区版下载页面,选择"Ubuntu Linux"作为操作系统,版本选择20.04(x86,64-bit),下载名为mysql-server_8.0.26-1ubuntu20.04_amd64.deb-bundle.tar的包集合文件。

这个tar包包含了MySQL服务器运行所需的所有组件:

  • mysql-community-client-core:核心客户端工具
  • mysql-community-server:主服务器组件
  • libmysqlclient21:客户端库文件
  • 其他辅助包

1.2 处理系统依赖

手动安装与使用apt-get的主要区别在于依赖管理。我们需要预先识别并下载所有必需的依赖项:

# 检查系统是否已安装依赖 dpkg -l | grep -E 'libaio1|libmecab2'

如果未安装,需要手动下载:

  • libaio1:异步I/O库
  • libmecab2:自然语言处理库(MySQL全文检索功能依赖)

下载地址可通过Ubuntu官方软件包仓库获取。将这些deb文件与MySQL包集合一起上传到目标服务器的临时目录,如~/mysql_install

2. 解包与安装顺序规划

2.1 解压MySQL包集合

使用tar命令解压下载的包集合:

tar -xf mysql-server_8.0.26-1ubuntu20.04_amd64.deb-bundle.tar

解压后会得到多个独立的deb包。安装顺序至关重要,因为某些包依赖其他包提供的功能。正确的安装顺序应该是:

  1. 基础库和插件
  2. 客户端组件
  3. 服务器核心
  4. 完整服务器

2.2 依赖关系解析

使用dpkg的-I参数可以查看每个包的依赖信息:

dpkg -I mysql-community-server_8.0.26-1ubuntu20.04_amd64.deb

输出将显示该包依赖的其他MySQL组件和系统库。这种手动检查依赖的方式虽然耗时,但能让我们更深入理解软件包之间的关联。

3. 分步安装MySQL组件

3.1 安装基础组件

首先安装不依赖其他MySQL组件的包:

sudo dpkg -i mysql-community-client-plugins_8.0.26-1ubuntu20.04_amd64.deb sudo dpkg -i mysql-common_8.0.26-1ubuntu20.04_amd64.deb

这些包提供认证插件和共享配置文件,是其他组件的基础。

3.2 安装客户端组件

接下来安装客户端相关包:

sudo dpkg -i mysql-community-client-core_8.0.26-1ubuntu20.04_amd64.deb sudo dpkg -i mysql-community-client_8.0.26-1ubuntu20.04_amd64.deb sudo dpkg -i libmysqlclient21_8.0.26-1ubuntu20.04_amd64.deb sudo dpkg -i libmysqlclient-dev_8.0.26-1ubuntu20.04_amd64.deb sudo dpkg -i mysql-client_8.0.26-1ubuntu20.04_amd64.deb

这些包提供了mysql命令行客户端和开发所需的库文件。

3.3 处理系统依赖

在安装服务器组件前,确保所有系统依赖已满足:

sudo dpkg -i libaio1_0.3.112-5_amd64.deb sudo dpkg -i libmecab2_0.996-10build1_amd64.deb

3.4 安装服务器组件

最后安装服务器相关包:

sudo dpkg -i mysql-community-server-core_8.0.26-1ubuntu20.04_amd64.deb sudo dpkg -i mysql-community-server_8.0.26-1ubuntu20.04_amd64.deb sudo dpkg -i mysql-server_8.0.26-1ubuntu20.04_amd64.deb

安装mysql-community-server时会交互式提示设置root密码和选择认证插件。选择"Use Legacy Authentication Method"(传统5.x认证方式)以确保更好的兼容性。

4. 安装后配置与验证

4.1 服务管理

安装完成后,MySQL服务应自动启动。手动管理服务的命令:

# 检查服务状态 sudo systemctl status mysql # 重启服务 sudo systemctl restart mysql # 设置开机自启 sudo systemctl enable mysql

4.2 验证安装

通过客户端连接验证安装是否成功:

mysql -u root -p

成功登录后,执行一些基本命令检查服务器状态:

SHOW DATABASES; SELECT VERSION();

4.3 配置文件位置

手动安装的配置文件位置与apt安装一致:

  • 主配置文件:/etc/mysql/my.cnf
  • 包含目录:/etc/mysql/mysql.conf.d/
  • 数据目录:/var/lib/mysql

5. 高级配置与问题排查

5.1 远程访问配置

默认情况下,MySQL只允许本地连接。要启用远程访问:

-- 登录MySQL后执行 UPDATE mysql.user SET host='%' WHERE user='root'; FLUSH PRIVILEGES;

然后修改配置文件,注释掉bind-address行:

sudo sed -i 's/^bind-address/#bind-address/' /etc/mysql/mysql.conf.d/mysqld.cnf sudo systemctl restart mysql

5.2 防火墙设置

如果使用UFW防火墙,需要开放MySQL端口:

sudo ufw allow 3306/tcp

5.3 常见问题解决

依赖问题:如果安装过程中出现依赖错误,可以尝试:

sudo apt-get install -f

这条命令会尝试修复损坏的依赖关系,但不会影响我们已经手动安装的包。

服务启动失败:检查错误日志获取详细信息:

sudo tail -n 50 /var/log/mysql/error.log

6. 手动安装与apt安装的深度对比

6.1 文件系统布局差异

两种安装方式在文件系统布局上基本一致,但手动安装让我们更清楚每个文件来自哪个deb包:

组件apt安装源dpkg手动安装源
服务端二进制mysql-server包mysql-community-server包
客户端工具mysql-client包mysql-community-client包
开发文件libmysqlclient-devlibmysqlclient-dev

6.2 依赖管理对比

apt自动处理依赖的流程:

  1. 分析主包的依赖关系
  2. 从配置的仓库下载所有依赖包
  3. 按正确顺序安装所有包

手动dpkg安装时,我们需要自行完成这一过程,这让我们更深入理解软件包间的依赖关系。

6.3 版本控制差异

使用apt安装时,版本由仓库决定。手动安装可以:

  • 精确控制安装的具体版本
  • 安装仓库中不提供的版本
  • 混合使用不同版本的组件(需谨慎)

6.4 维护与升级

手动安装的包不会被apt自动升级,这既是优势也是风险:

  • 优势:版本稳定,不会意外升级
  • 风险:需要手动跟踪安全更新

可以创建/etc/apt/preferences.d/mysql.pref文件来pin住手动安装的MySQL包,防止被apt意外升级。

7. 性能调优与安全加固

7.1 基础性能调整

根据服务器配置调整MySQL参数:

# /etc/mysql/mysql.conf.d/mysqld.cnf [mysqld] innodb_buffer_pool_size = 1G # 建议为物理内存的50-70% innodb_log_file_size = 256M max_connections = 100

7.2 安全加固措施

执行MySQL自带的安全脚本:

sudo mysql_secure_installation

建议的安全实践:

  • 删除匿名用户
  • 禁止root远程登录
  • 删除测试数据库
  • 重载权限表

7.3 监控与维护

设置定期维护任务:

# 每天凌晨3点优化所有表 0 3 * * * mysqlcheck -u root -pPASSWORD --all-databases --optimize >> /var/log/mysql_optimize.log

8. 备份与恢复策略

8.1 逻辑备份

使用mysqldump进行逻辑备份:

mysqldump -u root -p --all-databases --single-transaction > full_backup.sql

8.2 物理备份

直接复制数据文件(需停止MySQL服务):

sudo systemctl stop mysql sudo rsync -av /var/lib/mysql /backup/mysql sudo systemctl start mysql

8.3 二进制日志配置

启用二进制日志以实现时间点恢复:

# /etc/mysql/mysql.conf.d/mysqld.cnf [mysqld] server-id = 1 log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 7

9. 深入理解dpkg工作机制

9.1 dpkg安装过程解析

dpkg安装deb包时执行的主要步骤:

  1. 解压控制文件和数据文件
  2. 运行preinst脚本(如果有)
  3. 解压数据文件到目标位置
  4. 运行postinst脚本(如果有)
  5. 更新包数据库

9.2 dpkg数据库结构

dpkg维护的数据库位于/var/lib/dpkg,主要文件:

  • status:已安装包的状态信息
  • available:可用包的信息
  • info/:每个包的详细控制文件

9.3 手动干预dpkg状态

在某些特殊情况下,可能需要手动修改dpkg状态:

# 将包标记为已安装(不实际安装文件) sudo dpkg -i --force-not-root --root=/ --force-all --no-triggers package.deb

这种方法应谨慎使用,仅用于恢复损坏的系统状态。

10. 自动化脚本与进阶技巧

10.1 创建安装脚本

将整个安装过程脚本化:

#!/bin/bash # 定义安装目录 INSTALL_DIR="/opt/mysql" mkdir -p $INSTALL_DIR # 安装依赖 dpkg -i libaio1_0.3.112-5_amd64.deb dpkg -i libmecab2_0.996-10build1_amd64.deb # 安装MySQL组件 for pkg in mysql-community-client-plugins mysql-common mysql-community-client-core \ mysql-community-client libmysqlclient21 libmysqlclient-dev mysql-client \ mysql-community-server-core mysql-community-server mysql-server do dpkg -i ${pkg}_8.0.26-1ubuntu20.04_amd64.deb done

10.2 自定义安装路径

虽然deb包通常固定安装路径,但可以通过以下方式实现部分自定义:

# 解压deb包到临时目录 dpkg -x package.deb /tmp/extract # 手动复制文件到目标位置 cp -r /tmp/extract/usr /custom/path

10.3 创建本地仓库

对于多台服务器的部署,可以创建本地apt仓库:

# 安装必要工具 sudo apt-get install dpkg-dev # 创建仓库目录 mkdir -p /opt/myrepo/conf # 创建distributions文件 cat > /opt/myrepo/conf/distributions <<EOF Origin: My Local Repo Label: local Suite: stable Codename: focal Architectures: amd64 Components: main Description: Local repository for custom packages EOF # 导入deb包 cd /opt/myrepo cp /path/to/*.deb . dpkg-scanpackages . /dev/null | gzip -9c > Packages.gz

这样其他服务器就可以通过添加这个本地仓库来安装这些自定义包。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 9:59:04

国产化音视频项目选型:为什么说MetaRTC(支持国密/H265)是安防和物联网的“隐形冠军”?

MetaRTC&#xff1a;国产化音视频通信的破局者与行业实践指南在数字化浪潮席卷各行各业的今天&#xff0c;音视频通信技术已成为安防监控、远程医疗、智能硬件等领域的核心基础设施。然而&#xff0c;当国际主流技术方案面临国产化替代需求时&#xff0c;一个来自中国开发者社区…

作者头像 李华
网站建设 2026/6/18 18:47:53

Java后端快速集成极光推送的开箱即用工程模板

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;一个结构清晰、可直接运行的Java后端项目&#xff0c;专为对接极光推送&#xff08;JPush&#xff09;服务端API设计。项目采用标准Maven布局&#xff0c;pom.xml已预置jpush-client依赖&#xff0c;src/main/j…

作者头像 李华