一、开场:遇到小问题
最近项目需要用MySQL数据库,想着用Docker Compose部署方便管理。 打开终端,习惯性地敲了一下:
bash
docker-compose
结果:
bash
-bash: docker-compose: command not found
好吧,看来得先装个docker-compose。
二、OpenEuler:稳定可靠的国产操作系统
在解决这个问题之前,先说说我用的系统------OpenEuler 22.03 LTS。
OpenEuler是什么? OpenEuler是由openAtom开源基金会孵化及运营的开源操作系统项目,面向服务器、云计算、边缘计算、嵌入式等场景。它的特点是:
- ✅ 高性能:针对各种场景深度优化
- ✅ 高稳定:生产级可靠性
- ✅ 高安全:内置安全机制
- ✅ 易迁移:兼容CentOS等主流发行版
- ✅ 完整生态:软件仓库丰富,容器、数据库、开发工具一应俱全 我这台服务器配置是2核4GB,对于跑MySQL这种中等负载的应用来说够用了。 官方资源:
- 官网:www.openeuler.org/
- 文档:docs.openeuler.org/
- 社区:forum.openeuler.org/ OpenEuler在云原生这块做得很不错,对Docker、Kubernetes、各种数据库的支持都很好。这也是我选择它的原因之一。
三、安装docker-compose:遇到GitHub访问问题
3.1 尝试直接下载
按照官方文档,docker-compose可以直接从GitHub下载:
bash
sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
结果下载到一半:
bash
curl: (92) HTTP/2 stream 0 was not closed cleanly: PROTOCOL_ERROR (err 1)
失败了。
3.2 分析问题
这个错误在国内很常见:GitHub的访问不稳定,下载大文件经常超时或中断。 58MB的docker-compose二进制文件,下载了30MB就断了,挺无奈的。
3.3 解决方案:本机下载+上传
既然服务器下载不了,那就换个思路:
- 在本机(Mac/Windows)下载docker-compose
- 本机网络可能更好,或者可以用梯子
- 下载完后用scp上传到服务器 本机操作:
bash
# 访问GitHub releases页面,下载docker-compose-linux-x86_64
# https://github.com/docker/compose/releases
# 或者本机用命令下载(如果本机网络好)
curl -L "https://github.com/docker/compose/releases/download/v2.40.0/docker-compose-linux-x86_64" -o ~/Downloads/docker-compose
# 上传到服务器
scp ~/Downloads/docker-compose root@your-server-ip:/root/
服务器操作:
bash
# 移动到正确位置
sudo mv ~/docker-compose-linux-x86_64 /usr/local/bin/docker-compose
# 添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker-compose --version
成功!安装的是v2.40.0版本。 小结: 这个问题的解决过程其实挺实用的。国内访问GitHub不稳定是常态,很多开发者都会遇到。本机下载+scp上传是一个通用的解决方案,不只适用于docker-compose,其他工具也可以这样操作。
四、Docker Compose部署MySQL
4.1 创建项目目录
bash
mkdir -p ~/mysql-monomer
cd ~/mysql-monomer
4.2 创建docker-compose.yml

bash
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: mysql-server
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_strong_password
MYSQL_DATABASE: testdb
MYSQL_USER: testuser
MYSQL_PASSWORD: testpass
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
- ./my.cnf:/etc/mysql/conf.d/my.cnf
command: --default-authentication-plugin=mysql_native_password
volumes:
mysql_data:
配置说明:
- image: mysql:8.0:使用MySQL 8.0官方镜像
- restart: always:容器退出自动重启
- environment:环境变量配置root密码、默认数据库、用户
- ports:映射3306端口到宿主机
- volumes:
- mysql_data:持久化数据目录
- ./my.cnf:挂载自定义配置文件
- command:使用传统的密码认证插件(兼容性更好)
4.3 创建MySQL配置文件

bash
[mysqld]
# 基础配置
max_connections = 200
max_connect_errors = 10000
# 性能配置
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
# 字符集
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 时区
default-time-zone = '+08:00'
配置解析:
- max_connections = 200:最大连接数,2核4G服务器设置200够用
- innodb_buffer_pool_size = 1G:InnoDB缓冲池,设置为物理内存的25%左右
- innodb_flush_log_at_trx_commit = 2:每秒刷新一次日志,平衡性能和安全
- innodb_flush_method = O_DIRECT:直接I/O,减少系统缓存开销
- utf8mb4:支持完整的Unicode字符集,包括emoji
- +08:00:东八区时区
4.4 启动MySQL
bash
docker-compose up -d
查看日志,等待MySQL启动完成:
bash
docker-compose logs -f mysql
看到ready for connections. Version: '8.0.44'就成功了。
五、MySQL基础验证
5.1 连接MySQL
bash
docker exec -it mysql-server mysql -uroot -pyour_strong_password
MySQL版本信息:
bash
Server version: 8.0.44 MySQL Community Server - GPL
查看数据库列表:
bash
SHOW DATABASES;
输出:
+--------------------+
| Database |
+--------------------+
| benchmark_test |
| information_schema |
| mysql |
| performance_schema |
| sys |
| testdb |
+--------------------+
6 rows in set (0.00 sec)
5.2 创建测试数据

bash
-- 创建测试数据库
CREATE DATABASE IF NOT EXISTS benchmark_test;
USE benchmark_test;
-- 创建用户表
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_username (username),
INDEX idx_email (email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 插入测试数据
INSERT INTO users (username, email) VALUES
('user1', 'user1@example.com'),
('user2', 'user2@example.com'),
('user3', 'user3@example.com'),
('user4', 'user4@example.com'),
('user5', 'user5@example.com'),
('user6', 'user6@example.com'),
('user7', 'user7@example.com'),
('user8', 'user8@example.com'),
('user9', 'user9@example.com'),
('user10', 'user10@example.com');
-- 查看数据
SELECT * FROM users;
SELECT COUNT(*) FROM users;
数据插入成功,10条记录。
六、MySQL性能测试:OpenEuler的表现
6.1 sysbench工具介绍
sysbench是MySQL官方推荐的性能测试工具,可以测试CPU、内存、磁盘I/O、数据库等性能。 在OpenEuler上安装很简单:
bash
sudo dnf install -y sysbench
OpenEuler的软件仓库很完善,常用工具基本都能直接装,这点很方便。
6.2 准备测试数据

bash
sysbench /usr/share/sysbench/oltp_read_write.lua \
--mysql-host=127.0.0.1 \
--mysql-port=3306 \
--mysql-user=root \
--mysql-password=your_strong_password \
--mysql-db=benchmark_test \
--tables=10 \
--table-size=10000 \
prepare
sysbench创建了10个表(sbtest1-sbtest10),每个表10000条记录,总共10万条数据。
6.3 运行性能测试

bash
sysbench /usr/share/sysbench/oltp_read_write.lua \
--mysql-host=127.0.0.1 \
--mysql-port=3306 \
--mysql-user=root \
--mysql-password=your_strong_password \
--mysql-db=benchmark_test \
--tables=10 \
--table-size=10000 \
--threads=4 \
--time=30 \
--report-interval=5 \
run
测试参数:
- 10个表,每个表10000条记录
- 4个并发线程
- 运行30秒
- 每5秒输出一次报告 性能测试结果: 暂时无法在飞书文档外展示此内容
6.4 性能数据分析
这个性能表现怎么样? 对于2核4GB的服务器来说,这个结果已经很不错了:
- TPS(事务处理能力)
- 459.62 TPS意味着每秒可以处理约460个事务
- 对于中小型应用(日活几千到几万)完全够用
- 如果是电商系统,按每个订单5-10个事务计算,可以支持每秒50-90个订单
- QPS(查询处理能力)
- 9,192 QPS意味着每秒可以处理约9200个SQL查询
- 对于一般的Web应用,每个页面请求可能涉及10-50个SQL查询
- 可以支持每秒200-900个页面请求
- 延迟表现
- 平均延迟8.70ms:很优秀,用户基本无感知
- 95%延迟11.45ms:说明大多数请求都很快
- 最大延迟19.10ms:也在可接受范围内
6.5 OpenEuler的性能优势
为什么MySQL在OpenEuler上能跑出这样的性能? 7. 内核优化 OpenEuler基于Linux 5.10 LTS内核,针对服务器场景做了很多优化:
- I/O调度器优化
- 内存管理优化
- 进程调度优化
- 网络栈优化 这些优化直接提升了数据库的I/O性能和响应速度。
- 软件生态完善 OpenEuler的软件仓库维护得很好:
- MySQL 8.0官方镜像完美支持
- Docker运行稳定
- sysbench等测试工具开箱即用 不需要折腾各种依赖,省时省力。
- 容器化支持出色 OpenEuler对容器化支持很好:
- Docker运行稳定
- 容器网络性能优秀
- 存储卷性能高 这次测试MySQL是跑在Docker容器里的,性能损耗很小。
- 生产级稳定性 测试过程中,系统一直很稳定,没有出现任何异常。对于数据库这种关键应用来说,稳定性比性能更重要。
七、容器资源占用

bash
docker stats --no-stream mysql-server
资源占用情况: 暂时无法在飞书文档外展示此内容 资源占用分析:
- 内存占用
- 空载时:约535MB(15.69%)
- 这个占用很合理,MySQL的innodb_buffer_pool_size设置为1GB,加上连接缓存、查询缓存等,535MB是正常的
- 对于4GB内存的服务器,留给系统和其他进程约2.8GB,足够了
- CPU占用
- 空载时:0.22%
- 说明MySQL在没有高负载时很节能
- 性能测试时CPU会升高,但测试完就降下来了
- 进程数
- 63个进程
- MySQL是多线程架构,这个进程数正常 OpenEuler的资源管理: OpenEuler在资源管理这块做得很好:
- cgroup资源限制精准
- 内存管理高效
- CPU调度合理 容器化部署MySQL不会影响系统的其他服务。
八、总结:OpenEuler与MySQL的完美组合
8.1 整体感受
从发现没有docker-compose,到GitHub下载失败,再到本机下载上传,最后成功部署MySQL并测试性能,整个过程挺顺利的。 虽然遇到了一些小问题,但都有解决方案。这也是实际工作中的常态:遇到问题→分析→解决→继续。
8.2 OpenEuler的优势
通过这次MySQL部署和测试,我对OpenEuler有了更深的认识: 14. 性能出色
- MySQL TPS 459.62,QPS 9,192
- 对于2核4GB的服务器,这个性能很优秀
- OpenEuler的内核优化、I/O优化功不可没
- 稳定可靠
- 整个部署和测试过程,系统一直很稳定
- 容器运行稳定,没有出现异常
- 这对于数据库这种关键应用很重要
- 生态完善
- Docker、docker-compose支持完美
- sysbench等工具开箱即用
- MySQL官方镜像完美运行
- 易用性好
- dnf包管理器方便
- 文档完善,社区活跃
- 遇到问题容易找到解决方案
8.3 适用场景
基于这次实践,我觉得OpenEuler + Docker + MySQL这个组合适合: 18. 开发环境
- 快速搭建,用完就删
- Docker Compose管理方便
- 不影响宿主机
- 测试环境
- 隔离性好
- 可以同时跑多个MySQL版本
- 方便做性能测试
- 中小型生产环境
- 单机部署简单
- 性能够用
- 稳定可靠
- 迁移场景
- 从CentOS迁移到OpenEuler
- 原有Docker化应用无缝迁移
- 兼容性好
8.4 建议
如果你也在:
- 寻找CentOS的替代品
- 搭建数据库服务器
- 探索国产操作系统
- 学习容器化部署
那么OpenEuler绝对值得一试。性能好、稳定、生态完善,而且国产化支持也很重要。