Crmgo Blog

Шпаргалка по MySQL

Шпаргалка по MySQL

Podešavanja Spisak podešavanja i njihove vrednosti Upravljanje korisnicima Spisak korisnika Spisak prava za korisnika root@localhost Kreiranje novog korisnika Dodajemo odabrane privilegije za sve tabele baze podataka dbname korisniku 'user'@'localhost' Dodajemo sve privilegije za sve tabele baze podataka dbname korisniku 'user'@'localhost' Brisanje…

Шпаргалка по MySQL

Podešavanja

Lista podešavanja i njihove vrednosti

mysqld --verbose --help

Upravljanje korisnicima

Lista korisnika

mysql> SELECT User,Host FROM mysql.user;

Lista privilegija za korisnika root@localhost

mysql> SHOW GRANTS FOR root@localhost;

Kreiranje novog korisnika

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

Dodajemo izabrane privilegije za sve tabele baze podataka dbname korisniku 'user'@'localhost'

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

Dodajemo sve privilegije za sve tabele baze podataka dbname korisniku 'user'@'localhost'

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

Brisanje privilegija korisnika 'user'@'localhost' za bazu podataka dbname:

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

Brisanje korisnika

mysql> DROP USER user@localhost;

Osvežavanje privilegija

mysql> FLUSH PRIVILEGES;

Novi lozinka za root

$ mysqladmin -uroot password 'secret'

Upravljanje bazom podataka

Kreiranje baze podataka

mysql> CREATE DATABASE dbname COLLATE utf8_general_ci;

Kreiranje baze podataka iz konzole

$ mysqladmin -u root -p create dbname

Brisanje baze podataka iz konzole

mysqladmin -u root -p drop dbname

Maatkit - proširene mogućnosti MySQL-a

Adminer – praktična zamena za phpMyAdmin, samo jedan php fajl.

Ostale SQL komande

Zamena određenog podniza u polju drugim podnizom

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

Umetanje podataka iz jedne tabele u drugu

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

Pregled strukture tabele blog_posts

mysql> DESCRIBE blog_posts;

Pregled SQL upita za kreiranje strukture tabele blog_posts

mysql> SHOW CREATE TABLE  blog_posts;

Monitoring i statistika

Lista svih baza podataka

mysql> SHOW DATABASES;

Lista svih tabela u izabranoj bazi podataka

mysql> SHOW TABLES;

Statistika rada servera

mysql> SHOW GLOBAL STATUS;

Optimizacija baza podataka

Komandom mysqlcheck možete izvršiti proveru, optimizaciju i ispravku grešaka.

Provera na greške baze podataka dbname

$ mysqlcheck -p dbname

Obnova i optimizacija svih baza podataka

$ mysqlcheck -Aor -p

Opis argumenata

-p – koristi lozinku

-A – proveri sve baze podataka

-r – popravi bazu podataka

-o – optimizuj bazu podataka

Skripta za jednostavnu optimizaciju baze podataka, možete je dodati u cron da se izvršava jednom dnevno

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

Instalirajte mysqltuner, koji prikazuje statistiku o radnom MySQL serveru i daje korisne savete za optimizaciju.

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

Pokrenite

/usr/local/bin/mysqltuner.pl

Prilikom pokretanja skripta će pitati za korisničko ime i lozinku za root. Nakon uspešne autentifikacije biće prikazana statistika i razni saveti za izmenu MySQL konfiguracionog fajla.

Promena prompta

У ~/.my.cnf додајемо

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

Ове поставке су пронађене на просторима интернета, али нажалост, не памтим аутора. Ове поставке раде следеће

  • подразумева се да се поставља кодирање по подразумеваном utf8
  • користи се less за приказ резултата упита
  • мења се редни број позива, \u - корисник, \h - хост, \d - база података
  • наводи се логин и лозинка за mysql-конзолу, удобно при развоју на локалном серверу

Дамп (резервна копија)

Дамп базе података

$ mysqldump -uroot -p dbname > dump.sql

Дамп изабраних база

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

Дамп свих база

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

Дамп само структуре, без података

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

Друге опције

--add-drop-table - додаје команду DROP TABLE пре сваке команде CREATE TABLE

--add-locks - додаје команду LOCK TABLES пре извршења и UNLOCK TABLE након извршења сваког дампа табеле

--no-create-db, -n - не додавати команду CREATE DATABASE, која се додаје коришћењем параметара --databases и --all-databases

--no-data, -d - дампати само структуру табела

--no-create-info, -t - не креирати команду CREATE TABLE

--skip-comments - не изводити коментаре.

--compact - користити компактан формат

--create-options - додаје додатне информације о табели у команду CREATE TABLE: тип, AUTO_INCREMENT вредност итд. Нежељене опције могу се уклонити помоћу sed.

--extended-insert, -e - применити команду INSERT са вишеструким синтаксисом (повећава компакност и брзину уноса)

--tables - дампати само табеле из листе која следи после овог параметра, раздвајач је размак

Примена дампа

$ mysql -uroot -p dbname1 < dump.sql

Почевши од верзије 5.5.30 при дампивању могуће је добити следеће поруке

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)

Да би се ово исправило, потребно је ажурирати базе и поново покренути MySQL

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

Промена кодирања за текстуално поље

Листа поља за табелу table са информацијама о пољу, укључујући и кодирање поља

SHOW FULL COLUMNS FROM table;

Мењамо charset за поље field

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

Промена кодирања при увозу из дампа

Одређивање кодирања фајла

file --mime-encoding dump.sql

Конвертовање из кодирања latin1 у utf8

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

Враћање root-лозинке

$ 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

Napomena: tekst može biti uz pomoć AI uz ljudsku proveru. Odgovoran: Dmytro Lomaka, Kaltenkirchen.