Crmgo Blog

Podręczny przewodnik po MySQL

Podręczny przewodnik po MySQL

Ustawienia Lista parametrów konfiguracyjnych i ich wartości Zarządzanie użytkownikami Lista użytkowników Lista uprawnień użytkownika root@localhost Tworzenie nowego użytkownika Dodaj wybrane uprawnienia dla wszystkich tabel w bazie danych dbname dla użytkownika 'user'@'localhost' Dodaj wszystkie uprawnienia dla wszystkich tabel w bazie danych dbname dla użytkownika 'user'@'localhost' Usuwanie…

Podręczny przewodnik po MySQL

Ustawienia

Lista parametrów konfiguracyjnych i ich wartości

mysqld --verbose --help

Zarządzanie użytkownikami

Lista użytkowników

mysql> SELECT User,Host FROM mysql.user;

Lista uprawnień użytkownika root@localhost

mysql> SHOW GRANTS FOR root@localhost;

Tworzenie nowego użytkownika

mysql> CREATE USER 'user'@'localhost' IDENTIFIED BY 'secret';

Dodaj wybrane uprawnienia dla wszystkich tabel bazy danych dbname użytkownikowi 'user'@'localhost'

mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,INDEX 
ON dbname.* TO 'user'@'localhost';

Dodaj wszystkie uprawnienia dla wszystkich tabel bazy danych dbname użytkownikowi 'user'@'localhost'

mysql> GRANT ALL PRIVILEGES ON dbname.* TO 'user'@'localhost';

Usunięcie uprawnień użytkownika 'user'@'localhost' dla bazy danych dbname:

mysql> REVOKE ALL ON dbname.* FROM 'user'@'localhost';

Usunięcie użytkownika

mysql> DROP USER user@localhost;

Przeładowanie uprawnień

mysql> FLUSH PRIVILEGES;

Nowe hasło dla root

$ mysqladmin -uroot password 'secret'

Zarządzanie bazą danych

Tworzenie bazy danych

mysql> CREATE DATABASE dbname COLLATE utf8_general_ci;

Tworzenie bazy danych z konsoli

$ mysqladmin -u root -p create dbname

Usuwanie bazy danych z konsoli

mysqladmin -u root -p drop dbname

Maatkit - rozszerzone możliwości MySQL

Adminer - wygodna alternatywa dla phpMyAdmin, tylko jeden plik php.

Inne komendy SQL

Zamiana określonego podciągu w polu na inny

mysql> UPDATE table SET field=replace(field, 'original string', 'new string');

Wstawianie danych z jednej tabeli do drugiej

mysql> INSERT INTO table1 (fld1, fld2) SELECT table2.fld1, table2.fld2 FROM table2 WHERE table2.fld2 > 7;

Podgląd struktury tabeli blog_posts

mysql> DESCRIBE blog_posts;

Podgląd zapytania SQL tworzącego strukturę tabeli blog_posts

mysql> SHOW CREATE TABLE  blog_posts;

Monitorowanie i statystyki

Lista wszystkich baz danych

mysql> SHOW DATABASES;

Lista wszystkich tabel w wybranej bazie danych

mysql> SHOW TABLES;

Statystyki pracy serwera

mysql> SHOW GLOBAL STATUS;

Optymalizacja baz danych

Poprzez komendę mysqlcheck można przeprowadzać sprawdzanie, optymalizację i naprawę błędów.

Sprawdzanie błędów bazy danych dbname

$ mysqlcheck -p dbname

Odzyskiwanie i optymalizacja wszystkich baz danych

$ mysqlcheck -Aor -p

Opis argumentów

-p – użyj hasła

-A – sprawdzaj wszystkie bazy danych

-r – naprawiaj bazę danych

-o – optymalizuj bazę danych

Skrypt prostej optymalizacji bazy danych, można dodać do crona do wykonania raz dziennie

mysqlcheck --repair --analyze --optimize --all-databases --auto-repair -u root -pSECRET

Zainstaluj mysqltuner, który pokazuje statystyki działającego serwera mysql i daje przydatne porady dotyczące optymalizacji.

cd /usr/local/bin
wget http://mysqltuner.pl/mysqltuner.pl
chmod +x mysqltuner.pl

Uruchom

/usr/local/bin/mysqltuner.pl

Podczas uruchamiania skrypt zapyta o login i hasło dla root'a. Po poprawnej autoryzacji zostanie wyświetlona statystyka i różne porady dotyczące edycji pliku konfiguracyjnego MySQL.

Zmiana wiersza zachęty (prompt)

W pliku ~/.my.cnf dodajemy

[client]
default-character-set = 'utf8'
pager = 'less -n -i -S'
prompt = '\u@\h [\d] > '
user = 'root'
password = 'secret'

Te ustawienia zostały znalezione w sieci, ale niestety nie pamiętam autora. Ustawienia te wykonują następujące czynności

  • ustawiają domyślną kodowanie na utf8
  • używają less do wyświetlania wyników zapytań
  • zmieniają wiersz zachęty, \u - użytkownik, \h - host, \d - baza danych
  • podają nazwę użytkownika i hasło dla konsoli mysql, co jest wygodne przy pracy na lokalnym serwerze

Dump (kopia zapasowa)

Dump bazy danych

$ mysqldump -uroot -p dbname > dump.sql

Dump wybranych baz

$ mysqldump -uroot -p -B dbname1 dbname2 > dump.sql

Dump wszystkich baz

$ mysqldump -uroot -p -A > dump.sql

Dump tylko struktury, bez danych

$ mysqldump -uroot -p --no-data dbname > database.sql

Inne opcje

--add-drop-table - dodaje polecenie DROP TABLE przed każdą komendą CREATE TABLE

--add-locks - dodaje polecenie LOCK TABLES przed wykonaniem i UNLOCK TABLE po wykonaniu każdego dumpa tabeli

--no-create-db, -n - nie dodawać polecenia CREATE DATABASE, które jest dodawane przy użyciu parametrów --databases i --all-databases

--no-data, -d - dumpować tylko strukturę tabel

--no-create-info, -t - nie tworzyć polecenia CREATE TABLE

--skip-comments - nie wyświetlać komentarzy.

--compact - używać formatu kompaktowego

--create-options - dodaje dodatkowe informacje o tabeli do polecenia CREATE TABLE: typ, wartość AUTO_INCREMENT itp. Niepotrzebne opcje można usunąć za pomocą sed.

--extended-insert, -e - stosowanie polecenia INSERT z wielowierszowym składnią (zwiększa zwięzłość i szybkość operacji wejścia)

--tables - dumpować tylko tabele z listy następującej po tym parametrze, separator - spacja

Zastosowanie dumpa

$ mysql -uroot -p dbname1 < dump.sql

Począwszy od wersji 5.5.30 podczas dumpowania możliwe jest uzyskanie następujących komunikatów

Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.
или
mysqldump: Couldn't execute 'show events': Cannot proceed because system tables used by Event Scheduler were found damaged at server start (1577)

Aby to naprawić, należy zaktualizować bazy danych i zrestartować MySQL

sudo mysql_upgrade -u root -h localhost -p --verbose
sudo service mysql restart

Zmiana kodowania dla pola tekstowego

Lista pól dla tabeli table z informacjami o polu, w tym kodowanie pola

SHOW FULL COLUMNS FROM table;

Zmieniamy charset dla pola field

ALTER TABLE table MODIFY field VARCHAR(255) CHARACTER SET utf8;

Zmiana kodowania przy imporcie z dumpa

Określenie kodowania pliku

file --mime-encoding dump.sql

Konwersja z kodowania latin1 na utf8

mysqldump --add-drop-table -uroot -p dbname | replace CHARSET=latin1 CHARSET=utf8 | iconv -f latin1 -t utf8 | mysql -uroot -p dbname

Odzyskiwanie hasła roota

$ service mysqld stop
$ mysqld_safe --skip-grant-tables &
$ mysql

mysql> UPDATE mysql.user SET Password=PASSWORD('secret') WHERE User='root';
mysql> FLUSH PRIVILEGES;

$ service mysqld restart

Uwaga: wpis mógł powstać z pomocą AI i redakcji. Odpowiedzialny: Dmytro Lomaka, Kaltenkirchen.