Бывает: запустил IoT-панель, забыл про логи, а через месяц база раздулась до 2 ГБ, а сайт падает с 500-й ошибкой. Или решил начать блог заново — а старые статьи всё ещё в базе, как призраки прошлого.
Не беда! Вот практический гайд, как быстро найти, почистить и оптимизировать MySQL/MariaDB — без паники и без удаления всего нафиг.
1. Сначала — посмотри, что жрёт место
Подключись к 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).
2. Удали всё насовсем (если блог новый)
Хочешь начать с чистого листа? Тогда:
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 и не оставляет следов.
3. Удали только старые данные
Если хочешь оставить последние 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;
4. Почисти дубли (если такие есть)
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;
5. Оптимизируй таблицы после чистки
MySQL не всегда сразу освобождает место. Помоги ему:
OPTIMIZE TABLE articles, sensor_data, logs;
💡 У меня после такой оптимизации база 1.2 ГБ уменьшилась до 200 МБ. А сайт перестал «думать» по 10 секунд перед загрузкой.
6. Добавь автоочистку (cron)
Создай скрипт /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
7. Полезные команды на будущее
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.
Комментарии
Пока нет комментариев. Будьте первым!