====== MySQL ======
Od wersji Debian 10 MySQL'a nie ma w standardowym repozytorium. Dodanie repozytorium:
apt-get install gnupg wget lsb-release
wget http://repo.mysql.com/mysql-apt-config_0.8.36-1_all.deb
dpkg -i mysql-apt-config_0.8.36-1_all.deb
Sprawdź jakie jest najnowsze repozytorium na stronie https://dev.mysql.com/downloads/repo/apt/.
===== Backup bazy =====
Bezpośrednio z wiersza polecenia (bez logowania do bazy) wydajemy polecenie ''mysqldump'' jak poniżej:
cd /home/backup
mysqldump -uroot -phaslo nazwa_bazy > nazwa_pliku.sql
Backup określonych tabel wykonamy następująco (t1, t2, t3 - nazwy tabel):
mysqldump -uroot -phaslo nazwa_bazy t1 t2 t3 > nazwa_pliku.sql
Przy dużej ilości danych w tabeli, może się przydać przełącznik where:
mysqldump -uroot -phaslo nazwa_bazy nazwa_tabeli --where='id IN ("1", "2")' > nazwa_pliku.sql
===== Przywrócenie backupu =====
Przywrócenie z Basha:
mysql -u root -p db_name < db_dump.sql
Przywrócenie z poziomu MySQL:
mysql -u root -p # logujemy się
use db_name;
source db_backup.sql
===== Zarządzanie użytkownikami =====
Nadanie uprawnień dla nowego użytkownika.
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT, UPDATE ON baza.tabela TO 'nazwa_użytkownika'@'localhost';
Aby nadać wszystkie uprawnienia, można użyć ''GRANT ALL PRIVILEGES''. W starszych wersjach MySQL można było dwa powyższe polecenia zapisać jako jedno poniższe:
GRANT SELECT, INSERT, UPDATE ON baza.tabela TO 'nazwa_użytkownika'@'localhost' IDENTIFIED BY 'hasło';
Zamiast ''localhost'' możemy podać konkretny adres IP lub ''%'' - jeśli chcemy umożliwić łączenie się z dowolnego adresu. Jeżeli chcesz zezwolić na łączenie się z innych adresów niż localhost, w pliku ''/etc/mysql/my.cnf.migrated'' zakomentuj linię z wpisem ''bing-address = 127.0.0.1''. Poniższym poleceniem sprawdzisz, na jakich portach nasłuchuje MySQL:
netstat -tupan | grep mysql
Połączenie ze zdalnego hosta:
mysql -u nazwa_użytkownika -p'hasło' -h adres_ip -D nazwa_bazy
Wypisanie istniejących uprawnień.
SELECT host, user, password FROM mysql.user ORDER BY user, host;
SHOW GRANTS FOR 'nazwa_użytkownika'@'localhost';
Odebranie uprawnień.
DROP USER 'nazwa_użytkownika'@'localhost';
Zmiana hasła.
ALTER USER 'user'@'localhost' identified by 'new-password';
===== Zarządzanie bazą =====
Tworzenie nowej bazy danych
CREATE DATABASE mydatabase CHARACTER SET utf8 COLLATE utf8_polish_ci;
USE mydatabase;
===== Rotowanie logów =====
Domyślnie pliki logów są przechowywane w ''/var/lib/mysql''. Warto regularnie sprawdzić ile zajmują miejsca: ''du -sh /var/lib/mysql/*''.
Aktualne ustawienia logów sprawdzimy (będąc zalogowanym jako root do MySQL):
mysql> show global variables like '%logs%';
+----------------------------+---------+
| Variable_name | Value |
+----------------------------+---------+
| binlog_expire_logs_seconds | 2592000 |
| expire_logs_days | 0 |
| innodb_print_ddl_logs | OFF |
+----------------------------+---------+
2592000 sekund to 30 dni. Wyczyścić logi możemy następującym poleceniem:
PURGE BINARY LOGS BEFORE '2021-03-09 07:30:00';
Zmiany ustawień można dokonać następująco, przykładowo:
SET GLOBAL binlog_expire_logs_seconds = 259200;