Какие таблицы безопасны для очистки?

40

Я унаследовал клиентский сайт с чрезвычайно большой базой данных без всякой причины. Существует умеренное количество контента и очень мало включенных модулей. Однако база данных слишком велика, чтобы ее можно было легко перемещать, и я хочу ее очистить.

Я очистил стандартные таблицы кеша, системный журнал и журнал доступа.

Есть ли другие таблицы, которые я могу безопасно обрезать на стандартном сайте Drupal?

Найджел Уотерс
источник
1
Вы можете отсортировать таблицы по размеру в phpmyadmin. Попробуйте, а затем посмотрите, какие таблицы самые большие, и сообщите об этом здесь. Например, я видел огромные сеансовые таблицы, которые по какой-то причине не очищаются. Это то, что вы могли бы пояснить, если вы можете жить с пользователями, которым необходимо снова войти в систему (и, возможно, потерять введенные данные формы, если они находятся на сайте, поэтому вы можете захотеть согласовать это с пользователями)
Бердир,
Еще одно замечание: все ответы ниже, в которых упоминается усечение {cache_form}, не совсем верны. Это не настоящая таблица кеша. Он содержит в форме представления заявки. Если вы удалите все данные в этой таблице, ваш пользователь может потерять данные. Надлежащее действие с этой таблицей - истечение срока действия записей.
mpdonadio

Ответы:

21

Используйте модуль резервного копирования и переноса , он поставляется с хорошими настройками по умолчанию для пропуска ненужных данных . По умолчанию он создает резервную копию БД без кеша, сторожевого таймера и некоторых других таблиц.

Если это не поможет, взгляните на phpMyAdmin и скажите нам, в каких таблицах много записей.

BetaRide
источник
1
Это первое место, куда я пошел. Тем не менее, база данных находится на концерте и не будет делать резервную копию с помощью этого метода. Мое намерение состоит в том, чтобы очистить базу данных, чтобы я мог регулярно использовать резервное копирование и миграцию. По сути, мне интересно, есть ли еще таблицы, которые я могу очистить (которые по умолчанию не пропускаются BAM).
Найджел Уотерс
Если у вас есть доступ к командной строке, вы можете использовать drush для запуска резервного копирования и миграции. Или получите доступ к mysql из командной строки (пример: mysqldump --host = your.host.com --user = db_user --compress --password your_pw> dump.sql) Таким образом, вы не столкнетесь с таймаутами. В целом очистка без резервной копии не очень экономит. Вы можете легко получить неработающую страницу и не сможете вернуться назад.
BetaRide
Проблема не в тайм-аутах. Я знаю, что могу легко запускать резервные копии через ssh / drush. Я хотел бы почистить базу данных, поскольку за последние несколько лет ее видели многие, и там много ненужного. Мне просто нужно знать, какие таблицы я могу безопасно очистить (не знаю, как сделать резервную копию или переместить мой сайт).
Найджел Уотерс
@BetaRide является верным, по умолчанию те, что исключает BAM, являются безопасными. Другие могут иметь или не иметь фактические данные.
mpdonadio
22

Drupal 7 таблиц, которые можно исключить

Вот список таблиц в Drupal 7, которые вы можете либо очистить (чтобы уменьшить размер базы данных), либо безопасно исключить для выполнения миграции (как в вопросе о том, как уменьшить размер локально экспортируемой базы данных, чтобы обойти ограничение на импорт моего сервера? ):

  • accesslog
  • партия
  • все таблицы, связанные с кешем, такие как:
    • кэш *
    • cache_block
    • cache_content
    • cache_filter *
    • cache_form
    • cache_calendar_ical
    • cache_menu *
    • cache_page *
    • cache_views
    • * _cache, такой как features_cache или views_data_object_export_cache
  • ctools_views_cache
  • ctools_object_cache
  • devel_queries
  • devel_times
  • наводнение
  • история
  • очередь
  • различные таблицы search_ *, такие как:
    • search_dataset
    • search_index
    • search_keywords_log
    • search_total
  • семафор
  • сессий
  • сторожевая собака
  • webform_submitted_data

Обычно таблицы, такие как search_indexи watchdogзанимающие много места в базе данных, поэтому простое удаление этих двух таблиц уже может иметь огромное значение.

Другие таблицы, которые могут быть исключены

Проверьте размер оставшихся таблиц и определите, какие из них являются самыми большими по размеру.

Как правило, вы можете найти таблицы сеансов, для которых нет процедуры очистки. Такие таблицы вы, вероятно, также можете исключить.

Модуль резервного копирования и миграции

Чтобы еще больше уменьшить сложность задачи, как описано в разделе « Как уменьшить размер локально экспортируемой базы данных, чтобы обойти ограничение импорта моего сервера? », Посмотрите также модуль « Резервное копирование и миграция ». Вот цитата со страницы проекта (здесь добавлена ​​жирная разметка):

Резервное копирование и восстановление базы данных, кода и файлов Drupal MySQL или миграция сайта между средами. Backup and Migrate поддерживает сжатие gzip, bzip и zip, а также автоматическое резервное копирование по расписанию.

С помощью Backup and Migrate вы можете создать дамп некоторых или всех ваших таблиц базы данных для загрузки файла или сохранения в файл на сервере или вне его, а также восстановить из загруженного или ранее сохраненного дампа базы данных. Вы можете выбрать, какие таблицы и какие данные для резервного копирования и кэширования данных исключены по умолчанию .

И даже больше: если ваша локальная среда (например, Win или Mac) отличается от ОС, на которой работает сервер вашего размещенного веб-сайта (например, Linux), то эти различия между ОС предполагают потенциальные дополнительные проблемы. У меня был хороший опыт использования модуля Backup and Migrate между различными операционными системами, который не вызывал проблем (работал нормально) в ситуациях, когда типичный экспорт / импорт MySql не удался раньше.

Pierre.Vriens
источник
Можно добавить, что любые таблицы с cache_добавленными или _cacheдобавленными значениями также безопасны для усечения, например, features_cacheи views_data_object_export_cacheт. Д.
Beebee
1
Словом, данные таблицы поиска могут быть исключены, но может потребоваться очень и очень много времени, чтобы перестроить индексы на больших сайтах. Оцените это на индивидуальной основе.
mpdonadio
2
Кроме того, выдержка B & M о кэшированных данных немного неверна. Когда он включен на сайте, он исключает кеш-таблицы. Однако, если вы добавляете модуль после настройки B & M, таблицы кеша могут не добавляться в список исключаемых данных. Я видел это много, много раз, обычно, когда я переопределяю настройки в профиле по умолчанию.
mpdonadio
@MPD: спасибо за этот интересный отзыв (еще не знал об этом!). О таблице поиска: действительная точка. Но лично я всегда буду придерживаться подхода перестройки: он помогает обойти ограничение и гарантирует, что индекс соответствует фактическому содержанию в целевом объекте. Что касается вашего второго комментария: отрывок - это вырезанная из прошлого страница проекта, так что, возможно, вы захотите сообщить об этом в своей очереди вопросов (Drupal.SE не место для сообщений об ошибках и т. Д., Верно?) ,
Pierre.Vriens
@ Pierre.Vriens Соответствие контента не должно иметь значения, если у вас запущен cron и убедитесь, что индексирование выполнено. B & M, уверен, что это известная проблема. Кроме того, раздел о данных сеанса не на 100% корректен. Эта таблица становится большой, потому что время сеанса по умолчанию составляет около трех недель; _drupal_session_garbage_collectionбудет держать эту таблицу в чистоте, основываясь на системных настройках.
mpdonadio
19

По моему опыту, я очищаю все таблицы «cache_ *».

  • плюс "сторожевой таймер", если мне наплевать на прошлые логи Drupal
  • плюс "accesslog", если меня не волнуют зарегистрированные пользователи
  • плюс «поиск», если меня не волнует содержимое индексированных узлов
thePanz
источник
1
То же самое здесь, я также сессий.
Алекс Вебер
2
Примечание для тех, кто пытается это сделать: сначала создайте резервную копию. И не бросайте таблицы, скорее Пустой или Усеченный.
timofey.com
9

Иногда я запускаю этот SQL, чтобы следить за ростом верхних таблиц:

SELECT * 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA =  'yourdbnamehere'
ORDER BY table_rows DESC 
Уве
источник
Какой столбец я должен проверить на рост? Вы имеете в виду TABLE_ROWS
Bala
8

Сторожевой таймер и сеансы также могут быть очищены, имейте в виду, что все пользователи будут отключены.

Attiks
источник
6

С MySQL вы можете делать забавные вещи с программой mysqldump, чтобы экспортировать базу данных полностью или по частям. Например, это просто экспортирует структуру:

mysqldump -u root -pBatteryHorseStapleObviously -h some_host --no-data dbname > ~/dbname.sql

Затем вы можете использовать опцию «игнорировать таблицу» для дальнейшего экспорта данных, например,

mysqldump -u root -pBatteryHorseStapleObviously -h some_host --ignore-table=dbname.huge_table --ignore-table=dbname.massive_table --ignore-table=dbname.useless_table some_host >> ~/dbname.sql

Это помещает данные в конец более раннего файла, игнорируя некоторые массивные таблицы.

Если вам затем понадобятся массивные таблицы, вы можете экспортировать их в другой файл, используя описанный выше подход, затем вы можете импортировать их порциями (хотя может потребоваться проверка fk).

Вы загрузили файл перед загрузкой, или это глупый вопрос?

Кот Генри
источник
5

Используйте модуль OptimizeDB для очистки таблиц кеша. Администрирование базы данных также полезно.

Не забудьте иметь резервную копию баз данных.

М ама Д
источник
база данных теперь 14Mo, я использовал OptimizeDB, спасибо еще раз
Митч
@ Приветствую тебя
М ам D
2

не супер специалист по этому вопросу, но делиться своим опытом ... если вы не используете резервное копирование и перенастройку модуль и вручную экспортировать некоторые таблицы можно откачать / усечения бы watchdog, cache, cache_menu, cache_block, cache_content, так cache_formкак они могут содержать большое очистка кэшированного содержимого, которое, я полагаю, не повредит ... но опять же это мой опыт, и я не столкнулся с проблемами или потерей данных из-за этого.

optimusprime619
источник
2

Некоторые идеи:

  • Совершенно другой подход заключается в создании RSS-каналов с использованием представлений данных, которые вы хотите сохранить. Затем создайте новую установку Drupal и импортируйте эти данные с помощью Feed API .
  • И просто другой подход: наймите студента и позвольте ему / ей перенести данные вручную в вашу новую установку.
  • Или вот это: расскажите подробнее о том, какие таблицы очень большие и в чем причина этого (если вы знаете).
BetaRide
источник
2

Проверьте, example.drushrc.phpкакой список этих:

$options['structure-tables']['common'] = array('cache', 'cache_*', 'history', 'search_*', 'sessions', 'watchdog');
$options['skip-tables']['common'] = array('migration_*');

Их можно очистить с точки зрения перемещения базы данных между различными средами (особенно, когда вы работаете с большими базами данных ). Однако вам все равно нужно понимать, что вы очищаете.

kenorb
источник
1

Дополнительные таблицы, которые можно очистить:

  • партия
  • webform_submitted_data

Другие вещи, которые могут занимать довольно много места: - старые версии вашего контента (невозможно очистить с помощью простого усечения). - locales_source и locales_target. Если у вас есть языки, которые больше не используются, или переводы строк для модулей, которые вы больше не используете. Эти столы, кажется, никогда не убираются.

fietserwin
источник