1. 为什么选择Ubuntu 22.04运行MySQL?
作为2022年发布的LTS(长期支持)版本,Ubuntu 22.04 Jammy Jellyfish在数据库服务部署领域展现出独特优势。其搭载的Linux 5.15内核针对现代服务器硬件进行了深度优化,特别是对Intel Ice Lake和AMD EPYC处理器的调度改进,使得MySQL这类I/O密集型应用的线程处理效率提升显著。根据Phoronix的基准测试,在相同硬件配置下,22.04相比20.04的数据库事务处理能力平均提升约12%。
从软件生态看,Ubuntu 22.04官方源中的MySQL软件包已更新至8.0系列(默认版本为8.0.36),完整支持窗口函数、通用表表达式(CTE)和JSON增强功能。与CentOS等发行版相比,Ubuntu的APT包管理系统在依赖解决速度上快30%以上,这对于需要频繁更新安全补丁的数据库环境尤为重要。
提示:虽然Ubuntu 22.04也提供MariaDB包,但本文聚焦原生MySQL的安装部署。两者在性能特性和管理命令上存在细微差别,生产环境选择时需谨慎评估。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 安装前的系统准备
2.1 硬件资源检查
在终端执行以下命令快速查看系统资源:
bash复制free -h # 内存检查(MySQL 8.0建议至少2GB)
df -h / # 存储空间检查(建议根分区剩余10GB+)
lscpu # CPU核心数检查
对于物理服务器,特别需要注意:
- NUMA架构下的内存分配策略(建议在BIOS中关闭NUMA平衡)
- 交换分区设置(推荐设置为物理内存的50%-100%)
- 磁盘调度算法(数据库负载建议使用deadline或noop)
2.2 系统更新与依赖安装
首先更新软件源并升级现有包:
bash复制sudo apt update && sudo apt upgrade -y
安装MySQL所需的底层库:
bash复制sudo apt install -y libaio1 libnuma-dev libtinfo5 libncurses5
2.3 安全加固准备
建议在安装前完成:
- 配置UFW防火墙规则(默认放行3306端口):
bash复制sudo ufw allow 3306/tcp sudo ufw enable - 创建专用mysql用户组:
bash复制sudo groupadd mysql sudo useradd -r -g mysql -s /bin/false mysql
3. MySQL 8.0的三种安装方式详解
3.1 官方APT源安装(推荐)
这是最便捷的安装方式,适合大多数场景:
bash复制sudo apt install -y mysql-server
安装过程会自动:
- 创建/etc/mysql目录结构
- 生成默认配置文件my.cnf
- 初始化系统表空间
- 设置systemd服务单元
安装完成后验证版本:
bash复制mysql --version
3.2 手动下载DEB包安装
当需要特定小版本时可采用此方式:
- 访问MySQL官方仓库:
bash复制
wget https://dev.mysql.com/get/mysql-apt-config_0.8.28-1_all.deb - 安装仓库配置:
bash复制sudo dpkg -i mysql-apt-config_0.8.28-1_all.deb - 选择需要的版本后更新安装:
bash复制sudo apt update sudo apt install -y mysql-server=8.0.36-1ubuntu22.04
3.3 二进制TAR包安装
适合需要自定义安装路径的场景:
bash复制wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.36-linux-glibc2.35-x86_64.tar.xz
sudo tar -xvf mysql-8.0.36-linux-glibc2.35-x86_64.tar.xz -C /usr/local/
cd /usr/local && sudo ln -s mysql-8.0.36-linux-glibc2.35-x86_64 mysql
4. 关键配置优化指南
4.1 安全初始化设置
首次安装后必须运行安全脚本:
bash复制sudo mysql_secure_installation
该脚本会交互式引导完成:
- 设置root密码强度
- 移除匿名用户
- 禁止root远程登录
- 删除测试数据库
- 重载权限表
4.2 性能参数调优
编辑/etc/mysql/mysql.conf.d/mysqld.cnf,关键参数建议:
ini复制[mysqld]
innodb_buffer_pool_size = 4G # 物理内存的50-70%
innodb_log_file_size = 1G # 通常设为buffer pool的25%
innodb_flush_method = O_DIRECT
max_connections = 200 # 根据应用需求调整
thread_cache_size = 100
query_cache_type = 0 # MySQL 8.0已移除查询缓存
4.3 字符集与排序规则
建议统一使用utf8mb4:
sql复制ALTER DATABASE mysql CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
5. 服务管理与故障排查
5.1 systemd服务控制
常用命令:
bash复制sudo systemctl status mysql # 查看状态
sudo systemctl restart mysql # 重启服务
sudo journalctl -u mysql -f # 实时查看日志
5.2 常见问题解决
问题1:无法启动服务
检查错误日志:
bash复制sudo tail -n 50 /var/log/mysql/error.log
常见原因:
- 权限问题:
chown -R mysql:mysql /var/lib/mysql - 表空间损坏:
mysqlcheck --all-databases --repair
问题2:连接数耗尽
临时解决方案:
sql复制SET GLOBAL max_connections = 500;
永久修改需调整my.cnf后重启服务。
6. 生产环境部署建议
6.1 高可用架构
考虑部署:
- MySQL InnoDB Cluster(基于Group Replication)
- 主从复制+Keepalived VIP
- 使用ProxySQL实现读写分离
6.2 监控方案
推荐组合:
- Prometheus + mysqld_exporter + Grafana
- Percona PMM(全功能监控套件)
关键监控指标:
sql复制SHOW GLOBAL STATUS LIKE 'Threads_connected';
SHOW ENGINE INNODB STATUS;
6.3 备份策略
物理备份推荐:
bash复制sudo mysqldump --single-transaction --quick --all-databases > full_backup.sql
逻辑备份工具:
- mydumper/myloader(多线程备份恢复)
- Percona XtraBackup(热备份方案)
7. 开发者快速入门
7.1 创建测试数据库
sql复制CREATE DATABASE devdb CHARACTER SET utf8mb4;
CREATE USER 'devuser'@'%' IDENTIFIED BY 'StrongPass123!';
GRANT ALL PRIVILEGES ON devdb.* TO 'devuser'@'%';
FLUSH PRIVILEGES;
7.2 常用管理命令
查看运行进程:
sql复制SHOW PROCESSLIST;
查看变量设置:
sql复制SHOW VARIABLES LIKE 'innodb%';
7.3 性能分析技巧
慢查询日志配置:
ini复制slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1
使用EXPLAIN分析查询:
sql复制EXPLAIN FORMAT=JSON SELECT * FROM large_table WHERE id > 1000;
