如何在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
希望对您有所帮助,解决了您的问题。 :)
在 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
希望对您有所帮助,解决了您的问题。 :)