在 1核2G 的服务器上“跑满” MySQL,通常指的是让 MySQL 尽可能多地使用系统资源(CPU、内存),以达到性能测试或压力测试的目的。但需要注意的是,在这种低配服务器上“跑满”MySQL,可能会导致服务不稳定甚至崩溃。
一、明确目的
首先你需要确认你的真实目的是什么:
- 是为了进行 性能压测 / 压力测试?
- 还是为了让 MySQL 在低配置下尽可能发挥最大性能?
- 或者是想观察 MySQL 在资源耗尽时的表现?
不同的目标,采取的手段不同。
二、基本前提准备
1. 安装 MySQL
建议安装较新的版本(如 5.7+ 或 8.0+)以便支持更多调优参数。
sudo apt update
sudo apt install mysql-server
2. 修改 MySQL 配置文件(优化内存使用)
编辑 /etc/mysql/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf:
[mysqld]
innodb_buffer_pool_size = 512M # 根据内存调整,不要超过物理内存的 50%
innodb_log_file_size = 128M
max_connections = 100 # 可适当降低
query_cache_type = 0
query_cache_size = 0
table_open_cache = 200
tmp_table_size = 32M
max_allowed_packet = 64M
thread_cache_size = 10
innodb_flush_log_at_trx_commit = 2
注意:不要设置过高的缓冲池,否则会导致 OOM(内存溢出)。
三、如何“跑满”MySQL?
方法一:使用脚本执行大量查询(模拟并发)
1. 创建测试数据库和表
CREATE DATABASE testdb;
USE testdb;
CREATE TABLE test (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2. 使用脚本插入数据(Python 示例)
import mysql.connector
from threading import Thread
def insert_data():
conn = mysql.connector.connect(
host="localhost",
user="root",
password="your_password",
database="testdb"
)
cursor = conn.cursor()
for _ in range(10000):
cursor.execute("INSERT INTO test (name) VALUES ('test')")
conn.commit()
cursor.close()
conn.close()
# 启动多个线程模拟并发
for _ in range(10): # 调整这个数字来增加负载
t = Thread(target=insert_data)
t.start()
运行后可以使用 htop 和 free -h 观察 CPU 和内存占用情况。
方法二:使用基准测试工具(推荐)
1. 使用 sysbench
sudo apt install sysbench
2. 初始化测试数据
sysbench --test=oltp_read_write
--mysql-host=localhost
--mysql-user=root
--mysql-password=your_password
--mysql-db=testdb
--tables=10
--table-size=100000
prepare
3. 执行压测
sysbench --test=oltp_read_write
--mysql-host=localhost
--mysql-user=root
--mysql-password=your_password
--mysql-db=testdb
--threads=16 # 根据服务器调整
--time=60
run
四、监控 MySQL 性能
你可以使用以下命令实时查看:
htop # 查看 CPU/内存使用
free -h # 内存使用情况
iostat -x 1 # 磁盘 IO 情况
vmstat 1 # 综合系统状态
mysqladmin -u root -p processlist # 查看当前连接和查询
五、注意事项
| 项目 | 建议 |
|---|---|
| 不要盲目增大 buffer pool | 1核2G 的机器最多设为 512MB |
| 控制并发连接数 | max_connections 设置为 50~100 即可 |
| 避免频繁 swap | swap 分区会拖慢性能 |
| 使用 InnoDB 引擎 | 更适合现代场景 |
| 监控 OOM killer | dmesg | grep -i kill 可查是否因内存不足被杀 |
六、总结
要在 1核2G 的服务器上“跑满” MySQL,可以通过如下方式实现:
✅ 使用 sysbench 进行 OLTP 压测
✅ 使用 Python/Shell 脚本模拟高并发写入
✅ 调整 MySQL 配置,使其更激进地使用资源
✅ 实时监控 CPU、内存、IO 使用情况
如果你只是想做 极限测试,也可以尝试不断加并发,直到 MySQL 出现错误或崩溃为止。
如需我帮你生成完整的测试脚本或者压测方案,请告诉我你的具体需求(比如你是想测试读还是写?并发多少?)。
云计算导航