簡體   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