До основного вмісту
🗄

MySQL / MariaDB

24 статей у розділі

Розділ про MySQL і MariaDB на реальному сервері: з чого починається налаштування my.cnf під доступну пам'ять, як влаштовані індекси і чому без них запит впирається в повне сканування таблиці, а також що означає різниця між InnoDB і MyISAM на практиці, а не в теорії.

Окремо розібрано бекапи: mysqldump для невеликих баз, Percona XtraBackup для гарячого копіювання без зупинки сервера, відновлення за бінлогом на конкретний момент часу та перенесення даних під час міграції з MySQL на MariaDB або оновлення з 5.7 до 8.0.

Багато матеріалу про діагностику: slow query log і EXPLAIN для повільних запитів, дедлоки InnoDB і як їх читати, помилка Too many connections і витоки з'єднань, розростання ibdata1 та способи звільнити місце на диску.

  • Налаштування my.cnf, індекси та Performance Schema
  • Бекапи: mysqldump, XtraBackup, відновлення за бінлогом
  • Реплікація: Master-Slave, GTID і Galera Cluster
  • Діагностика: повільні запити, дедлоки, ліміти з'єднань
Оптимізація MySQL/MariaDB: налаштування my.cnf Налаштування my.cnf для оптимізації MySQL та MariaDB: innodb_buffer_pool_size, max_connections. Формули розрахунку під обсяг RAM сервера. mysqldump: резервне копіювання та відновлення MySQL Повний посібник з mysqldump: бекап однієї БД, всіх БД, лише структури. Автоматизація через cron, стиснення gzip, відновлення з дампу. Управління користувачами та правами доступу в MySQL/MariaDB Створення користувачів MySQL: CREATE USER, GRANT, REVOKE, DROP USER. Налаштування прав на базу даних, таблицю. Перегляд привілеїв через SHOW GRANTS. Скидання пароля root у MySQL та MariaDB: інструкція Як скинути пароль root MySQL 8.0, MySQL 5.7 та MariaDB: через --skip-grant-tables, ALTER USER. Вирішення помилки Access denied for user root. MySQL Slow Query Log: увімкнення та аналіз повільних запитів Як увімкнути та аналізувати Slow Query Log в MySQL та MariaDB: long_query_time, mysqldumpslow. Оптимізація повільних SQL-запитів на VPS. MySQL індекси: типи, створення та оптимізація запитів Типи індексів MySQL: PRIMARY KEY, UNIQUE, INDEX, FULLTEXT, COMPOSITE. Створення індексів, аналіз через EXPLAIN, оптимізація запитів. MySQL реплікація Master-Slave: налаштування та моніторинг Налаштування MySQL реплікації Master-Slave: binlog, server-id, CHANGE MASTER TO. Моніторинг через SHOW SLAVE STATUS. Імпорт великої бази даних MySQL: оптимізація та прискорення Як прискорити імпорт великого MySQL дампу: max_allowed_packet, innodb_buffer_pool_size, вимкнення autocommit, mydumper/myloader. Міграція з MySQL на MariaDB: відмінності та сумісність Як мігрувати з MySQL на MariaDB: експорт даних, встановлення MariaDB, імпорт. Відмінності MySQL 8.0 vs MariaDB 10.x на VPS. MariaDB Galera Cluster: налаштування на 3 вузлах Налаштування MariaDB Galera Cluster на 3 серверах: wsrep_cluster_address, перший запуск --wsrep-new-cluster, моніторинг wsrep_cluster_size. MySQL кодування utf8mb4: підтримка emoji та Unicode Налаштування кодування utf8mb4 в MySQL та MariaDB: зміна charset та collation бази, таблиць і колонок. Підтримка emoji в MySQL. Гарячий бекап MySQL з Percona XtraBackup Створення гарячих резервних копій MySQL без зупинки сервера за допомогою Percona XtraBackup. Повний та інкрементальний бекап. MySQL Performance Schema: моніторинг вузьких місць сервера Використання MySQL Performance Schema для пошуку повільних запитів, аналізу блокувань, моніторингу пам'яті та вводу-виводу без зовнішніх інструментів. MySQL JSON поля: зберігання та запити до JSON-даних Робота з JSON-типом даних у MySQL 5.7+. Створення полів, оператори ->, ->>, JSON_EXTRACT, індекси на JSON, функції JSON_SET та JSON_ARRAY. InnoDB і MyISAM у MySQL: різниця та що обрати InnoDB проти MyISAM: транзакції, блокування рядків, відновлення після збою. Таблиця відмінностей і команди зміни рушія таблиці. EXPLAIN і EXPLAIN ANALYZE: як читати план запиту Розбираємо стовпці EXPLAIN у MySQL: type, key, rows, Extra. Відмінність від EXPLAIN ANALYZE і ознаки повільного запиту в плані виконання. Партиціонування таблиць MySQL: коли це допомагає Партиціонування MySQL за RANGE і HASH: коли прискорює запити, а коли лише ускладнює схему. Приклади створення секцій і їх видалення. Binlog MySQL: відновлення бази на точку у часі Як увімкнути binlog у MySQL і відновити базу на момент перед збоєм: повний бекап плюс mysqlbinlog, позиції та часові мітки. GTID-реплікація MySQL: налаштування і зміна майстра GTID-реплікація MySQL: чим відрізняється від координат бінлогу, як налаштувати і перемкнути репліку на нового майстра без ручного пошуку позиції. ProxySQL: розподіл читання і запису між серверами Як ProxySQL розподіляє читання і запис між серверами MySQL: встановлення, hostgroups, query rules і перевірка балансування. Дедлоки InnoDB: діагностика блокувань і їх усунення Чому виникають дедлоки в InnoDB, як читати SHOW ENGINE INNODB STATUS і які правила в коді знижують кількість блокувань. Too many connections в MySQL: ліміти і витоки з'єднань Що означає помилка Too many connections в MySQL, як перевірити ліміт max_connections і знайти витоки з'єднань у коді. Оновлення MySQL 5.7 до 8.0: порядок дій і підводні камені Як оновити MySQL 5.7 до версії 8.0 без втрати даних: перевірка сумісності, порядок команд і поширені пастки після апгрейду. ibdata1 росте: як звільнити місце на диску в MySQL Чому росте файл ibdata1 у MySQL, як перевірити, що займає місце, і як безпечно зменшити спільний табличний файл.