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.

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)
Contents
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:
mysqldump -u [username] -p --single-transaction --extended-insert --quick --lock-tables=false [database_name] | gzip > [backup_file].sql.gzZastą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:
scp [backup_file].sql.gz [destination_user]@[destination_ip]:/path/to/destinationZastą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:
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):
#!/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:
chmod +x migrate.shUruchom skrypt, aby przeprowadzić migrację:
./migrate.shSkrypt 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
- Migracja witryny WordPress na inny host
- Referencja poleceń Linux i Docker oraz rozwiązywanie problemów
- Jak utworzyć stronę staging i sklonować WordPressa
- Jak usunąć wszystkie zamówienia WooCommerce i dane klientów na stronie staging | Usuwanie transakcji WooCommerce
- Jak zmigrować WordPressa na nowy serwer