Mam na serwerze kontener Dockera z bazą danych mysql.
Potrzebuje utworzyć skrypt który co 30 minut będzie tworzy kopie bazy danych 'produkcja' do bazy "produkcjaKopia"
Czat podpowiada takie rozwiązanie:
#!/bin/bash
CONTAINER_NAME="nazwa_kontenera"
DB_SOURCE="produkcja"
DB_TARGET="produkcjaKopia"
DB_USER="user"
DB_PASS="haslo"
TMP_SQL="/tmp/produkcja.sql"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] --- START kopiowania bazy $DB_SOURCE ---"
# Dump całej bazy
echo "Tworzenie dumpa..."
docker exec -i $CONTAINER_NAME mysqldump -u $DB_USER -p$DB_PASS $DB_SOURCE > $TMP_SQL
# Usuń starą bazę i stwórz nową
echo "Tworzenie nowej bazy docelowej..."
docker exec -i $CONTAINER_NAME mysql -u $DB_USER -p$DB_PASS -e "DROP DATABASE IF EXISTS $DB_TARGET; CREATE DATABASE $DB_TARGET;"
# Import dumpa
echo "Import dumpa..."
docker exec -i $CONTAINER_NAME mysql -u $DB_USER -p$DB_PASS $DB_TARGET < $TMP_SQL
# Czyszczenie dumpa
rm -f $TMP_SQL
echo "[$(date '+%Y-%m-%d %H:%M:%S')] --- Kopiowanie bazy zakończone ---"
I to działa, jednak jest dosyć wolne a baza danych produkcjaKopia podpięta jest pod panel i w trakcie wykonywania kopi panel jest niedostępny przez kilkanaście sekund.
Kombinowałem aby najpierw przenosić dane do tabeli tymczasowej produkcjaKopiaTmp potem usunąć produkcjaKopia i zmienić nazwę produkcjaKopiaTmp na produkcjaKopia.
Jednak MySql nie pozwala na taką zmianę chociaż w phpMyAdmin jest taka opcja "Rename database to" i działa ona bardzo szybko.
Czy ktoś wie jak phpMyAdmin to robi? ewentualnie jak to można zrobić inaczej aby nie blokować dostępu do panelu?
Baza ma około 800 mega