【发布时间】:2026-02-06 03:45:02
【问题描述】:
我有一个问题,我希望 Docker Compose 在设置 MySQL 后直接导入我的 Database.sql 文件。但它总是给我抛出错误:
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在“DELIMITER |”附近使用的正确语法在第 1 行
但不知何故,当我通过浏览器中的 phpMyAdmin 导入它时,它工作得非常好。
这是我的docker-compose.yml:
version: "3.2"
services:
php:
build: './php/'
networks:
- backend
volumes:
- ./www/:/var/www/html/
apache:
build: './apache/'
depends_on:
- php
- mysql
networks:
- frontend
- backend
ports:
- "8081:80"
volumes:
- ./www/:/var/www/html/
mysql:
image: mysql:5.7
volumes:
- ./mysql:/tmp/database
command: mysqld --max_allowed_packet=32505856 --user=root --init-file="/tmp/database/schema.sql"
networks:
- backend
environment:
- MYSQL_ROOT_PASSWORD=root
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- mysql
ports:
- '8082:80'
environment:
MYSQL_USERNAME: root
MYSQL_ROOT_PASSWORD: root
PMA_HOST: mysql
networks:
- backend
networks:
frontend:
backend:
这是我执行的 .sql 文件的示例片段:
-- phpMyAdmin SQL Dump
-- version 4.8.2
-- https://www.phpmyadmin.net/
--
-- Host: mysql
-- Generation Time: Aug 20, 2018 at 08:30 AM
-- Server version: 5.7.23
-- PHP Version: 7.2.6
DELIMITER $$
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
--
-- Database: `database`
--
CREATE DATABASE IF NOT EXISTS `databasetest` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
USE `databasetest`;
--
-- Procedures
--
DROP PROCEDURE IF EXISTS `sp_filestatus_get`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_filestatus_get` (IN `filename_name` VARCHAR(500), IN `kampagne_name` VARCHAR(100), IN `outlet_name` VARCHAR(100)) NO SQL
... Some more stuff
END;
我是否遗漏了配置中的某些内容?或者为什么它不能与 compose 一起工作,但直接在 phpMyAdmin 中工作?
【问题讨论】:
-
请记住
DELIMITER不是 MySQL 命令。这是您的 MySQL 客户端需要支持的命令。所以可能 docker(或你的 docker 版本)不知何故不支持它。 -
啊,谢谢您的回复,我不知道。这就是它直接在 phpMyAdmin 中工作的原因。有没有可能找出哪个 Docker 版本支持 DELIMITER?
-
我不知道,不幸的是,我从未使用过 Docker。刚刚遇到其他客户的这个问题。
标签: mysql docker phpmyadmin