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

Docker部署Laravel项目MySQL容器数据持久化及登录权限问题求助

解决Docker部署MySQL数据持久化+远程连接问题

一、先搞定MySQL容器登录问题

你直接在VPS终端用mysql -uroot -p登不上是因为你连的是VPS本地的MySQL(大概率没装),正确操作是进入Docker容器内部登录:

  • 启动MySQL服务:docker-compose up -d mysql
  • 查看容器ID/名称:docker ps,找到对应MySQL容器的标识
  • 进入容器终端:docker exec -it <容器ID/名称> bash
  • 在容器内登录MySQL:mysql -uroot -p,输入你docker-compose.yml里配置的MYSQL_ROOT_PASSWORD密码

要是还是登不上,90%是本地数据卷目录权限的锅:

  • 停掉容器:docker-compose down
  • 删除当前的mysql数据目录:rm -rf ./mysql
  • 重新创建并设置权限:mkdir ./mysql && sudo chown -R 999:999 ./mysql(MySQL容器内的运行用户UID是999,必须让宿主目录权限匹配)
  • 重启容器:docker-compose up -d,此时MySQL会重新初始化数据,用你配置的密码就能正常登录了

二、解决远程连接1130错误

成功登录容器内的MySQL后,执行授权命令开放远程访问:

  • 允许root用户从任意IP连接(嫌不安全的话可以把%换成你的本地IP):
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的root密码' WITH GRANT OPTION;
    
  • 如果是Laravel用的普通用户,同样授权:
    GRANT ALL PRIVILEGES ON 你的项目数据库名.* TO '普通用户名'@'%' IDENTIFIED BY '普通用户密码';
    
  • 刷新权限生效:FLUSH PRIVILEGES;

另外检查你的docker-compose.yml,确保MySQL配置里加了必要参数:

services:
  mysql:
    image: mysql:8.0 # 换成你实际用的镜像版本
    environment:
      MYSQL_ROOT_PASSWORD: your_root_password
      MYSQL_DATABASE: laravel_db
      MYSQL_USER: laravel_user
      MYSQL_PASSWORD: laravel_pass
      MYSQL_ROOT_HOST: "%" # 部分镜像需要这个参数允许root远程连接
    ports:
      - "3306:3306"
    volumes:
      - ./mysql:/var/lib/mysql

注意:MySQL 8.0+版本不支持在GRANT语句里直接创建用户,得分开写:

CREATE USER 'root'@'%' IDENTIFIED BY '你的root密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

三、验证数据持久化

操作完后执行docker-compose down再docker-compose up -d,用Navicat测试连接,同时检查VPS上的./mysql目录下是否生成了数据文件,确保重启容器后数据不会丢失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:32:21