如何在1核2g的服务器跑满mysql?

在 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 出现错误或崩溃为止。


如需我帮你生成完整的测试脚本或者压测方案,请告诉我你的具体需求(比如你是想测试读还是写?并发多少?)。

未经允许不得转载:云计算导航 » 如何在1核2g的服务器跑满mysql?