You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 22.04/23.04下Laravel Artisan Migrate单表创建耗时3秒求助

解决方案

1. 关闭通用查询日志(General Log)

你的MySQL配置中开启了general_log=1,这会记录所有执行的SQL语句,日志写入的IO操作会严重拖慢性能,尤其是Laravel、phpMyAdmin这类会发起大量小查询的PHP应用场景。

修改/etc/mysql/mysql.conf.d/mysqld.cnf:

general_log = 0

重启MySQL服务生效:

sudo systemctl restart mysql

2. 禁用skip-grant-tables

skip-grant-tables会跳过MySQL权限验证,不仅存在严重安全风险,还会导致连接过程中触发异常的权限处理逻辑,额外增加性能开销。

修改配置文件:

# 注释或删除该行
# skip-grant-tables

重启MySQL后,重新设置root用户密码(修复跳过权限带来的问题):

sudo mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
FLUSH PRIVILEGES;

3. 优化InnoDB缓冲池配置

你的配置仅针对MyISAM引擎设置了key_buffer_size=8G,但实际使用的是InnoDB引擎,需调整对应缓冲池参数:

在[mysqld]段添加或修改:

innodb_buffer_pool_size = 16G  # 根据内存调整:32G内存建议设20G,16G内存建议设10G
innodb_log_file_size = 2G
innodb_flush_log_at_trx_commit = 1  # 若追求极致性能可改为2,但会牺牲部分数据安全性

重启MySQL生效。

4. 确保PHP与MySQL使用相同Socket连接

终端连接MySQL默认用Unix Socket,而PHP可能默认用TCP连接(即使是localhost),Socket连接速度远快于TCP。

编辑对应PHP版本的配置文件(如/etc/php/8.1/apache2/php.ini):

mysqli.default_socket = /var/run/mysqld/mysqld.sock
pdo_mysql.default_socket = /var/run/mysqld/mysqld.sock

重启Apache服务:

sudo systemctl restart apache2

同时修改Laravel的.env文件,将DB_HOST设为localhost以优先使用Socket:

DB_HOST=localhost

5. 检查磁盘IO性能

创建表依赖磁盘写入,可测试磁盘速度:

dd if=/dev/zero of=/tmp/test bs=1G count=1 oflag=direct

若写入速度远低于100MB/s,可能是磁盘硬件或挂载参数问题,需排查存储设备状态。


验证操作

修改完成后,重新测试:

  • 通过phpMyAdmin创建表,查看耗时变化
  • 运行php artisan migrate,观察表创建速度是否恢复正常

内容的提问来源于stack exchange,提问作者MElhalees

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:08:20