sql >> Database >  >> RDS >> Mysql

Gevulde MySQL Docker-afbeelding maken tijdens de bouwtijd

Ik liep deze week tegen hetzelfde probleem aan. Ik heb een werkende oplossing gevonden zonder --volumes-from

Het probleem dat al is gesteld, is dat /var/lib/mysql is een volume, en aangezien Docker UNVOLUME niet gaat ondersteunen in zijn Dockerfile in de nabije toekomst, kunt u deze locatie niet gebruiken voor uw databaseopslag als u standaard met een lege database wilt beginnen. (https://github.com/docker/docker/issues/18287 ). Daarom overschrijf ik etc/mysqld.my.cnf , waardoor mysql een nieuwe datadir krijgt.

Samen met het antwoord van pwes, kun je een Dockerile als volgt maken:

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

De enige wijziging die er is in my.cnf is de locatie van de datadir:

.... 
[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. Hoe de SQL-query optimaliseren met het berekenen van afstand op lengte- en breedtegraad?

  2. Vind overlappende datumbereiken in PostgreSQL

  3. MYSQLI::prepare() , fout bij gebruik tijdelijke aanduiding :iets

  4. Hoe REGEXP te gebruiken met ontsnappingsreeksen zoals woordgrens?