Лайки, посетители и подписчики на сайт!Подробнее

База данных WordPress, ее структура и таблицы

И снова здравствуйте! Приветствую всех своих читателей в новом 2012 году! Рано или поздно вебмастеру пригодятся технические знания, например, как устроен WordPress, как организована его структура и работа, где и какие файлы отвечают за определенные функции.

База данных WordPress, ее структура и основные таблицы

Но сегодня статья не о самой блог-платформе WordPress, а о базе данных, которая является неотъемлемой частью работы блога. Речь пойдет о структуре базы данных MySQL.

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

Поэтому я решил исправить ситуацию 😉 и в базе данных в таблице wp_comments для этого комментария сменить значение поля comment_post_ID. То есть сменить ID поста к которому отправлен комментарий на ID подходящей страницы. В этом абсолютно нет ничего сложного для знающего человека, а тем кто не сталкивался с этим предлагаю ознакомиться.

Из чего состоит база данных WordPress

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

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

Таблицы базы данных вордпресс

  1. wp_commentmeta
  2. wp_comments
  3. wp_links
  4. wp_options
  5. wp_postmeta
  6. wp_posts
  7. wp_terms
  8. wp_term_relationships
  9. wp_term_taxonomy
  10. wp_usermeta
  11. wp_users

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

  • Вы используете другую версию WordPress. На момент написания данного поста последней версией является 3.3.1. Я рекомендую своевременно обновлять вордпресс, с выходом новых версий исправляются ошибки, устраняются уязвимости, повышаются надежность, безопасность, функциональность.
  • Устанавливая плагины некоторые из них добавляют в базу данных свои таблицы. Тоже самое относится и к содержимому таблиц — плагины добавляют новые поля, строки и т.д.
  • В процессе установки был изменен префикс таблиц, в итоге немного отличаются названия.

Таблицы базы данных ВордПресс

Как я уже говорил, чистый, только что установленный движок содержит в своей базе данных таблицы, каждая из которых выполняет свои функции. Работая с БД я использую панель phpMyAdmin. Для того чтобы просмотреть содержимое таблицы нужно в ее строке нажать на кнопку Просмотр содержимого таблицы базы данных вордпресс, а чтобы редактировать внутреннюю строку таблицы — Изменение таблиц БД на WP. Впрочем все кнопки имеют всплывающие подсказки, так что проблем не должно возникнуть. Далее подробно о предназначении таблиц.

Таблица wp_commentmeta

Каждый комментарий, оставленный на блоге, содержит некую дополнительную информацию, которая хранится в этой таблице. Например, если установлен плагин для защиты от спама Akismet, то он будет записывать в нее свою информацию — одобрен комментарий или нет, а может и помечен как спам.

Таблица wp_commentmeta

Таблица wp_comments

Название говорит само за себя — в этой таблице хранятся оставленные комментарии к записям. Именно в этой таблице я переносил комментарий с одной страницы на другую. При установленном плагине Subscribe To Comments в ней будет дополнительное поле с переключателем подписки: Y — автор комментария следит за темой, N — нет. На скрине ниже я подчеркнул упомянутые строки таблицы:

Таблица wp_comments

Таблица wp_links

Эта таблица хранит ссылки (блогролл). Редактировать ее можно прямо из админки блога — добавлять и удалять ссылки. После установки WP она содержит ссылки на wordpress.org, на кодекс и другие, сейчас уже не могу вспомнить какие точно, т.к. все ссылки я удалил и соответственно таблица wp_links у меня абсолютно пустая, а в админке красуется «Ссылок не найдено»:

Таблица wp_links

Таблица wp_options

Хранит настройки Вордпресс, в том числе параметры доступные из консоли администрирования на одноименной вкладке Параметры. А так как после установки некоторых плагинов они добавляют свои настройки на эту вкладку, то и они хранятся в этой таблице. Кстати, таблица wp_options очень интересна для изучения, первые строки содержат общие настройки, а далее идут строки плагинов по мере их установки:

Таблица wp_options

Таблица wp_postmeta

Содержит огромное количество информации о записях и статичных страницах блога: информацию о прикрепленных файлах (изображения, видео и прочие), данные заполняемых полей при создании или редактировании постов. В их число также входят поля, которые появляются после установки различных плагинов. Например, содержимое полей Title, Description, Keywords плагина All in One SEO Pack хранится именно в таблице wp_postmeta.

Таблица wp_postmeta

Таблица wp_posts

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

Таблица wp_posts

Таблица wp_terms

Таблица содержит категории, теги и ссылки. Теги я не использую, ссылки все удалил, хотя в таблице все же присутствует строка «Ссылки», ее содержимое и предназначение осталось для меня непонятным:

Таблица wp_terms

Таблица wp_term_relationships

Ассоциативная связь записей с категориями и тегами, описанными в таблице wp_terms внутри базы данных Вордпресс. Таблица не предоставляет наглядную информацию, а всего лишь содержит строки с id записи и соответствующий id рубрики и тегов, поэтому скрин вставлять не буду.

wp_term_taxonomy

Опять же эта таблица связывает между собой категории, ссылки блогролла и теги воедино, а также устанавливает очередность и вложенность категорий (рубрик). Ведь рубрики могут быть родительскими и дочерними, вот таблица wp_term_taxonomy и отслеживает иерархию между ними. У меня нет дочерних рубрик на данный момент, поэтому в графе parent каждой строке присуждено одинаковое значение:

Таблица  wp_term_taxonomy

Таблица wp_usermeta

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

Таблица wp_users

И наконец я добрался до последней таблицы по-умолчанию — wp_users. Она содержит список зарегистрированных пользователей, их логин и пароль в зашифрованном виде, e-mail адрес, дату регистрации и еще парочку сведений.

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

Рубрика: Все о Wordpress
  1. Константин

    Кстати, о зарегистрированных пользователях. Зачем регистрируются боты? Бывают регистрации юзеров типа ufhfjfkjkj. Какая выгода? Ведь обратной ссылки или чего-то подобного они не получают.

    Ответить

  2. Юльчатка

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

    Ответить

  3. Webliberty

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

    Ответить

  4. Константин

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

    Ответить

  5. Маргарита

    Денис, а сколько дискового пространства может занимать сайт, типа моего? Если за 10 месяцев уже использовано 2000 МБ — это нормально?

    Ответить

  6. Webliberty

    Маргарита, ого, ничего себе! Думаю это очень много! У меня за 14 месяцев 365 Мб занято. Знаете что, мне кажется у Вас плагины для создания бэкапов много резервных копий составили, попробуйте последнюю самую свежую сохранить к себе на компьютер, а с хостинга лишние удалить. Да, и сжимайте изображения перед вставкой в записи, а также проверьте не сохраняются ли ревизии.

    Ответить

  7. Маргарита

    Webliberty, спасибо, обрадовали меня! Я так и почувствовала, что это как-то странно. Кое-что почистила, уже лучше. Надо еще с ревизиями разобраться.

    Ответить

  8. Пётр

    Пусть в блогосфере я человек новый, но ламером себя не считаю, а от БД я всё-таки далёк. Она есть и пусть себе будет, нечего её трогать. Как-то пришлось понервничать, когда случайно удалил базу данных через панель управления хостингом. Вот тогда я узнал о её существовании и предназначении. Восстановить удалось, но не сразу. Зато получил опыт, как говорится учатся на ошибках и теперь без надобности туда не лезу.

    Ответить

  9. Webliberty

    Пётр, все верно, если нет особой надобности, то лучше не трогать. А если уж прижмет, то обязательно делать резервные копии, чтобы потом быстренько восстановить.

    Ответить

  10. Александр

    Денис, спасибо. Действительно прекрасная статья. Как раз ищу информацию о том, в какой таблице размещает свои данные плагин All in One SEO Pack. Теперь знаю, в какой таблице он размещает сведения для постов. Никак не могу найти ответ на вопрос относительно того, где он размещает свои общие настройки для всего блога в целом (Ноme Title, Home Deccription и Home Keywords). Эти данные прописываются в настройках плагина, а не под каждым постом. Буду очень признателен за подсказку.

    Ответить

  11. Webliberty

    Александр, все глобальные настройки хранятся в таблице wp_options. Впрочем, чтобы найти нужную строку в этой таблице следует воспользоваться поиском. Скопируйте, к примеру, содержимое поля Home Deccription и выполните поиск этих слов в таблице wp_options — найдете нужную строку.

    Ответить

  12. Григорий

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

    Вы уже установили WordPress. Для переустановки, пожалуйста, сначала очистите старые таблицы в базе данных. ОШИБКА: Неверное имя пользователя. Забыли пароль?

    Я не знаю как правильно почистить базы. Я несколько раз удалял их и снова ставил. Но ничего не получается. В phpMyAdmin есть сообщение: Дополнительные возможности phpMyAdmin не настроены в полной мере, некоторые функции были отключены. Для определения причины нажмите здесь.

    Там для меня все сложно. Буду благодарен за помощь.

    Ответить

  13. Webliberty

    Григорий, попробуйте не полностью удалить базу данных, а только ее таблицы. Для этого выделите их и удалите. Также проверьте правильность заполнения названия БД, пароля и логина в файле настроек wp-config.php — скорее всего именно в нем проблема.

    Ответить

  14. Яна

    Денис, спасибо Вам в очередной раз за то, что пишете о сложных вещах таким человеческим языком! У меня никогда не работал плагин Subscribe To Comments, и его аналоги тоже не работали — комментарии не приходили на емейл к подписчикам. Мне пришлось поставить Дискус. Я вот думаю, а не в базе ли данных дело? Может быть здесь нужно было какие-то настройки поставить?

    Денис, еще вопрос. У меня в БД есть таблица wp_blc_links. В ней 2,370 записей, а весит аж 1,7 МБ (в то время, когда wp_commentmeta — 1,3 мб) И еще вопрос: таблица wp_comments у меня просто огромная — 9,136 комментария и вес 5,2 мб, что почти равняется таблице с основными постами — 5.8 МБ. Как почистить это все дело?

    Ответить

  15. Webliberty

    Яна, отвечаю на первый вопрос: дело не в БД, просто этот плагин не со всеми темами WP совместим, вот и приходится искать альтернативные варианты наподобие Дискуса.

    По второму вопросу могу ответить так: почистить можно способами, обозначенными в рубрике Оптимизация. Таблица wp_blc_links вероятно берет свое начало от старых версий WP, имеет вот такой своеобразный префикс или же создана каким либо плагином, в стандартной версии WP ее по-умолчанию нет. Думаю лучше ее не трогать не зная предназначение.

    Таблица wp_comments, а точнее ее размер, говорит об одном — у Вас много комментариев на блоге, это повод радоваться 😉

    Ответить

  16. Александр

    Спасибо за полезную информацию, но у меня такой вопрос. Почему в таблице wp-users кроме меня находится ещё куча пользователей, которых я не регистрировал на сайте и не давал им такое разрешение. И как мне их удалить? Если я их «тупо» снесу из таблицы, не повлияет это на работу блога? Заранее спасибо за ответ, буду ждать, с уважением Александр.

    Ответить

  17. Webliberty

    Александр, добрый день! Вам следует для начала проверить настройки, действительно ли регистрация запрещена. На странице Параметры -> Общие в панели управления проверьте пункт Членство — галочка должна быть снята напротив строки «Любой может зарегистрироваться».

    Чтобы удалить лишних пользователей не обязательно лезть в базу данных. В консоли на закладке Пользователи выберите все учетные записи, кроме своей (администратора) и выполните действие Удалить.

    Ответить

  18. Александр

    Webliberty, да у меня раньше была разрешена регистрация, но я её затем отменил. Значит теперь осталось только удалить «лишних». Спасибо за совет, с уважением Александр.

    Ответить

  19. Александр I

    Здравствуйте! Может не в тему, но вопрос о базах данных.

    Как создать на Вордпрессе несколько копий сайта с разными языками пользовательского интерфейса, но чтобы полезный контент у этих сайтов был абсолютно одинаковый. Например, доска объявлений на русском, украинском, белорусском и английском языках, но объявления на всех сайтах общие, независимо от того, с какой языковой версии сайта они были опубликованы. Заранее благодарю за ответ!

    Ответить

  20. Webliberty

    Александр I, здравствуйте, скорее всего вопрос касается не баз данных. Попробуйте воспользоваться плагинами для WP, которые переводят сайт на другие языки. Смотрите в сторону плагина WordPress Multilingual Plugin или ему подобных.

    Ответить

  21. Андрей

    Добрый день! Случилась проблема с паролем к БД. Поэтому нам не пришло в голову ничего лучше — чем удалить файл wp-config.php и заново зайти на сайт. Ну и теперь слетели все загруженные на сайт материалы — физически на сервере они лежат, но сайт их более не видит. Что делать, не подскажете?

    Ответить

  22. Webliberty

    Андрей, добрый вечер! Естественно использовать ранее созданную резервную копию и восстановить сайт. Любой более-менее приличный хостинг автоматически создает бэкапы и хранит их на своих серверах некоторое время.

    Ответить

  23. Александр I

    Я не понял зачем было «сносить» файл ./wp-config.php, тем более, что его можно было просто переименовать.

    С хостингами никогда не сталкивался (если речь идет о хостинге), но если речь идет не о пароле root от базы данных, то никаких проблем с его восстановлением нет. Заходите под root и меняете пароль. Или просите сделать это хостера (не знаю этой системы). А восстановить пароль root от MySQL можно так:

    Останавливаем MySQL:

    1
    
    /etc/init.d/mysql stop

    Запускаем службу с опцией --skip-grant-tables

    1
    
    mysqld_safe --skip-grant-tables &

    Подключаемся:

    1
    
    mysql -u root

    Вводим новый пароль для root, подтверждаем привилегии и выходим:

    1
    2
    3
    4
    
    mysql> USE mysql;
    mysql> UPDATE USER SET password=PASSWORD("новый-пароль-для-root") WHERE USER='root';
    mysql> FLUSH privileges;
    mysql> quit

    Перезапускаем MySQL:

    1
    
    /etc/init.d/mysql restart

    Входим:

    1
    
    mysql -u root -p

    Все. Для базы данных сайта, конечно должен быть другой пользователь. Дальше — для данного случая — берем из дистрибутива файл wp-config.php и вводим в него наши новые данные. Там где длинное тире — это двойное тире в консоли.

    Ответить

  24. Денис

    В базе данных Вордпресс пользователей меньше, чем зарегистрированных на сайте. Почему?

    Ответить

  25. Webliberty

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

    Ответить

  26. Анатолий

    Добрый день! Не подскажите такой вопрос. В базе данных есть таблица в которой хранится количество комментариев зарегистрированных пользователей? Можно как-нибудь узнать мне (администратору) их количество для каждого пользователя? Просмотрел вроде все таблицы, но нигде не нашёл таких данных. Заранее спасибо!

    Ответить

  27. zmoe

    А не подскажите, как почистить таблицу wp_options она у меня несколько мегабайт и кажется из за нее тормозит один старый сайт? 😮

    Ответить

  28. Webliberty

    Анатолий, в открытом виде такая информация не содержится в базе данных. Предлагаю выполнить SQL-запрос и вывести список всех пользователей (в том числе зарегистрированных) с количеством оставленных ими комментариев:

    1
    2
    3
    4
    5
    6
    
    SELECT  `comment_author` , COUNT( * ) AS amount
    FROM  `wp_comments` 
    WHERE  `comment_approved` =  '1'
    GROUP BY  `comment_author` 
    HAVING amount >0
    ORDER BY amount DESC

    zmoe, раньше я применял для этих целей плагин Clean Options, на данный момент он устарел и больше не поддерживается автором, поэтому лучше не рисковать. Посмотрите как можно почистить БД вручную — в этой статье в качестве примера я рассматривал таблицу wp_postmeta, но описанный способ подойдет и для wp_options.

    Ответить

  29. Валерий

    Добрый день. Скажите, пожалуйста, а где в БД находятся url картинок из библиотеки и как их правильно выгрузить, скажем в Exel?

    Ответить

  30. Webliberty

    Валерий, URL-адреса изображений находятся в таблице wp_postmeta. Чтобы получить список необходимо в phpMyAdmin выполнить поиск точных совпадений _wp_attached_file по базе данных:

    Поиск в базе данных

    Будет найдено несколько соответствий — нажать кнопку Обзор:

    Соответствия в таблице

    Затем остается выбрать результаты поиска и экспортировать в формат CSV для MS Excel, после чего удалить лишние столбцы из таблицы, оставив meta_value. Правда URL будет не полный, а относительно каталога /wp-content/uploads/

    Ответить

  31. Анна

    Спасибо, что разжевали мне этого «страшного зверя» и очень помогли 😎

    Ответить

  32. Надежда Хачатурова

    Webliberty, здравствуйте! Что-то мне в голову пришло, что ссылки на изображения смогу сделать относительными в базе данных. Слышала от кого-то. Не подскажете, как это сделать? Ой, а подписаться на ответ к комментарию невозможно?

    Ответить

  33. Webliberty

    Здравствуйте! Подписаться можно, под кнопкой Ответить нужно отметить флажок.

    Для массовой замены абсолютных ссылок на относительные выполните SQL-запрос к базе данных:

    1
    2
    3
    4
    5
    
    UPDATE wp_posts
    SET post_content = ( REPLACE (post_content, 'src="http://', 'src="//') )
    WHERE Instr(post_content, 'jpeg') > 0 
    	OR Instr(post_content, 'jpg') > 0 
    	OR Instr(post_content, 'png') > 0;

    Применимо для изображений с расширениями .jpeg, .jpg и .png, дополните самостоятельно строку запроса, если используете иные типы файлов.

    Ответить

  34. Диана

    Подскажите, а как добавить в рабочую базу данных WordPress сайта таблицу wp-posts (контент перенести, около 5000 публикаций)?

    Ответить

  35. Webliberty

    Диана, намного проще воспользоваться встроенным инструментом импорта (в консоли Инструменты — Импорт). Для начала создайте файл экспорта из админки прежнего сайта, а в новом его импортируйте. Возможен импорт записей, страниц, комментариев, произвольных полей, рубрик и меток.

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

    Ответить

Ваш комментарий:

:) ;) :D :( :cry: :| :o :P 8-) :oops: :roll: :idea: