Бывает: запустил IoT-панель, забыл про логи, а через месяц база раздулась до 2 ГБ, а сайт падает с 500-й ошибкой. Или решил начать блог заново — а старые статьи всё ещё в базе, как призраки прошлого.
Не беда! Вот практический гайд, как быстро найти, почистить и оптимизировать MySQL/MariaDB — без паники и без удаления всего нафиг.
Подключись к MySQL:
sudo mysql -u root
И выполни:
SELECT table_name AS "Таблица", ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "Размер (MB)" FROM information_schema.TABLES WHERE table_schema = "твоя_база" ORDER BY (data_length + index_length) DESC;
Замени твоя_база на имя своей БД (например, build).
Хочешь начать с чистого листа? Тогда:
SET FOREIGN_KEY_CHECKS = 0; TRUNCATE TABLE articles; TRUNCATE TABLE code_posts; TRUNCATE TABLE comments; TRUNCATE TABLE article_tags; TRUNCATE TABLE tags; SET FOREIGN_KEY_CHECKS = 1;
TRUNCATE — это как «стереть и забыть». Он быстрый, сбрасывает id и не оставляет следов.
Если хочешь оставить последние 30 дней:
DELETE FROM sensor_data WHERE created_at < NOW() - INTERVAL 30 DAY; DELETE FROM logs WHERE created_at < NOW() - INTERVAL 7 DAY;
⚠️ Сначала проверь, сколько строк попадает под условие:
SELECT COUNT(*) FROM sensor_data WHERE created_at < NOW() - INTERVAL 30 DAY;
DELETE t1 FROM sensor_data t1 INNER JOIN sensor_data t2 WHERE t1.id < t2.id AND t1.sensor_id = t2.sensor_id AND t1.value = t2.value AND t1.timestamp = t2.timestamp;
MySQL не всегда сразу освобождает место. Помоги ему:
OPTIMIZE TABLE articles, sensor_data, logs;
💡 У меня после такой оптимизации база 1.2 ГБ уменьшилась до 200 МБ. А сайт перестал «думать» по 10 секунд перед загрузкой.
Создай скрипт /home/mazzick/cleanup_db.sh:
#!/bin/bash mysql -u builduser -p'твой_пароль' build -e " DELETE FROM logs WHERE created_at < NOW() - INTERVAL 7 DAY; OPTIMIZE TABLE logs; "
Сделай его исполняемым:
chmod +x /home/mazzick/cleanup_db.sh
И добавь в cron:
0 3 * * * /home/mazzick/cleanup_db.sh
SHOW DATABASES; — список всех базUSE имя_базы; — переключиться в базуSHOW TABLES; — список таблицDESCRIBE имя_таблицы; — структура таблицыSHOW GRANTS FOR 'builduser'@'localhost'; — посмотреть праваПеред любой чисткой — сделай бэкап:
mysqldump -u root -p build > /backup/build_$(date +%F).sql
А ещё помни: если сайт выдаёт 500 ошибку — смотри лог:
sudo tail -f /var/log/nginx/build.iotprof.ru.error.log
Часто причина — нет пользователя БД или неправильный пароль в config.php.
Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.
Комментарии
Пока нет комментариев. Будьте первым!