Уменьшаем базу MySQL на WordPress

Ну вот я и добрался до своего блога. С моим графиком работы писать статьи или уроки все затруднительнее. В итоге данное себе обещание писать хотя бы по одной статье в день было нарушено.

И вот, открыв свою электронку, чтобы почитать комментарии с блога, я обнаружил извещение от своего хостера, в котором он грозил снести мой блог, если я срочно не уменьшу базу данных. К слову, в пункте договора раньше хостер не указывал лимит базы, ограничиваясь лишь дисковым пространством (у меня оно 3 Гигабайта).  Почему он решил сменить в одностороннем порядке условия договора остается лишь только догадываться.  Расширять лимит, платя в месяц дополнительный рубль за каждый лишний МВ базы как-то глупо. У меня лимит превышен был всего на 34 МВ, вроде бы небольшие деньги. Но это автоматически означало бы, что статьи новые на блоге не будут публиковаться. Да и комментарии отключить, чтобы не засорять и так сильно распухшую базу MySQL.

Итак, мысленно подготовившись сменить хостера (что я все равно сделаю),  решил немного его проучить в рамках навязанного договора. Поставил лимит в 100 МВ для базы – отлично, значит уменьшим базу до этого лимита.

Давайте немного окунемся в теорию почему база так засоряется. Популярные CMS (сужу по WP,Drupal, joomla и Битрикс) создают черновики ваших статей.  Это очень удобно для автора – не опубликовали статью в результате ошибки? Ну и что? Восстановим ее из резервной копии.  Потом эти черновики можно удалить и вроде бы все. Но база считает иначе – она все равно записывает в свои поля эти черновики. И удалить их нужно уже именно из базы.

Второй момент связан уже с развитием самого ресурса. Вы добавляете или удаляете материал, модерируете комментарии – вроде бы полностью контролируете ваш  сайт. Однако есть маленькое  «но» — размер базы все равно будет увеличиваться от всех этих операций! Ради интереса сделайте  дубликат вашего сайта и разверните его на Денвере или том же WAMPе.  Потом безжалостно сотрите с него все материалы и посмотрите размер базы в MySQL. Результат вас несколько обескуражит J.

В общем, суть вы поняли –базу нужно оптимизировать.  Для начала вам нужно будет сделать бэкап своей базы с хостинга.  Наверняка вы это умеете делать и поэтому я не заостряю на данном пункте внимание.  Теперь убедитесь  в том, что хостер вас не обманывает –посмотрите размер ваших таблиц в PhpMyAdmin. Хотя, например, у меня она переделана и не отображает эти сведения. Что ж, если у вас подобная ситуация, просто выполните  SQL  запрос к нужной таблице :


SHOW TABLE STATUS;

Эта команда вызовет кучу информации по вашей базе ( лично я бы все-таки сделал выборку по размеру), в которой вы можете увидеть и  ее размер.

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

Тперь наберите и выполните следующий запрос (условимся, что будем обращаться к wm_posts):


DELETE FROM wp_posts WHERE post_type = "revision";

Выполнив этот запрос, вы подчистите таблицу от мусора копий.

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

Вообще, забегая несколько вперед, скажу, что я сам виноват в своих бедах.  Я не обратился к хостеру с просьбой предоставить мне cron. Кто не знает, это планировщик заданий в никсах. Иными словами, вы можете написать скрипт, который cron будет запускать, допустим, раз в неделю в 3 утра. Итог – у вас постоянно оптимизированная база (и не только). Как это сделать я напишу в другой статье.

Для подобной оптимизации таблиц служит, как нетрудно догадаться, команда OPTIMIZE TABLE  имя_таблицы.  В нашем случае мы будем оптимизировать опять же wp_posts


OPTIMIZE TABLE wp_post;

Запускаете команду и ждете ее окончание. Все, ваша база уменьшилась, причем значительно. Например, моя вместо 134 МВ стала весить всего 29 МВ.

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

Для тех, кто  боится делать руками подобные запросы, есть плагин WP_Optimize. Его я рассматривать не буду, так как там все предельно просто. Кроме того, не хочу перегружать движок лишними плагинами. Гораздо лучше раз потратить десять минут на настройку cron, нежели потом воевать с хостером, как это случилось со мной.


Яндекс.Метрика