Idea baz danych jest prosta co nie oznacza, że podczas pracy jako administrator lub webmaster nie natrafimy na problemy. Czasem ogranicza nas hosting, niewydajny kod aplikacji ale często jest to też nasza nieuwaga. W tym krótkim artykule przedstawię najczęstsze problemy związane z bazami danych (najczęściej MySQL) i proste techniki jak obejść lub rozwiązać problemy.

Problem: Plik SQL jest zbyt duży

Źródłem awarii może być zarówno ograniczenie wielkości pliku przy imporcie a także limit czasu wykonywania w środowisku PHP. Konieczność wykonania importu stosunkowo dużego pliku SQL może być też problematyczne jeżeli z jakichś powodów nie dysponujemy szybkim łączem.

Rozwiązanie:

Jeżeli problemem jest wielkość pliku, wystarczy spakować plik za pomocą zip lub gzip. Aplikacja phpMyAdmin zaakceptuje rozszerzenie sql.zip lub sql.gz i taki import nie powinien być problematyczny. Tak samo możemy poczynić przy imporcie wykonywanym w konsoli (rozpakowując plik SQL przed importem) lub użyć komendy:

unzip -p kopia.sql.zip | mysql -u root -p nazwabazydanych

Jak podzielić duży plik SQL na kilka mniejszych?

Jeżeli problemem jest limit czasu wykonywania i nawet spakowany plik jest stosunkowo duży można go podzielić za pomocą bardzo przydatnej aplikacji SQL Dump Splitter, której autorem jest Philip Lehmann-Böhm: https://www.philiplb.de/sqldumpsplitter3/

Problem: Błędy przy imporcie bazy danych

Parser może zgłaszać problemy związane z indeksami lub po prostu oświadczy nam, że:

MySQL Server has gone away...

Rozwiązanie:

Wszelkie tego typu problemy, które sprawiają wrażenie, że z bazą jest coś nie tak to najczęściej brak dopasowania wersji pomiędzy bazami danych. Problemy takie może powodować import z bazy MySQL 5.6 do 5.7. Wystarczy dostosować wersję MySQL do wersji z jakiej wykonano zrzut bazy danych i import powinien zakończyć się sukcesem.

Problem: nieprawidłowe kodowanie znaków przy zmianie serwera MySQL

To bardzo częsty problem, który może się objawić już przy pierwszych kontaktach z PHP i MySQL. Zakładając że aplikacja PHP a właściwie strona ma poprawnie zadeklarowane kodowanie w znacznikach meta:

<meta charset="utf-8">

lub w samym PHP wysyłamy nagłówek:

<?php header('Content-Type: text/html; charset=utf-8'); ?>

Rozwiązanie:

Zadbaj aby przed importem obie bazy danych miały standardowe kodowanie:

ALTER DATABASE nazwa_bazy CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

W instrukcji, która łączy się z bazą użyj następującej instrukcji SET NAMES 'utf8′:

$dbconn = mysqli_connect($dbhost,$dbuser,$dbpass) or die ("Nie można się połączyć z bazą danych");
mysqli_query($dbconn, "SET NAMES 'utf8'");
mysqli_select_db($dbconn, $dbname) or die("Błąd");

Problem: Baza danych szybko rośnie

Duża baza danych może powodować problemy o jakich pisałem w pierwszym punkcie. Czasem warto zapobiegać nadmiernemu rozrostowi bazy danych.

Rozwiązanie:

Zidentyfikuj, które tabele zajmują najwięcej miejsca i spróbuj je odchudzić. Wiele aplikacji przechowuje dane o każdym połączeniu w bazie danych. Logi, dane statyczne czy cache o znacznych rozmiarach często są przechowywane w stosunkowo szybkiej pamięci baz danych. Usuń lub opróżnij tabele lub wyłącz funkcjonalności, które powodują zapis danych, z których i tak nie korzystasz.

Problem: baza danych nie działa lub działa wolno przy dużym ruchu

Coraz większy ruch wymaga coraz większych zasobów sprzętowych niezależnie czy mamy do czynienia z serwerem HTTP czy jednostką/infrastrukturą obsługującą bazę danych. Sukcesem jest co najwyżej liniowy wzrost kosztów w stosunku do obsługiwanego ruchu.

Rozwiązanie:

Serwer MySQL posiada sztywne limity jednoczesnych połączeń na użytkownika aby nie doszło do całkowitego zablokowania jego działania w przypadku nadmiernej ilości zapytań. Zmiana podstawowych parametrów działania bazy możne znacznie poprawić jej wydajność jednak parametry te zawsze powinny być dobierane do możliwości sprzętowych. Jeżeli administrujesz serwerem MySQL zapoznaj się z popularnym skryptem: https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl

Powolnie działanie może być też przyczyną braku indeksów, tym bardziej jeżeli jest to „autorska” aplikacja a nie gotowe rozwiązanie CMS. Do pewnego momentu możemy optymalizować bazę danych, tym bardziej że wiele problemów ujawnia się w miarę przybywania rekordów. Ostatecznie jednak zawsze będziemy musieli zmierzyć się z problemem skalowania infrastruktury. W czasach niedrogich serwerów VPS i dopracowanych chmur obliczeniowych istnieje wiele rozwiązań, o których możesz przeczytać w osobnym artykule: skalowanie baz danych.

Oceń artykuł na temat: Najczęstsze problemy z bazami MySQL i ich rozwiązania
Średnia : 4.5 , Maksymalnie : 5 , Głosów : 2