🐬 Jak zainstalować MySQL na Ubuntu 20.04

MySQL to jeden z najpopularniejszych systemów zarządzania relacyjnymi bazami danych na świecie. Jego instalacja i właściwa konfiguracja na serwerze Ubuntu 20.04 stanowi podstawę dla wielu aplikacji webowych, systemów CMS czy projektów e-commerce. W tym poradniku przeprowadzimy Cię przez cały proces - od instalacji, przez konfigurację, aż po podstawowe zabezpieczenia.

⚡ Ekspresowe Podsumowanie:

  1. Instalacja MySQL: Aktualizacja repozytoriów i instalacja pakietu mysql-server przez apt.
  2. Wstępna konfiguracja: Uruchomienie skryptu mysql_secure_installation do podstawowego zabezpieczenia.
  3. Zarządzanie użytkownikami: Tworzenie nowych użytkowników i nadawanie odpowiednich uprawnień.
  4. Optymalizacja i dostrajanie: Konfiguracja zasobów i wydajności do potrzeb Twojego projektu.

🗺️ Spis Treści - Twoja Mapa Drogowa


📚 Przygotowanie do instalacji MySQL

Przed rozpoczęciem instalacji MySQL, upewnij się, że Twój system jest zaktualizowany i ma wszystkie niezbędne zależności.

Aktualizacja systemu

Pierwszym krokiem powinna być aktualizacja listy pakietów i zainstalowanych komponentów:

sudo apt update
sudo apt upgrade -y

Sprawdzenie wymagań systemowych

Minimalne wymagania dla MySQL 8.0 na Ubuntu 20.04:

  • Procesor: 1 GHz lub szybszy
  • Pamięć RAM: minimum 1 GB (zalecane 2 GB lub więcej)
  • Miejsce na dysku: 5 GB (dla instalacji i podstawowych baz danych)

Aby sprawdzić zasoby swojego serwera:

# Informacje o procesorze
lscpu

# Dostępna pamięć RAM
free -h

# Dostępne miejsce na dysku
df -h

Weryfikacja, czy MySQL jest już zainstalowany

Przed instalacją warto sprawdzić, czy MySQL nie jest już obecny w systemie:

dpkg -l | grep mysql

Jeśli widzisz wyniki wskazujące na zainstalowane pakiety MySQL, możesz przejść do sekcji konfiguracji lub, jeśli chcesz rozpocząć od nowa, usunąć istniejącą instalację:

sudo apt purge mysql-*
sudo apt autoremove
sudo apt autoclean

Uwaga: Usunięcie MySQL spowoduje skasowanie wszystkich baz danych. Jeśli masz ważne dane, upewnij się, że wykonałeś ich kopię zapasową przed usunięciem.

💿 Instalacja serwera MySQL

Instalacja pakietu mysql-server

Instalacja MySQL na Ubuntu 20.04 jest prosta dzięki repozytoriom APT:

sudo apt install mysql-server -y

Ta komenda zainstaluje najnowszą wersję MySQL dostępną w oficjalnych repozytoriach Ubuntu, co zazwyczaj oznacza MySQL 8.0.

Weryfikacja statusu i wersji

Po zakończeniu instalacji, warto sprawdzić, czy MySQL działa poprawnie:

# Sprawdzenie statusu usługi
sudo systemctl status mysql

# Sprawdzenie zainstalowanej wersji
mysql --version

Powinieneś zobaczyć informację o statusie "active (running)" oraz numer wersji (np. 8.0.XX).

Włączenie automatycznego startu

Aby upewnić się, że MySQL uruchomi się automatycznie po restarcie systemu, wykonaj:

sudo systemctl enable mysql

✨ Pro Tip: W Ubuntu 20.04, usługa MySQL jest już domyślnie skonfigurowana do automatycznego uruchamiania, więc ten krok może być redundantny, ale warto to potwierdzić.

🔐 Podstawowa konfiguracja bezpieczeństwa

Po instalacji MySQL, kolejnym krokiem jest zabezpieczenie instalacji przed potencjalnymi zagrożeniami.

Uruchomienie skryptu mysql_secure_installation

MySQL dostarcza wbudowany skrypt, który przeprowadza przez podstawowe kroki zabezpieczenia:

sudo mysql_secure_installation

Skrypt przeprowadzi Cię przez kilka konfiguracji:

  1. Walidacja hasła - możesz włączyć wtyczkę walidacji, która wymusza silne hasła
  2. Ustawienie hasła roota - ustaw silne hasło dla użytkownika root
  3. Usunięcie anonimowych użytkowników - zwiększa bezpieczeństwo, eliminując niezabezpieczone konta
  4. Wyłączenie zdalnego logowania roota - zapobiega logowaniu się jako root z zewnętrznych hostów
  5. Usunięcie testowej bazy danych - usuwa domyślną bazę danych testową
  6. Przeładowanie tabel uprawnień - zastosowuje wszystkie wprowadzone zmiany

Zalecamy odpowiedzieć "Y" (tak) na wszystkie pytania, aby maksymalnie zwiększyć bezpieczeństwo.

Logowanie do MySQL z uprawnieniami root

W Ubuntu 20.04, MySQL jest domyślnie skonfigurowany do używania uwierzytelniania auth_socket dla roota, co oznacza, że możesz zalogować się bez hasła, jeśli jesteś zalogowany jako użytkownik root:

sudo mysql

Jeśli wolisz używać hasła do logowania jako root, możesz zmienić metodę uwierzytelniania:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'twoje_silne_haslo';
FLUSH PRIVILEGES;
EXIT;

Po tej zmianie możesz logować się jako root z hasłem:

mysql -u root -p

Podstawowa weryfikacja instalacji

Po zalogowaniu, wykonaj kilka prostych poleceń, aby upewnić się, że MySQL działa poprawnie:

-- Wyświetl dostępne bazy danych
SHOW DATABASES;

-- Sprawdź wersję i status serwera
SELECT VERSION();
STATUS;

-- Wyjdź z konsoli MySQL
EXIT;

👥 Zarządzanie użytkownikami i uprawnieniami

Dla większości zastosowań, nie powinieneś używać konta root do codziennej pracy. Zamiast tego, utwórz dedykowanych użytkowników z odpowiednimi uprawnieniami.

Tworzenie nowego użytkownika

Zaloguj się jako root i wykonaj:

-- Utwórz nowego użytkownika, zastąp username i password własnymi wartościami
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

-- Alternatywnie, aby umożliwić dostęp z dowolnego hosta
CREATE USER 'username'@'%' IDENTIFIED BY 'password';

Nadawanie uprawnień

W MySQL możesz precyzyjnie kontrolować, co poszczególni użytkownicy mogą robić:

-- Pełne uprawnienia do konkretnej bazy danych
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'localhost';

-- Tylko odczyt dla konkretnej bazy danych
GRANT SELECT ON database_name.* TO 'username'@'localhost';

-- Uprawnienia do konkretnych tabel
GRANT SELECT, INSERT, UPDATE ON database_name.table_name TO 'username'@'localhost';

-- Po nadaniu uprawnień, przeładuj tabele uprawnień
FLUSH PRIVILEGES;

Sprawdzanie i modyfikacja uprawnień

Aby zobaczyć, jakie uprawnienia ma użytkownik:

SHOW GRANTS FOR 'username'@'localhost';

Aby odebrać uprawnienia:

REVOKE ALL PRIVILEGES ON database_name.* FROM 'username'@'localhost';
FLUSH PRIVILEGES;

Usuwanie użytkowników

Jeśli potrzebujesz usunąć użytkownika:

DROP USER 'username'@'localhost';

✨ Pro Tip: Zawsze stosuj zasadę najmniejszych uprawnień - nadawaj użytkownikom tylko te uprawnienia, które są niezbędne do wykonywania ich zadań. Zwiększa to bezpieczeństwo całego systemu.

🗄️ Tworzenie i zarządzanie bazami danych

Teraz, gdy masz skonfigurowany serwer i utworzonych użytkowników, możesz przejść do tworzenia i zarządzania bazami danych.

Tworzenie nowej bazy danych

-- Utwórz nową bazę danych
CREATE DATABASE nazwa_bazy_danych;

-- Utwórz bazę danych z określonym zestawem znaków (zalecane UTF-8)
CREATE DATABASE nazwa_bazy_danych CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Podstawowe operacje na bazach danych

-- Wyświetl wszystkie bazy danych
SHOW DATABASES;

-- Wybierz bazę danych do pracy
USE nazwa_bazy_danych;

-- Wyświetl tabele w aktualnej bazie danych
SHOW TABLES;

-- Usuń bazę danych (bądź ostrożny!)
DROP DATABASE nazwa_bazy_danych;

Importowanie i eksportowanie danych

Aby zaimportować dane z pliku SQL:

# Z poziomu terminala
mysql -u username -p nazwa_bazy_danych < plik_do_importu.sql

Aby wyeksportować bazę danych do pliku:

# Eksport samej struktury
mysqldump -u username -p --no-data nazwa_bazy_danych > struktura.sql

# Eksport struktury i danych
mysqldump -u username -p nazwa_bazy_danych > pelna_kopia.sql

# Eksport konkretnych tabel
mysqldump -u username -p nazwa_bazy_danych tabela1 tabela2 > wybrane_tabele.sql

⚙️ Konfiguracja wydajności MySQL

Domyślna konfiguracja MySQL jest dość konserwatywna. Dla optymalnej wydajności, warto dostosować ją do dostępnych zasobów i specyfiki obciążenia.

Plik konfiguracyjny MySQL

Główny plik konfiguracyjny MySQL na Ubuntu 20.04 znajduje się w:

/etc/mysql/mysql.conf.d/mysqld.cnf

Aby go edytować:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Kluczowe parametry do optymalizacji

Oto najważniejsze parametry, które warto rozważyć:

Buforowanie zapytań

# Włącz bufor zapytań (0 = wyłączony, 1 = włączony)
query_cache_type = 1

# Rozmiar bufora zapytań (w MB)
query_cache_size = 64M

# Maksymalny rozmiar pojedynczego buforowanego zapytania
query_cache_limit = 2M

Uwaga: W MySQL 8.0 bufor zapytań został usunięty, ponieważ w nowoczesnych, wielowątkowych środowiskach mógł powodować problemy wydajnościowe. Zamiast tego, skorzystaj z innych mechanizmów optymalizacji, takich jak indeksy i buforowanie na poziomie aplikacji.

Bufor InnoDB

# Rozmiar bufora InnoDB (MB) - zwykle 50-80% dostępnej RAM dla dedykowanego serwera
innodb_buffer_pool_size = 1G

# Liczba instancji bufora - zazwyczaj 1 na rdzeń CPU
innodb_buffer_pool_instances = 4

# Sposób czyszczenia bufora dziennika
innodb_flush_method = O_DIRECT

# Rozmiar pliku dziennika
innodb_log_file_size = 256M

Połączenia

# Maksymalna liczba jednoczesnych połączeń
max_connections = 150

# Czas oczekiwania na zamknięcie nieaktywnego połączenia (sekundy)
wait_timeout = 600
interactive_timeout = 600

Zastosowanie zmian i restart serwera

Po wprowadzeniu zmian, zapisz plik i zrestartuj MySQL:

sudo systemctl restart mysql

Weryfikacja zmian

Aby sprawdzić, czy Twoje zmiany zostały zastosowane:

SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SHOW VARIABLES LIKE 'max_connections';
-- inne zmienne, które zmodyfikowałeś

✨ Pro Tip: Nie ma uniwersalnej konfiguracji MySQL. Optymalne ustawienia zależą od typu obciążenia, dostępnych zasobów i specyfiki Twojej aplikacji. Rozpocznij od niewielkich zmian i monitoruj wydajność, stopniowo dostosowując parametry.

🔍 Rozwiązywanie typowych problemów

Nawet przy starannej instalacji i konfiguracji, mogą pojawić się różne problemy. Oto rozwiązania dla najczęstszych z nich:

Problem 1: MySQL nie uruchamia się

Objawy: Komenda systemctl status mysql pokazuje błąd lub stan "inactive".

Rozwiązania:

  1. Sprawdź logi:

    sudo tail -f /var/log/mysql/error.log
  2. Sprawdź dostępne miejsce na dysku:

    df -h
  3. Sprawdź konflikty portów:

    sudo netstat -tuln | grep 3306
  4. Napraw uszkodzone tabele:

    sudo mysqlcheck --all-databases --check --repair

Problem 2: Problemy z połączeniem

Objawy: Nie możesz połączyć się z MySQL, otrzymujesz błąd "Access denied" lub "Connection refused".

Rozwiązania:

  1. Sprawdź, czy MySQL nasłuchuje na właściwym adresie:

    sudo netstat -tuln | grep 3306

    Powinno pokazać 0.0.0.0:3306 lub *:3306 dla połączeń z dowolnego adresu.

  2. Sprawdź, czy konfiguracja pozwala na zdalne połączenia: Upewnij się, że w pliku konfiguracyjnym MySQL nie ma bind-address = 127.0.0.1, lub zmień na bind-address = 0.0.0.0.

  3. Sprawdź ustawienia zapory:

    sudo ufw status

    Jeśli zapora jest aktywna, dodaj regułę:

    sudo ufw allow 3306/tcp
  4. Zresetuj hasło roota (w ostateczności):

    # Zatrzymaj MySQL
    sudo systemctl stop mysql
    
    # Uruchom w trybie bezpiecznym
    sudo mysqld_safe --skip-grant-tables &
    
    # Połącz się bez hasła
    mysql -u root
    
    # Zmień hasło
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'nowe_haslo';
    FLUSH PRIVILEGES;
    EXIT;
    
    # Zatrzymaj bezpieczny tryb i uruchom normalnie
    sudo kill `cat /var/run/mysqld/mysqld.pid`
    sudo systemctl start mysql

Problem 3: Błędy uprawnień

Objawy: Użytkownik nie może wykonać określonych operacji, mimo nadanych uprawnień.

Rozwiązania:

  1. Sprawdź aktualne uprawnienia:

    SHOW GRANTS FOR 'user'@'host';
  2. Nadaj brakujące uprawnienia:

    GRANT [uprawnienie] ON database_name.* TO 'user'@'host';
    FLUSH PRIVILEGES;
  3. Sprawdź, czy użytkownik łączy się z właściwego hosta: Uprawnienia są przypisane do kombinacji użytkownik@host. Jeśli łączysz się z innego hosta niż zdefiniowany, nie będziesz mieć uprawnień.

Problem 4: Problemy z wydajnością

Objawy: Wolne zapytania, wysokie obciążenie serwera.

Rozwiązania:

  1. Identyfikuj wolne zapytania:

    SHOW PROCESSLIST;
  2. Włącz logowanie wolnych zapytań:

    # W pliku mysqld.cnf
    slow_query_log = 1
    slow_query_log_file = /var/log/mysql/mysql-slow.log
    long_query_time = 2  # sekundy
  3. Analizuj wykonanie zapytań:

    EXPLAIN SELECT * FROM twoja_tabela WHERE...;
  4. Optymalizuj indeksy:

    SHOW INDEX FROM twoja_tabela;
    CREATE INDEX nazwa_indeksu ON twoja_tabela (kolumna);

🔄 Regularna konserwacja MySQL

Aby utrzymać Twój serwer MySQL w dobrej kondycji, warto regularnie wykonywać zadania konserwacyjne.

Automatyczne kopie zapasowe

Stwórz skrypt do regularnego wykonywania kopii zapasowych:

#!/bin/bash
# Plik: /usr/local/bin/backup_mysql.sh

# Zmienne konfiguracyjne
BACKUP_DIR="/var/backups/mysql"
DATE=$(date +%Y-%m-%d_%H-%M-%S)
MYSQL_USER="backup_user"
MYSQL_PASSWORD="silne_haslo"

# Upewnij się, że katalog kopii zapasowych istnieje
mkdir -p $BACKUP_DIR

# Utwórz pełną kopię wszystkich baz danych
mysqldump --user=$MYSQL_USER --password=$MYSQL_PASSWORD --all-databases | gzip > $BACKUP_DIR/all_databases_$DATE.sql.gz

# Usuń kopie zapasowe starsze niż 30 dni
find $BACKUP_DIR -name "*.sql.gz" -type f -mtime +30 -delete

Nadaj uprawnienia do wykonywania i dodaj do crona:

sudo chmod +x /usr/local/bin/backup_mysql.sh
sudo crontab -e

Dodaj linię, aby wykonywać kopię zapasową codziennie o 3:00 rano:

0 3 * * * /usr/local/bin/backup_mysql.sh >/dev/null 2>&1

Optymalizacja i naprawianie tabel

Regularnie sprawdzaj i optymalizuj tabele, aby utrzymać optymalną wydajność:

#!/bin/bash
# Plik: /usr/local/bin/optimize_mysql.sh

# Zmienne konfiguracyjne
MYSQL_USER="maintenance_user"
MYSQL_PASSWORD="silne_haslo"
LOG_FILE="/var/log/mysql_optimize.log"

echo "Rozpoczęcie optymalizacji: $(date)" >> $LOG_FILE

# Sprawdź i napraw wszystkie tabele
mysqlcheck --user=$MYSQL_USER --password=$MYSQL_PASSWORD --auto-repair --optimize --all-databases >> $LOG_FILE 2>&1

echo "Zakończenie optymalizacji: $(date)" >> $LOG_FILE

Dodaj do crona, aby wykonywać optymalizację raz w tygodniu:

0 2 * * 0 /usr/local/bin/optimize_mysql.sh

Monitorowanie serwera MySQL

Monitorowanie jest kluczowe dla wykrywania problemów, zanim staną się krytyczne:

  1. Podstawowe monitorowanie za pomocą wbudowanych narzędzi:

    -- Sprawdź status serwera
    SHOW STATUS;
    
    -- Sprawdź zmienne konfiguracyjne
    SHOW VARIABLES;
    
    -- Sprawdź aktywne procesy
    SHOW PROCESSLIST;
  2. Zaawansowane monitorowanie z narzędziami zewnętrznymi:

🏁 Podsumowanie - MySQL jest gotowy do pracy!

Poprawnie zainstalowany i skonfigurowany MySQL na Ubuntu 20.04 stanowi solidną podstawę dla Twoich aplikacji i systemów bazodanowych. W tym poradniku przeprowadziliśmy Cię przez cały proces:

  1. Instalację MySQL - od przygotowania systemu po pierwsze uruchomienie
  2. Podstawową konfigurację bezpieczeństwa - zabezpieczenie instalacji przed nieautoryzowanym dostępem
  3. Zarządzanie użytkownikami i uprawnieniami - tworzenie dedykowanych kont z odpowiednimi uprawnieniami
  4. Tworzenie i zarządzanie bazami danych - podstawowe operacje na bazach danych
  5. Optymalizację wydajności - dostrajanie konfiguracji do Twoich potrzeb
  6. Rozwiązywanie typowych problemów - diagnostyka i naprawa najczęstszych usterek
  7. Regularną konserwację - automatyzacja kopii zapasowych i optymalizacji

Pamiętaj, że MySQL to potężne narzędzie, które może obsługiwać zarówno proste strony, jak i złożone aplikacje korporacyjne. Regularnie aktualizuj swoją wiedzę i dostosowuj konfigurację do zmieniających się potrzeb.

✅ Twoja Checklista MySQL:

  • 🔄 Regularnie aktualizuj MySQL do najnowszej wersji
  • 🔒 Używaj silnych haseł i ograniczaj uprawnienia użytkowników
  • 📊 Monitoruj wykorzystanie zasobów i wydajność
  • 💾 Twórz regularne kopie zapasowe wszystkich ważnych baz danych
  • 🔍 Optymalizuj zapytania i strukturę baz danych
  • 📝 Utrzymuj dokumentację konfiguracji i zmian

🚀 Potrzebujesz profesjonalnego hostingu z obsługą MySQL?

Sprawdź nasze plany hostingowe z optymalizowanym MySQL

W IQHost oferujemy nie tylko niezawodne serwery z MySQL, ale także profesjonalne wsparcie techniczne, które pomoże Ci w optymalizacji i rozwiązywaniu problemów. Nasze środowiska hostingowe są specjalnie dostrojone, aby zapewnić maksymalną wydajność dla Twoich baz danych.

❓ FAQ - Odpowiedzi na Twoje Pytania

Czy mogę używać MySQL i MariaDB równocześnie na tym samym serwerze?
Technicznie jest to możliwe, ale wymaga zaawansowanej konfiguracji i użycia niestandardowych portów. Generalnie nie jest to zalecane, ponieważ może prowadzić do konfliktów i problemów z kompatybilnością.

Jak sprawdzić, czy MySQL wykorzystuje wszystkie dostępne zasoby?
Użyj polecenia htop lub top w terminalu, aby zobaczyć wykorzystanie CPU i RAM przez proces MySQL. Możesz także użyć zapytania SHOW ENGINE INNODB STATUS; aby uzyskać szczegółowe informacje o wydajności silnika InnoDB.

Jaka jest różnica między MySQL a MariaDB?
MariaDB to fork MySQL stworzony po przejęciu MySQL przez Oracle. Są kompatybilne w większości przypadków, ale MariaDB dodaje niektóre funkcje i ulepszenia, których nie ma w MySQL. W Ubuntu, komenda apt install mysql-server może czasem instalować MariaDB zamiast MySQL.

Jak zmienić domyślny port MySQL?
Edytuj plik konfiguracyjny MySQL (/etc/mysql/mysql.conf.d/mysqld.cnf), znajdź linię port = 3306 i zmień ją na wybrany port. Następnie zrestartuj MySQL: sudo systemctl restart mysql.

Czy MySQL 8.0 jest zgodny wstecznie z aplikacjami napisanymi dla starszych wersji?
Generalnie tak, ale istnieją pewne niekompatybilności, szczególnie związane z domyślnym mechanizmem uwierzytelniania (zmienił się z mysql_native_password na caching_sha2_password), co może wymagać dodatkowej konfiguracji dla starszych klientów.

Czy ten artykuł był pomocny?

Wróć do listy wpisów

Twoja strona WordPress działa wolno?

Sprawdź nasz hosting WordPress z ultraszybkimi dyskami NVMe i konfiguracją serwera zoptymalizowaną pod kątem wydajności. Doświadcz różnicy już dziś!

Sprawdź ofertę hostingu
30-dniowa gwarancja zwrotu pieniędzy