繁体   English   中英

在docker容器中的mysql中导入多个数据库架构

[英]Import multiple database schemas in mysql in docker container

想要使用backup.sql上传多个数据库架构。 然后,当尝试迁移显示内容时(1044,“拒绝用户'pranay'@'%'对数据库'core'的访问”),我添加了文件快照以供参考

***docker-compose.yml***
version: '3'
services:
db:
image: mysql:5.7
container_name: mirror_core
volumes:
  - ./mirror/core.sql:/docker-entrypoint-initdb.d/core.sql:rw
  - ./mysql:/var/lib/mysql:rw
expose:
  - "3306"
restart: always
environment:
  - MYSQL_ROOT_PASSWORD=mobigo@123
  - MYSQL_USER=pranay
  - MYSQL_PASSWORD=mobigo@123
web:
build: .
container_name: mirrorweb
command: bash -c "python manage.py collectstatic --no-input && gunicorn mirror.wsgi -b 0.0.0.0:8000"
links:
  - db
volumes:
  - ./mirror:/mirror
expose:
  - "8000"
depends_on:
  - db

core.sql

CREATE DATABASE  `core` ;
CREATE DATABASE  `murad` ;
CREATE DATABASE  `mysqltest` ;

settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'core',
        'USER':'pranay',
        'PASSWORD':'mobigo@123',
        'HOST':'db',
        'PORT':'',
    }
}

步骤如下:docker-compose build >> docker-compose up >> docker-compose exec bash >> python manage.py migration(在docker容器内) 迁移时发生错误,错误为(1044,“用户'pranay的访问被拒绝'@'%'到数据库'core'“)

问题是密码中的@ 您需要在docker-compose.yml中转义它。Python使用@ 123密码,而compose对待密码的方式不同,因此不是您为mysql设置的正确密码。

检查容器中的env变量,以了解将其实际设置为密码的内容。

供参考,请参阅:

https://symfony.com/doc/current/components/yaml/yaml_format.html

包含以下任何字符的字符串都必须加引号。 尽管您可以使用双引号,但是对于这些字符,使用单引号更为方便,这样可以避免转义任何反斜杠:

:,{,},[,],,,&,*,#,?,|,-,<,>,=,!,%,@,`

http://yaml.org/spec/1.2/spec.html#id2772075

保留“ @”(#x40,在)和“`”(#x60,重音)供将来使用。


也许也可以,但可能性较小

发生这种情况是因为当服务web执行python命令时,尚未在db服务中设置mysqldb。

参见mysql docker自述文件( https://hub.docker.com/_/mysql/ ):

在MySQL初始化完成之前没有连接

如果在容器启动时没有初始化数据库,则将创建一个默认数据库。 尽管这是预期的行为,但这意味着在初始化完成之前它将不接受传入的连接。 使用自动化工具(例如docker-compose)时,这可能会导致问题,该工具同时启动多个容器。

尝试启动数据库服务(docker-组成数据库),并给它几秒钟,然后尝试运行Web服务。

depends_on指令仅等待容器启动depends_on不知道容器中的服务何时“就绪”-开发人员需要自己实现。 通常,您只是将Web容器设置为一遍又一遍,直到它最终成功为止(数据库将准备就绪)。

另外,不管怎么说,建议您在执行迁移脚本之前sleep 10

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM