Estaba ejecutando la instancia de mariadb en el kit de herramientas de Windows Docker. Hice un cambio env vaiable en el contenedor mariaDB usando kitematic. Ahora ha recreado una instancia que pierde toda mi base de datos. ¿Hay alguna manera de recuperarse de esto?
Comprobado si hay tres volúmenes pendientes, y hay pocos
volumen acoplable ls -f colgando = verdadero
Recuperé los datos usando los volúmenes colgantes. El enfoque es el siguiente.
Primero obtenga la lista de volúmenes pendientes.
$ docker volume ls -f dangling=true DRIVER VOLUME NAME local 6f79b6329d98379495a284287e32a7a57605483dd7bf7fa19924fb2a98fb1d19 local 47bb077ef6f6df9f56bd30c35eeb45f35e62213d2c50db6f078bfdeeee6698ecLuego lo montó en un contenedor de Ubuntu (para que pueda ingresar al directorio y verificar qué hay allí, ya que no hay otra forma de hacer esto cuando usa Docker Tool Box en Windows)
$ docker run --name tempContainer1-UBUNTU -v 6f79b6329d98379495a284287e32a7a57605483dd7bf7fa19924fb2a98fb1d19:/var/lib/backup -t -i ubuntu /bin/bashEntonces estarás dentro de la fiesta del contenedor recién creado. Vaya al directorio recién montado y verifique el contenido
$cd /var/lib/backup $ls $aria_log.00000001 aria_log_control ib_buffer_pool ib_logfile0 ib_logfile1 ibdata1 ibtmp1 multi-master.info mysql performance_schema -- once you are sure directory data is what you require, make a zip file of the folder $apt-get update $apt-get install zip $cd .. $zip -r backup.zip backupEn otro terminal desde el host, copie el contenido del contenedor backup.zip al host
$docker cp tempContainer1-UBUNTU:/var/lib/backup.zip .A continuación, cree un archivo de composición acoplable como el siguiente y monte la carpeta de copia de seguridad como directorio de datos. Ejecute esto en el host de Linux, ya que este montaje no funcionará como se esperaba para mysql en Windows.
version: "3.2" services: mysql: image: mariadb:10.4.12 restart: always ports: - "3306:3306" command: mysqld --innodb-flush-method=littlesync --innodb-use-native-aio=ON --log_bin=ON volumes: - ./backup_data_folder:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: somepassword TZ: Asia/Singapore networks: - frontend container_name: maria networks: frontend:Comienzo
$docker-compose upUna vez que esté arriba, desde otra terminal, ingrese al contenedor recién creado
$docker exec -t -i maria /bin/bash -- Take dump of all the DBS $mysqldump -u root -p --all-databases > alldb.sqlCopie el contenido del volcado al host desde otro terminal desde el host
$docker cp maria:/alldb.sql .Ahora este archivo sql es un volcado completo, restáurelo como de costumbre en su base de datos mysql o contenedor.
mysql -u root -p < alldb.sqlRecientemente tuve que enfrentar el mismo problema por un contenedor de wordpress perdido y seguí las instrucciones de Don. Sin embargo, como había muchos volúmenes pendientes, tuve que optimizar el proceso. Logré una forma de hacerlo más simple, en la misma terminal, lo que resultó en los siguientes pasos:
docker volume ls -f dangling=true DRIVER VOLUME NAME local 43277666c8bc3da0b585d90952c2303226c92c6c6a561007c0c7ee00b6da817e local 4fde3ea412e54a1b8b42fce6dae5de5135b9fd12933b020b43bd482cd5fd2225 local 52074ccfd62fb83b8b40cff5f8024215b34f79ad09b630e067ec732f811f798c ... Luego, para cada contenedor, ejecute la siguiente instrucción, reemplazando 43277666c8bc3d... con cada NOMBRE DE VOLUMEN encontrado. Esta instrucción eliminará los contenedores maria-restore anteriores, si existen, creará uno nuevo y lo adjuntará:
docker container ls -a -q --filter "name=maria-restore" && docker container rm -f maria-restore; docker run --name maria-restore -v 43277666c8bc3da0b585d90952c2303226c92c6c6a561007c0c7ee00b6da817e:/var/lib/mysql -d mariadb:10.4.12 mysqld --innodb-flush-method=littlesync --innodb-use-native-aio=ON --log_bin=ON && docker exec -it maria-restore bashSi no era un volumen mysql, fallará y saldrá inmediatamente. Si es un volumen mysql, estará dentro del contenedor mariadb. La base de datos ya estará iniciada. Luego puede conectarse a la base de datos para ver si es la correcta y hacer una copia de seguridad:
root@8b35c8e2c474:/# mysql -uadmin -p root@8b35c8e2c474:/# mysqldump -uadmin -p --all-databases > alldb.sql root@8b35c8e2c474:/# exitCopie la base de datos respaldada:
docker cp mysql-restore:/alldb.sql . Finalmente tendrás que limpiar el contenedor maria-restore :
docker container ls -a -q --filter "name=maria-restore" && docker container rm -f maria-restore