2026年Ubuntu下SQLAdmin扩容完整指南(2026)

一、为什么需要对SQLAdmin进行扩容

随着业务增长,SQLAdmin可能面临以下扩容需求:

扩容类型 触发原因 解决方案
存储空间不足 数据库文件过大 添加新磁盘、扩容现有分区
内存不足 大查询导致OOM 增加物理内存、优化配置
并发连接数受限 用户访问量增加 调整MySQL最大连接数
PHP脚本超时 复杂查询执行时间长 调整PHP超时设置
文件上传限制 无法导入大SQL文件 修改PHP上传限制

二、存储空间扩容

2.1 添加新磁盘扩容

当数据目录所在分区空间不足时,最直接的方式是添加新磁盘。

步骤1:查看当前磁盘使用情况

df -h
lsblk

步骤2:创建新分区并格式化

sudo fdisk /dev/sdb
# 输入 n 创建新分区
# 输入 w 保存退出
sudo mkfs.ext4 /dev/sdb1

步骤3:挂载新磁盘

sudo mount /dev/sdb1 /mnt/mysql_data
sudo mkdir -p /mnt/mysql_data/mysql

步骤4:迁移MySQL数据目录

# 停止MySQL服务
sudo systemctl stop mysql

# 迁移数据
sudo rsync -av /var/lib/mysql/ /mnt/mysql_data/mysql/

# 修改MySQL配置
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

在配置文件中添加:

[mysqld]
datadir=/mnt/mysql_data/mysql

步骤5:设置永久挂载

# 获取新分区UUID
sudo blkid /dev/sdb1

# 编辑fstab
sudo nano /etc/fstab

添加:

UUID=xxxx-xxxx-xxxx /mnt/mysql_data ext4 defaults 0 2

步骤6:重启MySQL

sudo systemctl start mysql

2.2 清理无用数据释放空间

# 进入MySQL shell
mysql -u root -p

# 查看数据库大小
SELECT table_schema AS 'Database',
       ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)'
FROM information_schema.TABLES
GROUP BY table_schema;

# 删除不需要的数据
DROP DATABASE old_database;

# 优化表
OPTIMIZE TABLE database_name.table_name;

三、内存扩容与优化

3.1 查看当前内存使用情况

free -h
htop
mysql -u root -p -e "SHOW STATUS LIKE 'Qcache%';"
mysql -u root -p -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"

3.2 优化MySQL内存配置

编辑MySQL配置文件:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

关键配置项:

[mysqld]
# InnoDB缓冲池大小(建议为物理内存的50-70%)
innodb_buffer_pool_size = 2G

# 查询缓存(MySQL 5.7已移除,仅早期版本)
query_cache_size = 128M
query_cache_type = 1

# 临时表内存大小
tmp_table_size = 256M
max_heap_table_size = 256M

# 连接数内存
max_connections = 200

3.3 PHP内存限制调整

如果SQLAdmin使用PHP运行,需要调整PHP内存限制:

sudo nano /etc/php/8.x/apache2/php.ini   # 或 nginx/fpm/php.ini

修改:

memory_limit = 512M
max_execution_time = 300

重启Web服务器:

sudo systemctl restart apache2  # 或 nginx

四、并发连接数扩容

4.1 查看当前连接数配置

mysql -u root -p -e "SHOW VARIABLES LIKE 'max_connections';"
mysql -u root -p -e "SHOW STATUS LIKE 'Max_used_connections';"

4.2 调整最大连接数

编辑MySQL配置:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
max_connections = 500

或者动态调整(临时生效):

mysql -u root -p -e "SET GLOBAL max_connections = 500;"

4.3 连接池优化

对于高并发场景,可以考虑使用连接池:

[mysqld]
thread_pool_size = 16
thread_pool_max_threads = 2000
thread_pool_stall_limit = 500

五、文件上传大小扩容

5.1 修改PHP上传限制

sudo nano /etc/php/8.x/apache2/php.ini

修改以下参数:

upload_max_filesize = 500M
post_max_size = 500M
max_execution_time = 600
max_input_time = 600
memory_limit = 512M

重启PHP-FPM:

sudo systemctl restart php8.x-fpm

5.2 修改SQLAdmin配置

sudo nano /var/www/html/sqladmin/config.inc.php

添加:

$cfg['UploadDir'] = '/var/lib/sqladmin/upload';
$cfg['SaveDir'] = '/var/lib/sqladmin/save';
$cfg['ExecTimeLimit'] = 600;
$cfg['MemoryLimit'] = '512M';

创建目录:

sudo mkdir -p /var/lib/sqladmin/upload /var/lib/sqladmin/save
sudo chown -R www-data:www-data /var/lib/sqladmin

六、InnoDB表空间扩容

6.1 查看InnoDB表空间使用情况

mysql -u root -p -e "
SELECT file_name, tablespace_name, data_size, data_free
FROM information_schema.files
WHERE tablespace_name IS NOT NULL;
"

6.2 在线扩容InnoDB表空间

如果使用innodb_file_per_table,可以在线扩容:

mysql -u root -p -e "ALTER TABLE database.table ENGINE = InnoDB;"

6.3 调整InnoDB日志文件大小

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
innodb_log_file_size = 1G
innodb_log_files_in_group = 3

修改后需要重启MySQL:

sudo systemctl stop mysql
sudo rm /var/lib/mysql/ib_logfile*  # 删除旧日志文件
sudo systemctl start mysql

七、性能优化建议

7.1 启用慢查询日志

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

7.2 定期优化数据库

创建定时任务:

sudo crontab -e

添加:

0 3 * * * mysqlcheck -o -A -u root -pYourPassword

7.3 使用索引优化查询

-- 查看慢查询
SHOW FULL PROCESSLIST;

-- 分析查询
EXPLAIN SELECT * FROM table_name WHERE column = 'value';

-- 添加索引
CREATE INDEX idx_column ON table_name(column);

八、扩容后验证

扩容完成后,需要验证各项指标:

# 1. 检查磁盘空间
df -h

# 2. 检查内存使用
free -h

# 3. 检查MySQL连接数
mysql -u root -p -e "SHOW STATUS LIKE 'Threads_connected';"

# 4. 测试大文件上传
mysql -u root -p < large_dump.sql

# 5. 检查错误日志
sudo tail -f /var/log/mysql/error.log

九、常见问题解决方案

Q1: 扩容后MySQL无法启动?

原因:可能是因为数据目录权限问题或配置文件错误

解决

sudo chown -R mysql:mysql /var/lib/mysql
sudo mysqld --validate-config  # 验证配置

Q2: 扩容存储后仍然提示空间不足?

原因:可能是临时目录空间不足

解决

# 检查tmpdir
mysql -u root -p -e "SHOW VARIABLES LIKE 'tmpdir';"

# 移动临时目录
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
tmpdir = /mnt/large_disk/tmp

Q3: 如何估算需要多少存储空间?

估算公式

总需求 = 数据量 × 1.5(增长预留)× 1.2(索引和日志)

建议始终预留30%以上的剩余空间。

十、总结

SQLAdmin扩容是一个系统性的工作,需要从多个维度综合考虑:

扩容维度 优先级 实施方案
存储空间 添加磁盘、迁移数据目录
内存 调整InnoDB缓冲池、优化配置
连接数 增加max_connections
文件上传 修改PHP和SQLAdmin配置
性能 优化查询、启用索引

建议在扩容前做好数据备份,并分阶段进行扩容测试,确保业务平稳过渡。

注:本文基于Ubuntu 22.04 LTS和MySQL 8.0编写。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注