🐬 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:
- Instalacja MySQL: Aktualizacja repozytoriów i instalacja pakietu
mysql-server
przez apt. - Wstępna konfiguracja: Uruchomienie skryptu
mysql_secure_installation
do podstawowego zabezpieczenia. - Zarządzanie użytkownikami: Tworzenie nowych użytkowników i nadawanie odpowiednich uprawnień.
- 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:
- Walidacja hasła - możesz włączyć wtyczkę walidacji, która wymusza silne hasła
- Ustawienie hasła roota - ustaw silne hasło dla użytkownika root
- Usunięcie anonimowych użytkowników - zwiększa bezpieczeństwo, eliminując niezabezpieczone konta
- Wyłączenie zdalnego logowania roota - zapobiega logowaniu się jako root z zewnętrznych hostów
- Usunięcie testowej bazy danych - usuwa domyślną bazę danych testową
- 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:
-
Sprawdź logi:
sudo tail -f /var/log/mysql/error.log
-
Sprawdź dostępne miejsce na dysku:
df -h
-
Sprawdź konflikty portów:
sudo netstat -tuln | grep 3306
-
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:
-
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. -
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ń nabind-address = 0.0.0.0
. -
Sprawdź ustawienia zapory:
sudo ufw status
Jeśli zapora jest aktywna, dodaj regułę:
sudo ufw allow 3306/tcp
-
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:
-
Sprawdź aktualne uprawnienia:
SHOW GRANTS FOR 'user'@'host';
-
Nadaj brakujące uprawnienia:
GRANT [uprawnienie] ON database_name.* TO 'user'@'host'; FLUSH PRIVILEGES;
-
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:
-
Identyfikuj wolne zapytania:
SHOW PROCESSLIST;
-
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
-
Analizuj wykonanie zapytań:
EXPLAIN SELECT * FROM twoja_tabela WHERE...;
-
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:
-
Podstawowe monitorowanie za pomocą wbudowanych narzędzi:
-- Sprawdź status serwera SHOW STATUS; -- Sprawdź zmienne konfiguracyjne SHOW VARIABLES; -- Sprawdź aktywne procesy SHOW PROCESSLIST;
-
Zaawansowane monitorowanie z narzędziami zewnętrznymi:
- MySQL Workbench - graficzne narzędzie do zarządzania i monitorowania
- Prometheus z exporterem MySQL - zaawansowany system monitorowania
- Percona Monitoring and Management (PMM) - kompleksowe rozwiązanie do monitorowania
🏁 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:
- Instalację MySQL - od przygotowania systemu po pierwsze uruchomienie
- Podstawową konfigurację bezpieczeństwa - zabezpieczenie instalacji przed nieautoryzowanym dostępem
- Zarządzanie użytkownikami i uprawnieniami - tworzenie dedykowanych kont z odpowiednimi uprawnieniami
- Tworzenie i zarządzanie bazami danych - podstawowe operacje na bazach danych
- Optymalizację wydajności - dostrajanie konfiguracji do Twoich potrzeb
- Rozwiązywanie typowych problemów - diagnostyka i naprawa najczęstszych usterek
- 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?
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