# MySQL

Базы данных хранятся в /var/lib/mysql

```
sudo grep -R 'datadir' /etc/mysql/
```

**Настройка сессии**

<table border="1" id="bkmrk-%D0%A3%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C-%D0%B8%D0%B7%D0%BE%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE" style="border-collapse: collapse; width: 100%; height: 165.781px;"><colgroup><col style="width: 20%;"></col><col style="width: 20%;"></col><col style="width: 20%;"></col><col style="width: 20%;"></col><col style="width: 20%;"></col></colgroup><thead><tr style="height: 46.5938px;"><td style="height: 46.5938px;">Уровень изолированности</td><td style="height: 46.5938px;">Черновое чтение</td><td style="height: 46.5938px;">Неповторяющееся чтение</td><td style="height: 46.5938px;">Фантомное чтение</td><td style="height: 46.5938px;">Блокировка чтения</td></tr></thead><tbody><tr style="height: 29.7969px;"><td style="height: 29.7969px;">READ UNCOMMITTED</td><td style="height: 29.7969px;">Да</td><td style="height: 29.7969px;">Да</td><td style="height: 29.7969px;">Да</td><td style="height: 29.7969px;">Нет</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">READ COMMITTED</td><td style="height: 29.7969px;">Нет</td><td style="height: 29.7969px;">Да</td><td style="height: 29.7969px;">Да</td><td style="height: 29.7969px;">Нет</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">REPEATABLE READ</td><td style="height: 29.7969px;">Нет</td><td style="height: 29.7969px;">Нет</td><td style="height: 29.7969px;">Да</td><td style="height: 29.7969px;">Нет</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">SERIALIZABLE</td><td style="height: 29.7969px;">Нет</td><td style="height: 29.7969px;">Нет</td><td style="height: 29.7969px;">Нет</td><td style="height: 29.7969px;">Да</td></tr></tbody></table>

Можно установить на уровне сессии

```
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
```

Взаимоблокировки: Innodb отказывает самой короткой транзакции  
цели в трех ключевых областях: задержка, доступность и ошибки

**Performance Schema**

Это отдельный engine Проверить факт наличия:

```sql
SHOW ENGINES;
+--------------------+---------+----------------------------------+--------------+------+------------+
| Engine             | Support | Comment                          | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------+--------------+------+------------+
| PERFORMANCE_SCHEMA | YES     | Performance Schema               | NO           | NO   | NO         |
```

включен или нет:

```sql
SHOW VARIABLES LIKE 'performance_schema';
```

**Переменные окружения**

Просмотр

```sql
SHOW VARIABLES LIKE 'performance_schema';
```

Поддерживает %

**Настройки**  
Настройка при запуске

```
shell> mysql --max_allowed_packet=16M
```

Настройка при работе

```
mysql>SET GLOBAL max_connections = 1000; - потеря при перезагрузке
mysql>SET PERSIST max_connections = 1000; - сохранение после перезагрузки
```

Инструменты (setup\_instruments) пишут в потребителя (таблицы данных, ).  
Схемой sys представления и хранимые подпрограммы над performance\_schema.   
включение инструментов вызывает дополнительный код

```
statement/sql/select;
wait/synch/mutex/innodb/autoinc_mutex
```

Крайний левый - тип, далее слева направо подсистемы от общей к частной.  
Дайджест — агрегирование запросов путем удаления из них вариаций   
Структура таблиц потребителей:

- \*\_current — события, происходящие на сервере в данный момент;
- \*\_history — последние 10 завершенных событий на поток;
- \*\_history\_long — последние 10 000 завершенных событий на поток по всему миру

Ограничения:

- Инструментарий должен поддерживаться компонентом MySQL.
- Она собирает данные только после включения конкретного инструмента и потребителя.
- Трудно освободить память. Даже если позже отключите определенные инструменты или потребители, память не будет освобождена, пока вы не перезапустите сервер.

**Настройка инструментов мониторинга**

Список инструментов: [https://mariadb.com/kb/en/performance-schema-setup\_instruments-table/](https://mariadb.com/kb/en/performance-schema-setup_instruments-table/)

Таблица setup\_instruments - включенные инструменты.

Структура:

<table border="1" id="bkmrk-name-%D0%9D%D0%B0%D0%B7%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 18.1548%;"></col><col style="width: 81.9644%;"></col></colgroup><tbody><tr><td>NAME</td><td>Название инструмента</td></tr><tr><td>ENABLED</td><td>Включен или нет</td></tr><tr><td>TIMED</td><td>Планировщик. Если disabled, работать не будет</td></tr></tbody></table>

**CRUD db, tables, users**

```sql
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newPassword';

CREATE DATABASE IF NOT EXISTS my_timeweb;
DROP DATABASE IF EXISTS my_timeweb;
CREATE USER 'sub_user'@'10.0.%' IDENTIFIED BY 'password';
SELECT * FROM mysql.user;
DROP USER 'user'@'localhost';
```

Привилегии:

<table border="1" id="bkmrk-alter-%D0%9C%D0%B5%D0%BD%D1%8F%D1%82%D1%8C-%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83" style="border-collapse: collapse; width: 100%; height: 417.157px;"><colgroup><col style="width: 24.1072%;"></col><col style="width: 76.012%;"></col></colgroup><tbody><tr style="height: 29.7969px;"><td style="height: 29.7969px;">ALTER</td><td style="height: 29.7969px;">Менять структуру таблицы или БД</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">CREATE</td><td style="height: 29.7969px;">Создавать новые БД и таблицы</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">DELETE</td><td style="height: 29.7969px;">Удалять строки в таблице</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">INSERT</td><td style="height: 29.7969px;">Добавлять строки в таблицу</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">SELECT</td><td style="height: 29.7969px;">Читать данные из таблицы</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">UPDATE</td><td style="height: 29.7969px;">Обновлять данные в таблице</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">DROP</td><td style="height: 29.7969px;">Удалять БД</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">ALL PRIVILEGES</td><td style="height: 29.7969px;">все, кроме GRANT;</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">USAGE PRIVILEGES</td><td style="height: 29.7969px;">никаких привилегий;</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">FILE</td><td style="height: 29.7969px;">разрешает читать файлы на сервере;</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">INDEX</td><td style="height: 29.7969px;">создавать индексы для таблиц;</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">DROP</td><td style="height: 29.7969px;">удалять таблицы;</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">EVENT</td><td style="height: 29.7969px;">обработка событий;</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">TRIGGER</td><td style="height: 29.7969px;">создание триггеров.</td></tr></tbody></table>

Привилегия на действия

<table border="1" id="bkmrk-grant-%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D1%8F%D1%82%D1%8C-%D0%BF%D1%80%D0%B0%D0%B2%D0%B0" style="border-collapse: collapse; width: 100%; height: 268.172px;"><colgroup><col style="width: 23.8691%;"></col><col style="width: 76.2501%;"></col></colgroup><tbody><tr style="height: 29.7969px;"><td style="height: 29.7969px;">GRANT</td><td style="height: 29.7969px;">изменять права пользователей;</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">SUPER</td><td style="height: 29.7969px;">суперпользователь;</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">PROCESS</td><td style="height: 29.7969px;">получение информации о состоянии MySQL;</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">RELOAD</td><td style="height: 29.7969px;">позволяет перезагружать таблицы привилегий;</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">SHUTDOWN</td><td style="height: 29.7969px;">позволяет отключать или перезапускать базу данных;</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">SHOW DATABASES</td><td style="height: 29.7969px;">просмотр списка баз данных;</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">LOCK TABLES</td><td style="height: 29.7969px;">блокирование таблиц при использовании SELECT;</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">REFERENCES</td><td style="height: 29.7969px;">создание внешних ключей для связывания таблиц;</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">CREATE USER</td><td style="height: 29.7969px;">создание пользователей;</td></tr></tbody></table>

```mysql
GRANT SELECT, INSERT ON my_timeweb.* TO 'user'@'localhost'; из-под root
GRANT ALL PRIVILEGES ON my_timeweb.* TO 'user'@'localhost';
REVOKE SELECT, INSERT ON my_timeweb.* FROM 'user'@'localhost';
```

применение изменений

```
flush privileges;
```

**статус, приложения**

mysqladmin version  
mysqlshow mysql - список таблиц БД mysql

mysql\_secure\_installation   
mysqladmin - административное  
mysqlcheck - проверка  
mysqldump - сохранение  
mysqlimport - импорт текстовых файлов в нужную таблицу  
mysqlpump - экспорт базы в sql файл  
mysqlslap - статус загрузки сервера

\--print-defaults выводит конфиг по умолчанию