Ubuntu 20.04 内网环境下的 MySQL 8.0.26 全链路部署实战
在企业级应用部署中,内网环境下的数据库安装往往是最令人头疼的环节之一。没有外网连接意味着无法实时下载依赖包,每个环节都需要预先精心准备。本文将带您深入探索如何在完全离线的 Ubuntu 20.04 系统中,完成 MySQL 8.0.26 的完整部署,包括依赖管理、安装顺序优化、配置文件调优以及后期维护方案。
1. 离线环境的前期准备工作
1.1 构建完整的离线资源库
在内网环境中部署 MySQL,首要任务是建立一个完整的离线资源库。这个资源库不仅需要包含 MySQL 8.0.26 的主安装包,还必须涵盖所有可能的依赖项。以下是必须准备的组件清单:
- 主安装包:
mysql-server_8.0.26-1ubuntu20.04_amd64.deb-bundle.tar - 核心依赖:
libaio1_0.3.112-5_amd64.deblibmecab2_0.996-10build1_amd64.deb
- 可选依赖(根据应用场景可能需要):
libnuma1_2.0.12-1build1_amd64.deblibtinfo5_6.2-0ubuntu2_amd64.deb
提示:建议在准备阶段就下载这些软件包的备用版本,因为不同 Ubuntu 小版本可能需要特定版本的依赖包。
1.2 跨网络文件传输方案
在没有外网连接的环境中,我们需要可靠的跨网络文件传输方法。以下是几种经过验证的方案对比:
| 传输方式 | 适用场景 | 优点 | 缺点 |
|---|---|---|---|
| WinSCP | Windows到Linux | 图形界面友好 | 需要SSH服务已启用 |
| rsync | Linux到Linux | 增量传输效率高 | 命令行操作 |
| USB介质 | 物理隔离网络 | 完全离线 | 需要物理接触设备 |
| 内部文件服务器 | 企业内网 | 集中管理 | 需要预先搭建 |
对于大多数场景,我推荐使用 WinSCP 进行初始文件传输,因为它提供了直观的图形界面和可靠的传输性能。传输前请确保:
# 在目标服务器上创建专用目录 sudo mkdir -p /opt/mysql_offline sudo chown -R $USER:$USER /opt/mysql_offline2. 系统环境检查与依赖解析
2.1 深度系统兼容性检查
在开始安装前,必须全面检查系统环境。运行以下命令获取系统详细信息:
# 检查系统版本 lsb_release -a # 检查内核版本 uname -r # 检查已安装的依赖项 dpkg -l | grep -E 'libaio|libmecab|libnuma'这些信息将帮助您确认是否需要额外的依赖包。我曾经在一个项目中忽略了内核版本检查,结果因为glibc版本不兼容导致安装失败,浪费了数小时排查时间。
2.2 依赖关系树分析
MySQL 8.0.26 的离线安装最大的挑战在于复杂的依赖关系。通过分析,我们可以得到以下依赖树:
mysql-server ├── mysql-community-server │ ├── mysql-community-server-core │ │ ├── libaio1 │ │ ├── libmecab2 │ │ └── libstdc++6 │ └── mysql-common ├── mysql-client │ ├── mysql-community-client │ │ └── mysql-community-client-core │ └── libmysqlclient21 └── libmysqlclient-dev理解这个关系树至关重要,它决定了我们安装软件包的正确顺序。错误的安装顺序会导致依赖错误,甚至需要从头开始。
3. 分阶段安装流程
3.1 解压与准备安装包
将主安装包解压到指定目录:
tar -xvf mysql-server_8.0.26-1ubuntu20.04_amd64.deb-bundle.tar -C /opt/mysql_offline解压后,您会看到多个.deb文件。以下是关键文件及其作用:
mysql-community-client-core_8.0.26-1ubuntu20.04_amd64.deb:客户端核心组件mysql-community-server_8.0.26-1ubuntu20.04_amd64.deb:服务器主程序mysql-community-server-core_8.0.26-1ubuntu20.04_amd64.deb:服务器核心组件
3.2 精确安装顺序与命令
基于依赖关系分析,以下是经过优化的安装顺序:
安装基础依赖:
sudo dpkg -i libaio1_0.3.112-5_amd64.deb sudo dpkg -i libmecab2_0.996-10build1_amd64.deb安装MySQL核心组件:
sudo dpkg -i mysql-common_8.0.26-1ubuntu20.04_amd64.deb sudo dpkg -i mysql-community-client-plugins_8.0.26-1ubuntu20.04_amd64.deb 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-community-server-core_8.0.26-1ubuntu20.04_amd64.deb sudo dpkg -i mysql-community-server_8.0.26-1ubuntu20.04_amd64.deb
注意:在安装mysql-community-server时,系统会提示设置root密码。建议选择强密码并记录下来,因为在离线环境中重置密码会更加困难。
4. 安装后配置与优化
4.1 基础服务管理
安装完成后,启动MySQL服务并设置为开机自启:
sudo systemctl start mysql sudo systemctl enable mysql验证服务状态:
systemctl status mysql预期输出应显示"active (running)"。如果遇到问题,检查日志文件:
sudo tail -n 50 /var/log/mysql/error.log4.2 安全加固配置
在内网环境中,安全同样重要。运行MySQL安全脚本:
sudo mysql_secure_installation即使在内网,也建议:
- 移除匿名用户
- 禁止root远程登录
- 移除测试数据库
- 重新加载权限表
4.3 性能基础调优
编辑MySQL配置文件进行基础优化:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf添加或修改以下参数:
[mysqld] innodb_buffer_pool_size = 1G # 根据内存调整,通常为物理内存的50-70% innodb_log_file_size = 256M max_connections = 200 query_cache_size = 0 # MySQL 8.0已移除查询缓存保存后重启服务使配置生效:
sudo systemctl restart mysql5. 远程访问与权限管理
5.1 安全地启用远程访问
如果需要从其他服务器访问MySQL,需要谨慎配置:
创建专用管理用户:
CREATE USER 'admin'@'192.168.1.%' IDENTIFIED BY 'StrongPassword!123'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'192.168.1.%' WITH GRANT OPTION; FLUSH PRIVILEGES;修改绑定地址:
sudo sed -i 's/bind-address.*/bind-address = 0.0.0.0/' /etc/mysql/mysql.conf.d/mysqld.cnf sudo systemctl restart mysql
重要:在内网环境中也要遵循最小权限原则,避免使用root账户进行远程连接。
5.2 防火墙配置
如果系统启用了UFW防火墙,需要开放MySQL端口:
sudo ufw allow from 192.168.1.0/24 to any port 3306 sudo ufw enable验证规则是否生效:
sudo ufw status numbered6. 备份与维护策略
6.1 离线环境下的备份方案
在没有外网连接的环境中,备份尤为重要。设置自动化本地备份:
# 创建备份目录 sudo mkdir /var/mysql_backups sudo chown mysql:mysql /var/mysql_backups # 每日全量备份脚本 echo '#!/bin/bash BACKUP_DIR="/var/mysql_backups" DATE=$(date +%Y%m%d) mysqldump -u root -p"YourRootPassword" --all-databases > "$BACKUP_DIR/full_backup_$DATE.sql" find $BACKUP_DIR -type f -name "*.sql" -mtime +7 -delete' | sudo tee /usr/local/bin/mysql_backup.sh sudo chmod +x /usr/local/bin/mysql_backup.sh添加到cron定时任务:
(sudo crontab -l 2>/dev/null; echo "0 2 * * * /usr/local/bin/mysql_backup.sh") | sudo crontab -6.2 创建可移植的离线安装包
为方便后续部署,可以将所有依赖打包:
# 创建打包目录 mkdir -p ~/mysql_offline_bundle cp /opt/mysql_offline/* ~/mysql_offline_bundle/ # 添加安装脚本 echo '#!/bin/bash echo "Installing dependencies..." sudo dpkg -i libaio1_0.3.112-5_amd64.deb sudo dpkg -i libmecab2_0.996-10build1_amd64.deb echo "Installing MySQL components..." sudo dpkg -i mysql-common_8.0.26-1ubuntu20.04_amd64.deb sudo dpkg -i mysql-community-client-plugins_8.0.26-1ubuntu20.04_amd64.deb # 添加剩余安装命令... echo "Installation complete!"' > ~/mysql_offline_bundle/install_mysql.sh chmod +x ~/mysql_offline_bundle/install_mysql.sh # 打包 tar -czvf mysql_8.0.26_offline_install.tar.gz ~/mysql_offline_bundle这个完整的离线包可以复制到其他内网机器使用,大大简化后续部署工作。