8 полезных SQL-хаков для WordPress

8 полезных SQL-хаков для WordPress
За последние 10 лет база данных MySQL приобрела большую популярность в сети. Все блоги WordPress работают на базе данных MySQL, в которой содержатся посты блога, установки, комментарии и еще много чего другого.
Хотя и имеется достаточно плагинов с помощью которых можно решить некоторые проблемы, но иногда у вас нет другого выбора, кроме как выполнить SQL-команды в PhpMyAdmin или непосредственно в базе данных через SSH. Итак, давайте рассмотрим 8 полезных SQL приемов для WordPress. В каждом пункте этого поста сформулирована проблема, предложено ее решение и его объяснение.

1. Создание резервной копии базы данных
Создание резервной копии базы данных
Проблема. Все советы, приведенные в этом посте, были проверены, но я все равно не советую вам применять их, если вы предварительно не создали резервную копию своей базы данных MySQL.

Решение. Для создания резервной копии вашей базы данных WordPress вручную:

1. Войти в PhpMyAdmin и выберите вашу базу данных WordPress.
2. После этого нажмите кнопку "Экспорт", расположенных в горизонтальном меню.
3. Выберите метод сжатия (лично я использую GZIP), и нажмите кнопку "Выполнить".
4. Ваш браузер спросит вас, хотите ли вы скачать архив. Конечно, выберите "Да", а затем сохранить его на жестком диске.

Объяснение. Есть более простой способ создания резервной копии базы данных WordPress с помощью плагина WP-DB-Backup. Если вы используете WordPress, то вам нужно обязательно установить этот плагин, если вы еще этого не сделали, и периодически создавать резервные копии своих данных.

2. Пакетное удаление редакций записей
Пакетное удаление редакций записей
Проблема. Редакции записей - это новая функция в WordPress 2.6, которая очень полезна, но при этом увеличивает размер вашей базы данных MySQL. Конечно же, можно вручную удалить редакции записей, но это будет очень долгая и нудная работа.

Решение. Есть очень простое решение этой проблемы: можно выполнить пакетное удаление редакций записей с помощью простого запроса SQL. Если у вас очень много постов, то вы не поверите своим глазам – ваша база данных уменьшится вдвое!

1. Войти в PhpMyAdmin и выберите вашу базу данных WordPress.
2. Нажмите кнопку "SQL". Вставьте следующий код в окно SQL команды:

DELETE FROM wp_posts WHERE post_type = "revision";

3. Выполните её. В зависимости от того, сколько постов в вашей базе данных, вы можете съэкономить много драгоценного пространства!

Объяснение. В таблице wp_posts есть поле с названием post_type. В этом поле может встречаться один из таких параметров, как «post», «page» или «revision». Если мы хотим избавиться от редакций записей, то нужно выполнить команду удаления всех записей в таблице wp_posts, в которых поле post_type имеет параметр «revision».

3. Удаление 5000 спам-комментариев за одну секунду
Удаление 5000 спам-комментариев за одну секунду
Проблема. Реальная история: один мой друг недавно создал свой собственный блог и начал его продвигать в Интернете. Через несколько недель кропотливой работы он решил отдохнуть и провел несколько дней в отпуске без доступа к Интернету.

Когда он вернулся домой и посмотрел на свой блог, то увидел… 5000+ комментарий, ожидающих проверки! Конечно же, большинство из них были спамом, но ему в самом деле пришлось проверить их все, чтобы не удалить случайно нормальный комментарий одного из своих постоянных читателей.

Решение. К счастью, мой друг рассказал мне об этой проблеме со спамом. Он потратил уже около 45 минут, удаляя спам, когда я показал ему этот полезный SQL прием.

1. Войдите в PhpMyAdmin и выберите вашу базу данных WordPress.
2. Нажмите кнопку "SQL". Вставьте следующий код в окно SQL команды:

DELETE FROM wp_comments WHERE comment_approved = '0';

3. Прощайте плохие комментарии!

Объяснение. Таблица wp_comments содержит поле с названием comment_approved, которое является булевым значением (1 или 0). Одобренные комментарии имеют значение 1, а ожидающие проверки – значение 0. Выполнив указанную выше команду, мы просто удаляем комментарии, которые еще не были одобрены.

Осторожно. Это очень полезное решение, но если вам нужно удалить миллионы спам-коментариев, то эта команда может также удалить нормальные комментарии, которые еще не прошли проверку. Если вы еще не используете плагин Akismet, установите его для предотвращения спама.

4. Изменение автора поста
Изменение автора поста
Проблема. Когда вы устанавливали WordPress, была создана учетная запись «admin». Некоторые блоггеры делают ошибку, оставляя эту учетную запись без изменений и создавая посты под админом, пока не осознают, что это делает их посты безличными.

Решение. На изменение автора каждого поста уйдет много времени. К счастью SQL может помочь вам справиться с этой задачей:

1. Войдите в свой PhpMyAdmin и выберите вашу базу данных WordPress.
2. Во-первых, мы должны получить ID всех пользователей. Чтобы сделать это, откройте командную строку SQL и выполните следующую команду:

SELECT ID, display_name FROM wp_users;

3. PhpMyAdmin отобразит список идентификаторов пользователей Вашего блога. Допустим, что NEW_AUTHOR_ID идентификатор недавно созданный автором, и OLD_AUTHOR_ID это оригинальный ID учетной записи Администратора.
4. После того, как вы найдете идентификаторы NEW_AUTHOR_ID и OLD_AUTHOR_ID , запустите следующую команду:

UPDATE wp_posts
SET post_author=NEW_AUTHOR_ID
WHERE post_author=OLD_AUTHOR_ID;

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

5. Восстановление пароля вручную
8 полезных SQL-хаков для WordPress
Проблема. Для того чтобы защитить свои блоги, люди выбирают сложные пароли, например: u7*KoF5i8_. Это хорошо, но мне приходилось слышать немало историй о том, как люди забывали свои пароли админа.

Решение. Если вы потеряли пароль, WordPress может выслать вам по электронной почте ссылку для восстановления пароля. Но если у вас больше нет доступа к ящику, записанному в базе данных WordPress, или вы просто хотели бы все сделать с помощью простой команды, то выполните следующее:

1. Войдите в свой PhpMyAdmin, выберите WordPress базы данных и откройте вкладку SQL.
2. Вставьте следующую команду (предполагается, что ваше имя пользователя "Администратор"):

UPDATE `wp_users`
SET `user_pass` = MD5('PASSWORD')
WHERE `wp_users`.`user_login` =`admin` LIMIT 1;

3. После того как вы запустите скрипт Ваш пароль будет успешно заменен на следующий: "PASSWORD".

Объяснение. Пароли пользователей хранятся в таблице wp_users. Для защиты пароля используется контрольная сумма MD5.
Мы должны выполнить запрос SQL «UPDATE» и использовать встроенную функцию MySQL «MD5()», чтобы преобразовать наш пароль в MD5 и затем обновить его. Оператор «WHERE» позволяет обновить только пароль админа. Такой же запрос без оператора «WHERE» приведет к обновлению всех паролей!

6. Изменение имени домена WordPress блога
Изменение имени домена WordPress блога
Проблема. Хотя это и не рекомендуется, возможно, когда-нибудь вы захотите сменить свое имя домена, сохранив блог и все его данные. Ввиду того, что WordPress регистрирует ваше имя домена в своей базе данных, вам придется сменить базу данных, чтобы подключить новое имя домена к своему блогу WordPress.

Решение.

1. Как вы уже могли догадаться, первое, что необходимо сделать это войти в свой PhpMyAdmin и выбрать вашу базу данных WordPress.
2. Нажмите кнопку "SQL". Для того чтобы изменить свой WordPress URL выполните эту команду:

UPDATE wp_options
SET option_value = REPLACE(option_value, 'http://www.oldsite.ru', 'http://www.newsite.ru')
WHERE option_name = 'home' OR option_name = 'siteurl';

3. Затем, мы должны заменить относительные URL (GUID) каждого поста. Следующая команда сделает эту работу:

UPDATE wp_posts
SET guid = REPLACE(guid, 'http://www.oldsite.ru','http://www.newsite.ru');

4. Мы почти у цели. Последнюю вещь которую необходимо сделать это поиск и замена в wp_posts таблице, чтобы убедиться, что там нет абсолютных URL:

UPDATE wp_posts
SET post_content = REPLACE(post_content, 'http://www.oldsite.ru', 'http://www.newsite.ru');

5. Готово. Вы можете войти в свой WordPress блог, используя ваш новый URL.

Объяснение. Для простого изменения имени домена я воспользовался мега-полезной функцией MySQL «replace», которая позволяет заменить один термин другим.

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

Решение.

1. На этот раз, не нужно заходить в PhpMyAdmin. Просто откройте файл footer.php в вашей теме и добавьте следующие строки кода:

<?php if (is_user_logged_in()) { ?>
<?php echo get_num_queries(); ?> queries in <?php timer_stop(1); ?> seconds.
<?php } ?>

2. Сохраните файл и зайдите на ваш блог. Внизу страницы вы увидите число запросов, сделанных к базе WordPress, а также время затраченное на них.

Объяснение. Создается впечатление, что многие пользователи WordPress и не подозревают о существовании этой функции. Функция get_num_queries() показывает количество запросов, выполненных во время загрузки страницы.
Учтите, что этот код покажет количество запросов только для пользователей, вошедших в систему, так как обычным посетителям и поисковым ботам нет необходимости знать об этом. Но если вам захочется выставить эти данные на всеобщее обозрение, просто удалите условие if (is_user_logged_in()).

8. Восстановление базы данных WordPress
Восстановление базы данных WordPress
Проблема. Допустим, по какой-либо причине (например, взлом или проблема с обновлением), вы потеряли данные своего блога, или они были нарушены. Если у вас есть резервная копия (а я надеюсь она у вас есть!), то вам нужно будет импортировать ее в базу данных WordPress.

Решение.

1. Войдите в PhpMyAdmin и выберите вашу базу данных WordPress.
2. Нажмите кнопку "Import" в горизонтальном меню.
3. Нажмите кнопку "Browse" и выберите последнюю резервную копию базы данных на Вашем жестком диске.
4. Нажмите кнопку "Execute". Если все прошло хорошо, ваша база данных полностью готова к работе.

Перевод статьи 8 Useful WordPress SQL Hacks.

Рубрика: Настройка WordPress | сегодня

Предыдущие записи из рубрики `Настройка WordPress`

9 комментариев

Deimos, сегодня

От себя добавлю кое что по 7 пункту:
чтобы WordPress отображал не только количество запросов к базе и время загрузки страницы, но и количество потребляемой оперативной памяти используйте такой код:
< ?php echo "MySQL: " . get_num_queries() . " запр. / "; timer_stop(1). "сек."; if ( function_exists('memory_get_usage') ) echo ' Память: ' . round(memory_get_usage()/1024/1024, 2) . 'MB '; ?>

ОтветитьОтветить
Бульдог, сегодня

Я на своем блоге сделал так - в файле wp_config.php вставил код: define('WP_POST_REVISIONS', false);
Собственно это как раз и запретило хранить старые версии страницы, которые лично мне просто ну совсем не нужны. Это предложение по пункту 2.

ОтветитьОтветить
Deimos, 16.06.2009 в 05:29

Добавление строки define(’WP_POST_REVISIONS’, false) в файле wp_config.php отменяет создание ревизий, но не вычищает старые из базы, так что если Вы добавили define(’WP_POST_REVISIONS’, false) до первой публикации в блоге, то все нормально, а если уже публиковали, а потом добавили, то надо еще вычистить старые ревизии из базы.

ОтветитьОтветить
IgorOsa, 16.06.2009 в 10:50

Советы полезные, но думаю не все разбираются в тонкостях MySQL. Большую часть описанных приемов и некоторые другие можно выполнить плагинами, описанными в одном из моих постов - http://igorosa.com/optimiziruem-wordpress/

ОтветитьОтветить
Илья, 19.06.2009 в 02:37

В 5 хаке надо исправить:

UPDATE `wp_users`
SET `user_pass` = MD5('PASSWORD')
WHERE `wp_users`.`user_login` ="admin" LIMIT 1;

то есть имя пользователя надо писать в обычных кавычках, а не одинарных. Возможно это как то зависит от версии MySQL но у меня только так сработало

ОтветитьОтветить
alexpts, 29.06.2009 в 18:02

В ВП 2,8 функция memory_get_usage() похоже не работает.

ОтветитьОтветить
Igor Bredikhin, 26.11.2009 в 09:45

П.2
DELETE FROM wp_posts WHERE post_type = "revision";
Так не совсем правильно

Лучше так

DELETE `p`, `pm`, `c`, `tr`
FROM `wp_posts` AS `p`
LEFT JOIN `wp_postmeta` AS `pm`
ON `p`.`ID` = `pm`.`post_id`
LEFT JOIN `wp_comments` AS `c`
ON `p`.`ID` = `c`.`comment_post_ID`
LEFT JOIN `wp_term_relationships` AS `tr`
ON `p`.`ID` = `tr`.`object_id`
WHERE
`p`.`post_type` = 'revision';

ОтветитьОтветить
Светик, 26.11.2009 в 10:00

Igor Bredikhin,
Спасибо огромное
а то от DELETE FROM wp_posts WHERE post_type остаются осиротевшие записи в wp_term_relationships

ОтветитьОтветить
Елена, 07.12.2015 в 15:02

Нужный материал, я сейчас как раз занимаюсь ускорением блога и воспользуюсь вашими советами, спасибо!

ОтветитьОтветить

Комментировать