↩️ На главную

Как почистить базу данных в Linux: SQL-инструменты

11.12.2025 | Статья из категории: mysql

SQL-команды почистить базу данных в Linux

Бывает: запустил 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.




Категории:

Категории

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку статей

Посетителей сегодня: 0
о блоге | карта блога

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA