MySQL Dump oraz MySQL Import dla dużych zbiorów danych

Przydatne rozwiązanie na tworzenie zrzutu dużego zbioru danych z bazy MySQL oraz przywracanie go za pomocą wbudowanego narzędzia mysqldump oraz mysql.

W większości projektów w których mam przyjemność pracować, wykorzystywana jest relacyjna baza danych MySQL. Niektóre z baz osiągają rozmiary kilku GB i odtwarzanie ich stanu na lokalnym środowisku wymaga pewnej gimnastyki. Narzędzia GUI wspierające zarządzanie bazą danych oferują importowanie oraz eksportowanie jej zawartości. Jednak zaimplementowane mechanizmy (m.in. narzędzie MySQL Dump) niejednokrotnie nie potrafią poradzić sobie z dużym rozmiarem przetwarzanych danych.

Eksport takich baz danych realizuję za pomocą dostarczanego z MySQL narzędzia MySQL Dump. Import natomiast oparty jest o przełączenie standardowego wejścia (stdin) na sczytanie danych z pliku. Idealnie radzi sobie z tym po prostu konsolowa aplikacja MySQL.

Poniżej zamieszczam kilka najczęściej używanych poleceń obsługujących import oraz eksport poszczególnych baz danych jak i również wybranych tabel.

Tworzenie zrzutu bazy danych – MySQL Dump

Dla wybranej/wybranych bazy danych:

$: mysqldump -h[host] -u[user] -p[password] [database] > [backup_file]

$: mysqldump -hlocalhost -uroot -phaslo baza_cms > baza_cms_backup.sql
$: mysqldump -h[host] -u[user] -p[password] --databases [database1] [database2] [database3] > [backup_file]

$: mysqldump -hlocalhost -uroot -phaslo --databases baza_cms baza_cmr baza_erp > dbs_backup.sql

Dla wszystkich baz danych użytkownika:

$: mysqldump -h[host] -u[user] -p[password] --all-databases > [backup_file]

$: mysqldump -hlocalhost -uroot -phaslo --all-databases > full_backup.sql

Dla wybranej tabeli w bazie danych:

$: mysqldump -h[host] -u[user] -p[password] [database] [table] > [backup_file]

$: mysqldump -hlocalhost -uroot -phaslo baza_cms artykuly > baza_cms_artykuly_backup.sql

Przywracanie zrzutu bazy danych – MySQL Import

Dla wszystkich baz danych użytkownika:

$: mysql -h[host] -u[user] -p[password] < [backup_file]

$: mysql -hlocalhost -uroot -phaslo < full_backup.sql

Dla wybranej bazy danych:

$: mysql -h[host] -u[user] -p[password] [database] < [backup_file]

$: mysql -hlocalhost -uroot -phaslo baza_cms < baza_cms_backup.sql

lub:

$: mysql -h[host] -u[user] -p[password]
$: use [database];
$: \. db_backup.sql

Należy pamiętać, że operacja ta zadziała tylko jeśli wskazana baza danych została wcześniej stworzona.

Problemy

Podczas eksportu danych, często natrafiam na problem zablokowanej tabeli. Jego rozwiązanie zamieszczam poniżej.

Error 1016 „LOCK TABLES” – Podczas eksportowania bazy danych do pliku

Komunikat:

Error: MySQL - mysqldump: Got error: 1016: Can't open file: './exampledb/xxx.frm' (errno: 24) when using LOCK TABLES

Rozwiązanie:

Należy dodać parametr --lock-tables=false do uruchamianego polecenia mysqldump.

Na co dzień programujący CTO w Emphie Solutions. Projektuje, tworzy oraz wdraża rozwiązania oparte o ekosystem JavaScript. Rozwija swoje umiejętności z zakresu Cloud / DevOps / SRE. Fascynat programowania, architektury, chmury i dobrych praktyk w szerokim ujęciu. Na temat technologii publikuje materiały w ramach projektu DevEnv, którego jest założycielem.
PODZIEL SIĘ