Категории

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

2025-12-11 12:56:35 | Статья из категории: Создание сайтов

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. Полезные команды на будущее

Важно!

Перед любой чисткой — сделай бэкап:

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