Najszybszy sposob na migracje baz danych MySQL na inny serwer za pomoca Mysqldump

Migracja bazy danych MySQL na inny serwer może być wyzwaniem, zwłaszcza gdy zależy ci na minimalnym czasie przestoju i wysokiej wydajności.

Jednym z najpopularniejszych narzędzi do realizacji tego zadania jest mysqldump – narzędzie dostarczane przez MySQL do tworzenia kopii zapasowych i przywracania baz danych. W tym artykule pokażemy ci, jak używać mysqldump do migracji bazy danych oraz jak stworzyć skrypt automatyzujący ten proces.

Migracja baz danych MySQL na inny serwer i klonowanie danych.

Wymagania wstępne

  • Serwery źródłowy i docelowy z zainstalowanym MySQL
  • Dane logowania roota MySQL lub konto z odpowiednimi uprawnieniami na obu serwerach
  • Dostęp SSH do obu serwerów lub serwer DB musi zezwalać na połączenia przychodzące (jeśli nie znajduje się na tej samej maszynie)

Eksportowanie bazy danych za pomocą mysqldump

Pierwszym krokiem w procesie migracji jest utworzenie kopii zapasowej źródłowej bazy danych. Użyjemy do tego mysqldump. Mysqldump tworzy skrypt SQL zawierający wszystkie polecenia niezbędne do odtworzenia struktury bazy danych i danych na serwerze docelowym.

Zaloguj się do serwera źródłowego i uruchom następujące polecenie, aby utworzyć skompresowaną kopię zapasową bazy danych:

bash
mysqldump -u [username] -p --single-transaction --extended-insert --quick --lock-tables=false [database_name] | gzip > [backup_file].sql.gz

Zastąp [username], [database_name] i [backup_file] odpowiednio swoją nazwą użytkownika MySQL, nazwą bazy danych, którą chcesz zmigrować, oraz pożądaną nazwą pliku kopii zapasowej.

To polecenie używa flagi --single-transaction, aby zapewnić spójność danych, --quick w celu zmniejszenia użycia pamięci oraz –lock-tables=false, aby uniknąć blokowania tabel podczas eksportu.

Najważniejszym parametrem jest –extended-insert. Sprawi on, że import wyeksportowanego pliku SQL na serwerze docelowym będzie od 10 do 15 razy szybszy.

Przesyłanie pliku kopii zapasowej na serwer docelowy

Po utworzeniu kopii zapasowej możesz zaimportować ją na drugi serwer bazy danych.

  • Skopiuj skompresowany plik gzip na serwer i zaimportuj go
  • Rozpakuj plik i załaduj go do MySQL przez SSH na serwerze DB

Aby przesłać go na serwer docelowy, możesz użyć narzędzia takiego jak SCP, SFTP lub rsync. Na przykład przy użyciu SCP:

bash
scp [backup_file].sql.gz [destination_user]@[destination_ip]:/path/to/destination

Zastąp [backup_file], [destination_user], [destination_ip] i /path/to/destination odpowiednimi wartościami.

Importowanie bazy danych na serwerze docelowym

Po przesłaniu pliku kopii zapasowej zaloguj się do serwera docelowego i uruchom następujące polecenie, aby zaimportować bazę danych:

bash
gunzip < [backup_file].sql.gz | mysql -u [username] -p [database_name]

Zastąp [username], [database_name] i [backup_file] odpowiednio swoją nazwą użytkownika MySQL, nazwą bazy danych, którą chcesz zmigrować, oraz nazwą pliku kopii zapasowej.

Pobieranie skryptu migracji bazy danych

Aby zautomatyzować proces migracji bazy danych MySQL, możesz użyć tego skryptu bash, którego użyliśmy tutaj na wp-staging.com do migracji naszej bazy danych do zarządzanej DB hostowanej na DigitalOcean. (Nie jest już używany, ponieważ WP Staging może teraz wykonywać migrację bazy danych):

bash
#!/bin/sh
# migrate.sh

sourceUser=""
sourcePassword=""
sourceHostname=""
sourcePort=""
sourceDatabase=""

destinationUser=""
destinationPassword=""
destinationHostname=""
destinationPort=""
destinationDatabase=""

echo "Exporting $sourceDatabase database to ./wp-staging.com.sql"

start_export=`date +%s`

mysqldump -P $sourcePort -h $sourceHostname -u $sourceUser  -p$sourcePassword --set-gtid-purged=OFF --extended-insert --single-transaction --skip-lock-tables --column-statistics=0 $sourceDatabase > ./wp-staging.com.sql

# Done creating a dump of wp-staging.com

end_export=`date +%s`

echo "Database exported in" $((end_export-start_export)) "seconds"

echo "Importing Database to... "

start_import=`date +%s`

mysql -u $destinationUser -p$destinationPassword -h $destinationHostname -P $destinationPort $destinationDatabase < ./wp-staging.com.sql

# Done importing the dump to managed db

end_import=`date +%s`

echo "Database imported in" $((end_import-start_import)) "seconds"

echo "Total runtime: " $((end_export-start_export+end_import-start_import)) "seconds"

Zastąp wartości danych logowania bazy danych na górze pliku odpowiednimi informacjami dla swoich źródłowych i docelowych baz danych.

Przed uruchomieniem skryptu upewnij się, że źródłowa i docelowa baza danych są dostępne.

Następnie nadaj skryptowi uprawnienia do wykonywania:

bash
chmod +x migrate.sh

Uruchom skrypt, aby przeprowadzić migrację:

bash
./migrate.sh

Skrypt ten eksportuje źródłową bazę danych za pomocą mysqldump, importuje bazę danych na serwer docelowy za pomocą polecenia mysql, a następnie sprząta, usuwając plik kopii zapasowej.

Powiązane artykuły

Rene Hermenau

Autor: Rene Hermenau

O autorze: René Hermenau jest założycielem WP STAGING. Zajmuje się kopiami zapasowymi WordPressa, środowiskami stagingowymi, migracjami, obsługą baz danych oraz bezpiecznymi procesami wdrażania.