GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Übertragen Sie Daten in einen MySQL-Container

Basierend auf der @dekin-Forschung habe ich Folgendes getan, um das Problem zu lösen:

Dockerfile:

FROM mysql:latest

RUN cp -r /var/lib/mysql /var/lib/mysql-no-volume

CMD ["--datadir", "/var/lib/mysql-no-volume"]

Erstellen und ausführen:

docker build . -t my-mysql
docker run -e MYSQL_ROOT_PASSWORD=root -it my-mysql

Basierend auf der Antwort von @Robert habe ich diesen Dockerfile erhalten :

FROM mysql:5.6.22

RUN cp -r /var/lib/mysql /var/lib/mysql-no-volume

RUN sed -i -e "s|/var/lib/mysql|/var/lib/mysql-no-volume|" /etc/mysql/my.cnf

Die CMD Override hat bei mir nicht funktioniert, Container wurde mit einem seltsamen Fehler angehalten:

2019-02-21 15:18:50 1 [Note] Plugin 'FEDERATED' is disabled.
mysqld: Table 'mysql.plugin' doesn't exist
2019-02-21 15:18:50 1 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.

Ich vermute, dass die ursprüngliche CMD Befehl hat mehr Dinge getan, die jetzt fehlen (in @Robert answer), also habe ich es auf eine andere Art und Weise gemacht. Ich habe es nicht mit latest versucht Version, aber ich denke, es sollte funktionieren.


Wenn Sie docker-compose verwenden , muss kein benutzerdefiniertes Image erstellt werden. Fügen Sie einfach das Flag --datadir=/var/lib/mysql-no-volume hinzu zu Ihrem Befehl beim Ziehen der mysql Bild.

Beispiel:

version: '2.4'
services:
  mysql:
    image: mysql:5.7
    command: "mysqld --character-set-server=utf8 --collation-server=utf8_general_ci --datadir=/var/lib/mysql-no-volume"

Das offizielle MySQL-Image speichert Daten in einem Volume. Normalerweise ist dies gewünscht, damit Ihre Daten über die Lebensdauer Ihres Containers hinaus bestehen bleiben können, aber Datenvolumen umgehen das Union File System und werden nicht an das Image gebunden.

Sie können erreichen, was Sie versuchen, indem Sie Ihr eigenes MySQL-Basisimage ohne Volumes erstellen. Sie können dann Daten hinzufügen und in ein Image übertragen, aber alle Daten, die einem laufenden Container nach der Übertragung hinzugefügt werden, gehen verloren, wenn der Container verschwindet.


Linux
  1. Terraform – Bereitstellen von Python Lambda (Container-Image)

  2. So führen Sie MySQL in einem Docker-Container aus

  3. So übertragen Sie Änderungen an einem Docker-Image

  4. Was befindet sich in einem Docker-Image/Container?

  5. Verbessern Sie die Geschwindigkeit des MySQL-Imports

MySQL-Datentypen

So speichern Sie Docker-Containerdaten in Docker-Volumes

PHP MySQL Select-Daten

Neues Container-Feature:Volatile Overlay Mounts

So installieren Sie das AlmaLinux 8-Image im Docker-Container

So verwenden Sie Docker Commit zum Ändern von Container-Images