====== 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;