Один из моих клиентов находится на довольно большом блоге с точки зрения количества постов и трафика. Я пытаюсь уменьшить ее базу данных до приемлемого размера, и одна вещь, которая набирает обороты, это буквально десятки тысяч пост-ревизий.
Я уже установил конфигурацию Wordpress, чтобы ограничить количество ревизий в будущем двумя:
define('WP_POST_REVISIONS', 2);
Но я хочу удалить все существующие ревизии.
Вопрос 1 : Безопасно ли напрямую удалять все строки в таблице wp_posts, которые имеют ревизию post_type? (Я видел противоречивые ответы на этот вопрос - но я бы хотел просто сделать это таким образом, если это безопасно).
Вопрос 2 : … и это только уместно, если я НЕ должен просто сделать прямое удаление из вопроса один:
Я нашел этот ответ, где songdogtech предоставляет запрос к базе данных для безопасного удаления, но (1) он специально предназначен для ответа на многосайтовый вопрос (это отдельный сайт) и (2) я только что обновил сайт до 3.6, который включал изменения базы данных , (Итак, я не достаточно опытен в чтении запросов к базе данных, чтобы точно знать, что там происходит, и будет ли это работать для одного сайта в WP 3.6
источник
1. Backup DB 2. Backup DB Again
Мне нравится эта часть, +1 за это.$ wp post delete $(wp post list --post_type='revision' --format=ids)
Детали, представленные к настоящему моменту, в лучшем случае неполные, и запрос a, b, c не является хорошим - потенциально даже опасным. Он забывает учитывать множество потенциальных зависимостей. Существует полное обсуждение и лучше запросов здесь
Также есть пересмотренная версия запроса, которая должна быть намного лучше, но тестировать в среде разработчиков с низким уровнем риска и резервном копировании:
В частности:
Этот запрос обрабатывает более старые данные, где WordPress может использовать один и тот же object_id в таблице wp_term_relationships как для публикации, так и для ссылки. Запустив другие версии этого запроса a, b, c, вы также можете непреднамеренно удалить данные ссылки. Это не такая большая проблема с более новыми установками WordPress.
Если вы запускаете эту версию запроса и получаете 0 удалений, это просто означает, что в вашей таблице wp_term_taxonomy нет записей 'link_category'. Вы можете проверить, проверив эту таблицу, а затем просто удалите последнюю строку и снова выполните запрос.
Но убедитесь, что вы выполняете резервное копирование, тестирование и проверку результатов, прежде чем использовать их на рабочих данных. Этот запрос занял одну из моих раздутых таблиц wp_posts с 300 МБ до 5 МБ после оптимизации.
источник
Запустите SQL-запрос:
ПРИМЕЧАНИЕ. Приведенный выше запрос «просто удаляет сообщение, помеченное как ревизия. Если по какой-то причине вы связали ревизию с тегом или категорией, которая была удалена при публикации окончательной публикации, у вас будут дополнительные записи в других таблицах, таких как термины ». Правильный запрос для безопасного удаления всех ваших ревизий выглядит следующим образом (при необходимости измените префикс таблицы):
источник