Poniżej przedstawiam kilka podstawowych zagadnień dotyczących MySQL — tworzenie nowych baz, użytkowników, nadawanie użytkownikom uprawnień, różne metody ustawiania i zmiany haseł, podgląd istniejących w klastrze baz oraz użytkowników i ich uprawnień.
Przegląd użytkowników i uprawnień dostępu do klastra baz MySQL
Informacje o użytkownikach, hasłach i hostach z jakich jest dostęp do klastra MySQL oraz jego zakresie są przechowywane w tabeli user w bazie administracyjnej tzn. mysql.
- A wiec aby przejrzeć uprawnienia do klastra MySQL wystarczy się do niej zalogować:
mysql -u root mysql
Jeśli jest już ustawione niepuste hasło root’a do to należy skorzystać dodatkowo z opcji-p
. - Wydajemy zapytanie SQL:
mysql> SELECT * FROM user;
Jak widać funkcjonalność tabeli user w MySQL w znacznym stopniu odpowiada funkcjonalności oferowanej przez plik konfiguracyjyny pg_hba.conf w PostgreSQL.
Ustawienie lub zmiana hasła za pomocą mysqladmin (nie zalaecane)
- Ustawiamy lub zmieniamy hasło bazy MySQL:
mysqladmin -u USER_NAME password HASLO_MYSQL_USER_NAME
Jeśli dane hasło było już ustawione i jest niepuste to oczywiście należy dodatkowo użyć opcji-p
. - Czasami może okazać się potrzebne odświeżenie/przeładowanie uprawnień klastra MySQL:
mysqladmin -u root flush-privileges
Należy zaznaczyć że powyższa procedura zmieni/ustawi hasło tylko dostępu z hosta/kanału z którego obecnie korzystamy, a więc najprawdopodobniej localhost, natomiast nie ma wpływu na hasło dostępu poprzez inne kanały, nawet te równoważne – np. 127.0.0.1. Łatwo się o tym przekonać zaglądając do tabeli user w bazie mysql(patrz poprzedni akapit), dlatego lepiej wykorzystać metodę przedstawioną w następnym paragrafie która nie ma tej wady.
Ustawienie lub zmiana hasła użytkownika bezpośrednio w bazie danych MySQL za pomocą SQL (zalecane)
Poniższa procedura ma tą przewagę nad poprzednią że ustawia/zmienia hasło dostępu poprzez wszystkie kanały/hosty przez jakie dany użytkownik ma w danej chwili dostęp.
- Logujemy się do serwera MySQL i bazy administracyjnej — 'mysql’:
mysql -u root mysql
Analogicznie jak poprzednio — jeśli hasło root’a jest niepuste to należy dodatkowo użyć dodatkowo opcji-p
. - Wykonujemy update (zmiana hasła):
mysql> UPDATE user SET password=PASSWORD('HASŁO') WHERE User='USER_NAME';
Query OK, 4 rows affected (0.00 sec)
Rows matched: 4 Changed: 4 Warnings: 0
Jak widać hasło zostało zmienione w 4 rekordach (liczba rekordów u Ciebie może być inna). - Może być jeszcze konieczne zaktualizowanie informacji o uprawnieniach:
mysql> flush privileges;
- Opuszczamy bazę MySQL:
mysql>\q
Oczywiście zamiast logować się do bazy z konsoli przy pomocy mysql, powyższe czynności możemy wykonać analogicznie za pośrednictwem phpMyAdmin’a lub wykonując zapytania SQL do bazy za pośrednictwem jakiegoś języka programowania — np. Bash/Python/PHP/C++.
Listowanie baz danych w danym klastrze MySQL i tworzenie nowych baz MySQL
- Logujemy się do serwera MySQL i bazy administracyjnej — mysql:
mysql -u root -p mysql
- Listowanie istniejących baz danych MySQL:
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
+--------------------+
- Tworzenie nowych baz danych MySQL:
mysql> CREATE DATABASE nazwa_bazy;
Dodawanie/tworzenie nowych użytkowników bazy MySQL
- Logujemy się do serwera MySQL i bazy administracyjnej — mysql:
mysql -u root -p mysql
- Tworzymy użytkownika i ustawiamy hasło dostępu do bazy:
- Dla dostępu z hosta o określonej nazwie, np. localhost:
CREATE USER 'USER_NAME'@'HOST_NAME' IDENTIFIED BY 'HASŁO';
- Dla dostępu z hosta o określonej domenie, np. arkadiuszcwiek.pl:
CREATE USER 'USER_NAME'@'HOST_NAME.DOMENA' IDENTIFIED BY 'HASŁO';
- Dla dostępu z hosta o określonym adresie IP:
CREATE USER 'USER_NAME'@'IP' IDENTIFIED BY 'HASŁO';
- Dla dostępu z dowolnego hosta:
CREATE USER 'USER_NAME' IDENTIFIED BY 'HASŁO';
co jest równoważne:
CREATE USER 'USER_NAME'@'%' IDENTIFIED BY 'HASŁO';
- Dla dostępu z hosta o określonej nazwie, np. localhost:
- Nadajemy uprawnienia dostępu ze wszystkich wpisów do bazy(utworzonej wcześniej):
- Nadawanie uprawnień do bazy niezależnie od hosta z jakiego użytkownik się loguje (zalecane):
GRANT ALL PRIVILEGES ON NAZWA_BAZY_DANYCH.* TO USER_NAME;
- Wszystkie uprawnień do tej bazy przy logowaniu z hosta 'HOST’:
GRANT ALL PRIVILEGES ON NAZWA_BAZY_DANYCH.* TO USER_NAME@HOST;
- To samo co powyżej z dodatkową możliwością nadawania uprawnień do tej bazy innym użytkownikom:
GRANT ALL PRIVILEGES ON NAZWA_BAZY_DANYCH.* TO USER_NAME@HOST WITH GRANT OPTION;
Alternatywnie zamiast wszystkich — ALL — możemy nadać tylko wybrane uprawnienia wymieniając je po przecinku, a wybierać możemy z pośród:
- ALL – Użytkownik otrzymuje wszystkie przywileje za wyjątkiem GRANT OPTION
- CREATE – Pozwala użytkownikowi na tworzenie tabel
- SELECT – Pozwala na przeszukiwanie tabel
- INSERT – Pozwala dodawać nowe informacje do tabel
- SHOW DATABASES – Pozwala użytkownikowi na przeglądanie listy dostępnych baz danych
- USAGE – Służy do tworzenia użytkownika bez uprawnień
- GRANT OPTION – Pozwala użytkownikowi nadawać uprawnienia.
- Nadawanie uprawnień do bazy niezależnie od hosta z jakiego użytkownik się loguje (zalecane):
- Sprawdzamy uprawnienia:
SELECT * FROM db;
Backup & restore – czyli tworzenie kopii zapasowej i jej przywracanie
Backup
mysqldump nazwaBazyDanych > kopia.sql
lub:
mysqldump nazwaBazyDanych -u nazwaUzytkownika -p -h host > kopia.sql
Restore
mysql -u nazwaUzytkownika -p
mysql> source kopia.sql
lub
mysql nazwaBazyDanych -u nazwaUzytkownika -p < kopia.sql