wiki/docs/Other/MariaDB.md
ilyamak04 78f4dfc79c
All checks were successful
Build MkDocs / build-and-deploy (push) Successful in 13s
FIX
2025-03-24 23:00:13 +03:00

7.2 KiB
Raw Blame History

MariaDB

  • mysql -u [user] -p - локальное подключение к серверу
  • mysql -h [host] -P [port] -u [user] -p - удалённое подключение к серверу

  • SHOW DATABASES; - показать все бд
  • CREATE DATABASE [db_name]; - создать бд
  • DROP DATABASE [db_name]; - удалить бд

  • USE [db_name]; - использовать бд
  • SHOW TABLES; - показать таблицы
  • DROP TABLE [table_name]; - удалить таблицу
  • TRUNCATE TABLE [table_name]; - очистить таблицу (удалить все данные)
  • DESCRIBE [table_name] или SHOW COLUMNS FROM [table_name]; - структура таблицы

  • CREATE USER 'username'@'localhost' IDENTIFIED BY 'password'; - создать пользователя, может коннектиться к базе только через localhost

  • Права

GRANT SELECT, INSERT ON [db_name].[table_name] TO 'username'@'localhost';
GRANT ALL PRIVILEGES ON [db_name].* TO 'username'@'localhost';
  • REVOKE INSERT ON [db_name].[table_name] FROM 'username'@'localhost'; - отозвать права
  • FLUSH PRIVILEGES; - обновить права
  • RENAME USER 'user1'@'localhost' TO 'user1'@'192.168.1.100'; - изменить пользователя (имя, доступ с какого хоста)
  • DROP USER 'username'@'localhost'; - удалить пользователя
  • SELECT user, host FROM mysql.user; - список пользователей и хостов

  • Изменение таблицы
ALTER TABLE [table_name] ADD COLUMN [column_name] [data_type];
ALTER TABLE [table_name] DROP COLUMN [column_name];
  • Пример запроса на чтение данных
SELECT * FROM [table_name];
SELECT column1, column2 FROM [table_name] WHERE condition;
-- Примеры условий:
WHERE id = 5;
WHERE created_at BETWEEN '2023-01-01' AND '2023-12-31';
WHERE column1 LIKE '%pattern%';
  • Обновить данные
UPDATE [table_name] SET column1 = 'new_value' WHERE condition;
  • Удалить данные
DELETE FROM [table_name] WHERE condition;

  • Индексы
-- Создать индекс
CREATE INDEX [index_name] ON [table_name] (column1, column2); -- по умолчанию btree
-- Удалить индекс
DROP INDEX [index_name] ON [table_name];

  • mysqldump -u [user] -p [db_name] > backup.sql - резервное копирование бд (-p --all-databases - все бд)
  • mysql -u [user] -p [db_name] < backup.sql - восстановление бд

  • mariabackup --backup --user=[user] --password=[password] --target-dir=/backup/ - бэкап быстрее, бинарный формат, не блокирует таблицы, перед восстановлением необходимо завершить все транзации - mariabackup --prepare --target-dir=/backup/
  • Восстановление бэкапа
sudo systemctl stop mariadb
sudo rm -rf /var/lib/mysql/*
mariabackup --copy-back --target-dir=/backup/
sudo chown -R mysql:mysql /var/lib/mysql
sudo systemctl start mariadb

  • План выполнения запроса
EXPLAIN SELECT * FROM table_name WHERE column1 = 'value';
  • Выполняет запрос и показывает фактический план выполнения с реальными метриками (время, количество строк и т.д.)
ANALYZE FORMAT=JSON SELECT * FROM table_name WHERE column1 = 'value';
  • SHOW PROFILE Показывает профиль выполнения запроса
SET profiling = 1;
SELECT * FROM table_name WHERE column1 = 'value';
SHOW PROFILE;

??? info "SHOW PROFILE" SHOW PROFILE — это инструмент для анализа времени выполнения отдельных этапов запроса. Показывает, сколько времени заняла каждая операция (например, парсинг, выполнение, отправка данных).

| Status               | Duration |

| starting             | 0.000123 |

| checking permissions | 0.000045 |

| Opening tables       | 0.000067 |

| init                 | 0.000034 |

| System lock          | 0.000023 |

| optimizing           | 0.000056 |

| executing            | 0.000078 |

| Sending data         | 0.001234 |

| end                  | 0.000045 |

| query end            | 0.000034 |

| closing tables       | 0.000023 |

| freeing items        | 0.000045 |

| cleaning up          | 0.000034 |
  • Показывает активные соединения и выполняемые запросы.
SHOW FULL PROCESSLIST;
  • Показывает статус InnoDB, включая информацию о блокировках, транзакциях и буферах.
SHOW ENGINE INNODB STATUS;
  • Показывает статистику сервера
SHOW STATUS LIKE 'Innodb_buffer_pool_reads';
  • Завершает выполнение запроса по его ID.
KILL [process_id];
  • Перестраивает таблицу и освобождает неиспользуемое пространство.
OPTIMIZE TABLE table_name;
  • Обновляет статистику для оптимизатора.
ANALYZE TABLE table_name;
  • Проверяет целостность таблицы.
CHECK TABLE table_name;

  • Логирование медленных запросов
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1; -- Запросы дольше 1 секунды
  • Показывает статистику выполнения запросов.
SELECT * FROM performance_schema.events_statements_summary_by_digest;

Настройки

  • SHOW VARIABLES; - посмотреть текущие настройки

!!! info "Конфиги" Основной конфиг: /etc/my.cnf или /etc/mysql/my.cnf

Дополнительные конфиги: `/etc/mysql/conf.d/` или `/etc/mysql/mariadb.conf.d/`

Пример структуры:
```ini
[mysqld]
datadir = /var/lib/mysql
bind-address = 0.0.0.0
innodb_buffer_pool_size = 1G
```

!!! info "Логи" Общий лог: /var/log/mysql/mysql.log (логирует все запросы).

Лог ошибок: `/var/log/mysql/error.log` (или `/var/log/mariadb/mariadb.log`)

Бинарный лог (журнал транзакций): `/var/lib/mysql/mysql-bin.*` (включает все изменения данных)

`mysqlbinlog /var/lib/mysql/mysql-bin.000001` - для просмотра бинарных логов

Лог медленных запросов: `/var/log/mysql/mysql-slow.log`

!!! info "" По умолчанию данные лежат в /var/lib/mysql/

Можно посмотреть в конфиге параметр `datadir`