Конфигурирование базы данных

Если ваш хостинг-провайдер запустил для вас базу данных MySQL и создал пользователя, загляните в конечный файл wp-config.php, чтобы получить эту информацию. Она необходима для изучения MySQL, описываемого в этом разделе, и пригодится, если вы столкнетесь с проблемами с MySQL позже.

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

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

Для решения этих задач вы можете использовать командную строку MySQL или инструменты типа phpMyAdmin или Chive, но держите в голове, что у MySQL есть собственный набор пользователей и данных им прав, что определяется вашей (или хостинг-провайдера) операционной системой.

После установки MySQL создает таблицу пользователей и их прав по умолчанию, добавляя привилегированного пользователя root в систему Unix, не имеющего отношения к root-пользователю самой системы Unix. Однако если вы пытаетесь подключиться к вашей копии MySQL как привилегированный пользователь MySQL, это можно сделать только с локального хоста — той же самой машины, на которой запущен MySQL.

Если вы хотите узнать больше о правах MySQL, и таблице, управляющей выдачей пользователям эти права, и о том, как управлять пользователями MySQL, обратитесь к «Руководству по пользованию MySQL» (ссылка) и найдите в нем разделы, касающиеся безопасности базовых учетных записей MySQL.

Для пользователей или баз данных WordPress не существует сводов правил наименования. Хостинг-провайдеры обычно добавляют имя пакета или информации из учетной записи, чтобы определять пользователей, соарендующих базу данных MySQL.

Рис. 1.3. Диалоговое окно конфигурирования базы данных
Рис. 1.3. Диалоговое окно конфигурирования базы данных

Повторяем: можно иметь несколько баз данных, которыми владеет один и тот же (или разные) пользователь MySQL, на одной копии сервера базы данных MySQL. В примере, показанном на рис. 1.3, wp_ используется как префикс и для имен пользователей, и для имен баз данных, что как минимум указывает администратору базы данных, что они относятся к WordPress.

Что может пойти не так с WordPress и MySQL? Ниже приведены три основные причины ошибок при установке. Обратите внимание, что все эти три условия должны быть соблюдены одновременно.

1. Веб-сервер не может найти MySQL. Либо имя хоста MySQL в файле wpconfig.php указано некорректно, либо веб-сервер ищет локальный экземпляр MySQL и не может открыть сокет-соединение с ней. Вот простой пример.

При локальном запуске MySQL на MacOS MySQL создает сокет /tmp/mysql.sock для локальных соединений, но РНР-код WordPress ищет /var/mysql/mysql.sock через PHP-модуль движка MySQL. Создайте символьную ссылку с одного сокета на другой:

# In -s /tmp/mysql.sock /var/mysql/mysql.sock

Актуальный путь в файловой системе к локальному сокету MySQL — функция конфигурации базы данных; при ее запуске создается локальный сокет. Где именно движок РНР и где, соответственно, любое приложение на основе РНР ищет сокет, зависит от конфигурации РНР.

Если вы хотите выяснить, в чем именно заключается несоответствие, придется потратить некоторое время на непростую отладку в стиле printf(). Отредактируйте файл wp-includes/wp-db.php, он содержит набор функций, который определяет соединение с базой данных WordPress. Если вы видите сообщение «Ошибка установки соединения с базой данных» («Error establishing а database connection») во время установки, вставьте echo(mysql_error()) — оператор, позволяющий увидеть выявленную ошибку вместе с базовым сообщением, как это показано на рис. 1.6:

if (!$this->dbh) {
echo(mysql_error());
    $this->bail(sprintf(/*WP_I18N_DB_C0NN_ERR0R*/"
    <hl>Error establishing a database connection</hl>
Рис. 1.6. mysql_error( ) сообщает о проблеме с сокетом

Функция mysql_error() является функцией библиотеки РНР, выдающей ошибку, сгенерированную последней вызванной функцией MySQL.

2. WordPress находит MySQL, но не может войти. Чаще всего неверно введено имя пользователя или пароль для MySQL, особенно если это произвольное имя, сгенерированное хостинг-провайдером.

Дважды проверьте эти данные и убедитесь, что они верно отображаются в файле wp-config.php. Вы также можете столкнуться с проблемой аутентификации пароля при использовании комбинации MySQL 4.1 или MySQL 5.0 с серверами РНР, имеющими определенные особенности.

Они могут поддерживать только старую схему хэширования паролей MySQL 4.0. В таком случае используйте функцию OLD_PASSWORD() для хэширования пароля пользователя WordPress в формате, совместимом с предыдущими версиями. Вот эта магическая формула SQL (в командной строке MySQL или в окне SQL в случае МАМР):

SET PASSWORD FOR user@host = 0LD_PASSW0RD(’password');

В этом варианте user@host — имя пользователя базы данных WordPress и имя хоста базы данных, a password — (буквально) пароль, который вы внесли в конфигурационный файл.

3. WordPress подключается к MySQL, но не может выбрать базу данных. То, что веб-сервер может подключиться к серверу базы данных с информацией о пользователе базы данных WordPress, не означает, что там обязательно есть база данных, доступная для этого пользователя. Это еще один сценарий, который лучше всего диагностируется с помощью mysql_error() посредством помещения этого оператора в wp-dp.php, где определяется ошибка выбора:

function select($db) {
    if (!@mysql_select_db({db, $this->dbh)) {
        $this->ready = false;
echo(mysql_error());
    {this- >bail(sprintf(/*WP_I18N_DB_SELECT_DB*/'
        ... <hl>Can't select database</hl>

        ..

Если после вставки оператора mysql_error(), как это описано выше, попытки закончить установку приводят к появлению окна с ошибкой типа показанного на рис. 1.7, то либо база данных MySQL под соответствующим пользователем создана не была, либо пользователь базы данных не имеет прав на ее использование.

Рис. 1.7. Ошибка выбора базы данных MySQL

Дважды проверьте, что думает на эту тему MySQL, используя следующую команду:

% /usr/local/mysql/bin/mysql -u wp_userl -р

Enter password:
Welcome to the MySQL monitor. Commands end with; or \g.
Your MySQL connection id is 174
Server version: 5.1.37 MySQL Community Server (GPL)
mysql> show databases;

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

mysql> create database wp_halstern;
Query OK, 1 row affected (0.00 sec)

Повторяем: важно различать пользователей операционной системы, пользователей MySQL и пользователей WordPress. Пользователи MySQL определены в базе данных и наделены правами создавать базы данных, копаться в таблицах и иными способами генерировать полезные данные. Пользователи WordPress существуют в таблицах базы данных WordPress, созданных во время установки. Они имеют привилегии и значение, только если вы авторизуетесь в WordPress.

Получив чистую копию WordPress, вы увидите набор таблиц, названных в соответствии с префиксами таблиц, установленных в wp-config.php. Повторяем: это легко проверить, используя команду MySQL:

mysql> use wp_halstern; show tables;
Database changed

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

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

Наверх ↑