sql >> Databasteknik >  >> RDS >> Mysql

Hur man skapar befolkad MySQL Docker Image på byggtid

Jag stötte på samma problem den här veckan. Jag har hittat en fungerande lösning utan behov av --volumes-from

Problemet som redan har nämnts är att /var/lib/mysql är en volym, och eftersom Docker inte kommer att stödja UNVOLUME i sin Dockerfile inom en snar framtid kan du inte använda den här platsen för din databaslagring om du vill börja med en tom databas som standard. (https://github.com/docker/docker/issues/18287 ). Det är därför jag skriver över etc/mysqld.my.cnf , vilket ger mysql en ny datadir.

Tillsammans med pwes svar kan du skapa en Dockerile så här:

FROM mysql:5.6

ENV MYSQL_DATABASE db
ENV MYSQL_ROOT_PASSWORD pass
COPY db.sql /docker-entrypoint-initdb.d/db.sql
COPY my.cnf /etc/mysql/my.cnf
RUN /entrypoint.sh mysqld & sleep 30 && killall mysqld
RUN rm /docker-entrypoint-initdb.d/db.sql

Den enda ändringen finns i my.cnf är platsen för datakatalogen:

.... 
[mysqld]
skip-host-cache
skip-name-resolve
user        = mysql
pid-file    = /var/run/mysqld/mysqld.pid
socket      = /var/run/mysqld/mysqld.sock
port        = 3306
basedir     = /usr
datadir     = /var/lib/mysql2 <-- can be anything except /var/lib/mysql
tmpdir      = /tmp
lc-messages-dir = /usr/share/mysql
explicit_defaults_for_timestamp
....


  1. Snabbaste sättet att kontrollera om det finns en post innan du infogar [mysql_errno()]

  2. Kan inte lösa tabellnamn nära

  3. Hur får man ut skillnaden i år från två olika datum?

  4. Framsteg med onlineuppgradering