2. Да ви се представя!
инж. Георги “Жоро” Кодинов
• MySQL разработчик от 2006
• Работя от Пловдив
• Ръководя разпределен екип от разработчици
• ИТ мениджър в банка в предишен живот
• Работя „от къщи“ от повече от 20 години
2
4. 1. Какво е MySQL?
2. Да изберем правилния вариант
3. MySQL понятия
4. Основни операции
5. Как да преживеем културния шок?
6. Какво е новото в MySQL 8.0?
7. А след това накъде?
За какво ще говорим?
4
5. • Някакво ниво на разбиране на SQL
• За предпочитане предишен опит с MySQL или други бази данни
• Търпение!
Какво ниво на разбиране очаквам от вас?
5
10. Стабилна ACID compliant RDBMS (релационна база данни)
С отворен код (GPL v2 или частен лиценз)
Използвана от някои от най-големите web компании в този свят
Налична във всички Линукс дистрибуции и облаци
Детайлно документирана и поддържана професионално от Oracle
Лесна за инсталиране и използване
Какво е MySQL?
10
17. Управляват складиране и извличане на данни в/от таблица
Всяка таблица има storage engine!
Някои по-популярни storage engines:
• InnoDB (по подразбиране от 5.5) – транзакционна,ACID compliant
• MyISAM (предишна) – Не-транзакционна, базирана на файлове
• INFORMATION_SCHEMA,
• PERFORMANCE_SCHEMA
• black hole storage engine
• NDBCluster
Storage Engines
17
19. Винаги от 2 части: ‘потребителско име’@’име на хост’.
Може да използва маски в името на хоста: празни (‘’), ‘%’ и ‘_’.
Хоста може да бъде и IP адрес или IP маска.
Начините на удостоверяване са плъгини.
Няма пароли записани в таблици в чист текст!
Поддържа двустепенна автентикация, LDAP, Kerberos….
Потребителски акаунти в MySQL
19
20. Иван от счетовдството се опитва да влезе
MySQL намира потребителска сметка ’’@’%.accounting’ и автентикира Иван срещу нея
Иван може да използва привилегиите дадени на ’’@’%.accounting’
Логнат (“Logged in”) и текущ (“Current”) потребителски акаунти
Иван@p1.accounting
mysql.user
’’@%.accounting
user() current_user()
20
21. Правата винаги се дават на потребител+хост комбинация
Винаги използвайте DROP USER за да почисти правилно!
INSERT права може да се дадат и само на определени колони от таблица
Всички права се проверяват срещу current_user()
Раздаване на права
21
22. Глобални: USAGE, SHUTDOWN,SUPER, CREATE …
На ниво база данни: CREATE, DROP, EXECUTE, SELECT, …
На ниво таблици: INSERT, SELECT, …
Колони: INSERT, SELECT, UPDATE
Подпрограми: EXECUTE, CREATE ROUTINE, ALTER ROUTINE
Потребителски сметки: PROXY
Права в MySQL
22
24. Само за InnoDB и NDB
Horizontal partitioning
Partition by
• List: BY LIST(<expr>) (PARTITION <name>VALUES IN (3,5,6,9,17)
• Range: BY RANGE (<expr>) (PARTITION <name>VALUES LESSTHAN (<num>), …
• Hash/Key: BY HASH( <expr> ) PARTITIONS (4)
Partitioning
24
25. Различни за всяка сесия
Нямат декларан тип
Не се налага да ги декларирате
Потребителски променливи (UserVariables)
mysql> SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop;
mysql> SELECT * FROM shopWHERE price=@min_price OR price=@max_price;
+---------+----------+---------+
| article | dealer | price |
+---------+----------+---------+
| 0003 | D | 1.25 |
| 0004 | D | 19.95 |
+---------+----------+---------+
25
27. IPv4 and IPv6 are supported
DesignatedTCP port 3306
Transparent SSL encryption layer supported
Свързаване към сървъра
Protocol Connection Type Operating Systems
TCP/IP Локално и отдалечено Всички
UNIX Socket File Локално UNIX
Named Pipe Локално и отдалечено Windows
Shared Memory Локално Windows
Порръджа IPv4 и IPv6
Имаме запазен TCP порт 3306
Връзките може да са криптирани с SSL
27
28. ‘?’ е за помощ за командите
Заявките свършват на точка и запетая (Или какъвто разделител е настроен в програмата).
Винаги има “текуща” база данни: чрез команда USE или от командния ред
SQL заявките се четат от стандартния вход (stdin) ако mysql не е в интерактивен (console) режим
Резултатите се печатат на стандартния изход (stdout), грешките на стандарнтия поток за грешки
(stderr)
Може да редактирате командите ако mysql е в интерактивен режим
Не забравяйте предупрежденията! (SHOWWARNINGS)
Изпълняване на заявки в програмата ‘mysql’
28
29. Традиционния MySQL начин
• SHOW DATABASES / TABLES /TRIGGERS / PROCEDURE /FUNCTION STATUS
• SHOWCREATETABLE /VIEW /TRIGGER
• SHOW PROCEDURE / FUNCTION CODE
Таблиците в INFORMATION_SCHEMA
• TABLES,TRIGGERS,VIEWS, ROUTINES, COLUMNS …
ls, dir ...
Разглеждане на базите данни и тяхното съдържание
29
30. Интерактивни
• MySQLWorkbench
• MSVisual Studio Code
На командната линия
• mysqldump
• mysqlbinlog
• mysql_config_editor
• MySQL Shell
MySQL EnterpriseTools
Други интересни команди
30
32. Базите данни са директории
Таблиците са просто (набор от) файлове
Структура на данните на диска на сървъра
32
33. Най неочакваните неща
• AVG() ≠ AVG<интервал>()
• ’това е стринг’ (кавички)
• ”това е и идентификатор и стринг” (двойни кавички)
• `това също е и идентификатор и стринг` (обратни кавички)
• b, n, r, t, Z значат същите неща като в C/C++
• || е OR, а не CONCAT(), && работи като AND!
sql_mode (ANSI , traditional, mssql, postgresql , oracle, …)
SQL диалект
33
34. DROPTABLE/DATABASE … IF EXISTS
Потребителски променливи
По подразбиране при сравняване на текст големи и малки букви са равни!
Уникални местни команди и функционалност
34
35. Всяка таблица има нужда от storage engine. А има и по подразбиране!
Внимавайте за Storage Engine
mysql> create table t1 (a integer) engine='vaporware';
Query OK, 0 rows affected, 2 warnings (0,05 sec)
mysql> show create table t1;
CREATETABLE `t1` (
`a` integer(11) DEFAULT NULL
) ENGINE=InnoDB
35
36. SELECT 1 FROM DUAL WHERE 1 = ‘1 текст’ връща 1 ред!
Текста се изрязва когато го поставяте в по-малка колона.
По-големите и по-малките числа се закръглят до възможните при запис в таблица
Някои неща са валиден SQL дори и като не работят: примерно FOREIGN KEYS and MyISAM
MySQL се опитва да ви помогне. Понякога дори доста натрапчиво!
36
38. • Data Dictionary
• Atomic DDL
• Автоматичен ъпгрейд на базите
• Криптиране на ниво таблици
• Моментален ALTERTABLE
• По-добра JSON поддръжка
• SET PERSIST за конфигурация
• MySQL Clone plugin
• НАИСТИНА много инструменти за сигурност
• Component инфраструктура
MySQL 8.0: Най-добрата версия!
38
41. http://www.mysql.com/support
Oracle Lifetime Support for MySQL
• 24x7
• Неограничен брой инциденти
• База от знания
• Абонамент за нови версии с оправени грешки, специални версии, кръпки
• MySQL консултации
Вземете поддръжка
41
42. MySQL “Developer Zone” : http://dev.mysql.com
• Онлайн документация
• Форуми
• Bug tracker
• Новини
• Ръководства за разработчици
• Готови за използване програми
• Блогове
Станете част от MySQL обществото
42
43. Търсене на “MySQL” връща
• 265M резултата на онази търсачка
• 35M резултата в една друга търсачка
Търсете в интернет
43