meta data for this page
  •  

To jest stara wersja strony!


MySQL

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.

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:

mysql> SET GLOBAL binlog_expire_logs_seconds = 259200;