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

Laravel Sail中MySQL转MariaDB后迁移报错排查求助

排查Laravel Sail切换MariaDB后的[HY000] [2002]连接错误

1. 核对.env文件的核心配置

确保这些参数和docker-compose里的数据库服务配置完全匹配:

  • DB_CONNECTION=mysql:Laravel对MariaDB依然使用mysql驱动,不要改成mariadb
  • DB_HOST=mysql:必须和docker-compose.yml里数据库服务的服务名一致(默认是mysql,没改服务名的话就用这个)
  • DB_PORT=3306:MariaDB默认容器内部端口是3306,除非你特意修改了容器内端口,否则保持默认值
  • DB_USERNAME、DB_PASSWORD、DB_DATABASE:要和docker-compose里数据库服务的环境变量(比如MYSQL_ROOT_PASSWORD、MYSQL_DATABASE)完全对应

2. 检查docker-compose.yml的数据库服务配置

确认你的数据库服务块包含以下关键配置:

services:
  mysql:
    image: 'mariadb:latest'
    ports:
      - '${FORWARD_DB_PORT:-3306}:3306'
    environment:
      MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
      MYSQL_DATABASE: '${DB_DATABASE}'
      MYSQL_USER: '${DB_USERNAME}'
      MYSQL_PASSWORD: '${DB_PASSWORD}'
      MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
    volumes:
      - 'sail-mysql:/var/lib/mysql'
    networks:
      - sail
  • 服务名是mysql:对应.env里的DB_HOST=mysql,容器间依赖服务名通信,这个不能错
  • 环境变量完整:MariaDB和MySQL的初始化环境变量基本兼容,但必须设置好MYSQL_ROOT_PASSWORD、MYSQL_DATABASE这些,否则容器初始化时不会创建对应数据库和用户
  • 网络统一:确保app服务和mysql服务都加入了sail网络(默认Sail会自动配置)

3. 清除Laravel配置缓存

切换数据库后,Laravel可能缓存了旧的MySQL配置,执行以下命令清空缓存:

sail artisan config:clear
sail artisan cache:clear

4. 测试容器间的连通性

进入Laravel的app容器,直接验证和MariaDB容器的连接状态:

sail shell
# 先ping数据库服务名,检查网络是否连通
ping mysql
# 用mysql命令直接连接,验证账号密码和主机是否正确
mysql -h mysql -u ${DB_USERNAME} -p

如果ping不通,说明docker网络配置有问题;如果mysql命令能连上但Laravel migrate报错,那就是Laravel侧的配置还有遗漏。

5. 重新检查MariaDB容器日志

再仔细核对MariaDB的启动日志,确认初始化过程正常:

sail logs mysql

重点查看是否有Database initialized、User created这类日志,确保数据库和用户已经正确创建,没有权限或初始化失败的提示。

内容的提问来源于stack exchange,提问作者michael-mammut

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:50:08