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
相关产品推荐
相关产品推荐

