如何在docker下创建测试数据库?

How to create testing database under docker?

在 Kubuntu 18 中,我为 laravel 6 应用程序创建了 docker,定义了 mysql:

  mysql:
    container_name: "vanilla-crm-db"
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: "MYSQL_ROOT_PASSWORD"
      MYSQL_DATABASE: "vanilla-crm-dev"
      MYSQL_USER: "MYSQL_USER"
      MYSQL_PASSWORD: "MYSQL_PASSWORD"
    ports:
      - "3330:3306"
    volumes:
      - "./docker/mysql/data:/var/lib/mysql"

它对我有用。 我使用 MySql Workbench 6.3 进行数据库访问。 文本 我进行了 http 测试,我需要为此创建新数据库并在其中加载我的数据库。 该数据库的名称写在 config/database.php 在 'mysql_testing' 块下

我打开 Workbench 并尝试创建新数据库:https://prnt.sc/unjie8 但我没有找到“创建数据库”选项,但我看到“创建新模式”选项 在 sql-statement preview 中我看到了 command

CREATE SCHEMA `vanilla-crm-testing` ;

我预计

Create database ...

命令。 一样吗?

下一个错误:

Operation failed: There was an error while applying the SQL script to the database.
Executing:
CREATE SCHEMA `vanilla-crm-testing` ;

ERROR 1044: Access denied for user 'vanilla-crm-usr'@'%' to database 'vanilla-crm-testing'
SQL Statement:
CREATE SCHEMA `vanilla-crm-testing`

创建测试数据库的有效方法是什么?

更新: 我尝试在 mysql 控制台中创建新数据库,例如:

mysql
CREATE DATABASE  vanilla-crm-testing;

但我在 docker 命令行中遇到错误:

$ docker-compose exec app bash
root@09649d3a2b81:/app# mysql
bash: mysql: command not found

我的 docker 应用程序在 Dockerfile 中有:

FROM php:7.3-apache
...

    RUN apt-get update && apt-get install --no-install-recommends -y \
      apt-utils ghostscript jq libicu-dev libmagick++-dev libpq-dev libfreetype6-dev libjpeg62-turbo-dev zlib1g-dev libzip-dev git zip && \
      docker-php-ext-install intl && \
      docker-php-ext-install opcache && \
      docker-php-ext-install pdo_mysql && \

不再有 mysql 命令。我是否需要在 Dockerfile 中安装更多软件包才能在 docker 下安装 mysql 控制台?

更新#2: 我使用命令输入 bash :

docker-compose exec mysql bash

root@f216ef80c104:/# uname -a 
Linux f216ef80c104 4.15.0-118-generic #119-Ubuntu SMP Tue Sep 8 12:30:01 UTC 2020 x86_64 GNU/Linux

其中 mysql 是 container_name 在 docker-compose.yml

通常我输入mysql控制台命令:

mysql -u root -h localhost -p

但是在docker控制台中这个命令的格式必须是什么? 我尝试了几种方法都失败了...

更新 # 3: 我安装了 DBeaver Version 7.2.1.202009201907 并登录 我的数据库并尝试创建新的数据库进行测试。我收到错误: https://prnt.sc/uol0z7

如何解决? 我是否需要添加更多正确的 mysql 容器定义?

谢谢!

要回答您的问题,您的主要问题似乎是您正在尝试创建一个新的测试数据库,但您使用的是 non-root 用户登录。 Non-root 用户执行某些操作的权限很小。这就是为什么您收到该错误消息并且无法创建新数据库的原因。要解决此问题,请尝试使用 root 用户 log-in 并确保您的 Dbeaver 配置正确:

host: 127.0.0.1
port: <Exposed MySQL port based on your docker-compose, e.g: 3330>
username: root
password: <MYSQL_ROOT_PASSWORD from your docker-compose>

使用 root 用户,您应该能够创建任何新数据库。另一件事,如果您想通过 mysql cli 命令进行连接,请确保您还向 docker 容器提供了正确的端口。命令应该是这样的:

mysql -u root -h 127.0.0.1 -P <Exposed MySQL port based on your docker-compose, e.g: 3330> -p

希望对您有所帮助,解决了您的问题。 :)