Не удается подключиться к mysql с помощью стека ламп Bitnami через php

Хорошо, это будет длинный вопрос.

Я пытаюсь запустить что-то в своей университетской учетной записи. У нас есть папка public_html, которую мы можем использовать как веб-пространство для размещения всего, что захотим.

Я установил стек ламп Bitnami в папку public_html (вероятно, не лучшая идея с точки зрения безопасности, но я собираюсь протестировать это приложение только пару дней и снести его, так что мне действительно все равно, так долго) Я могу быстро его настроить и запустить), и сайт, который я хочу разместить, работает нормально и доступен через (http:// (uni address)/(my account name)/public_html/lamp/apache2/htdocs/(etc.. ), Однако некоторые части кода, которые подключаются к базе данных, дают мне следующее предупреждение:

Warning: mysql_connect() [function.mysql-connect]: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

Я подключаюсь к базе данных, используя следующий код:

mysql_connect($CFG->dbhost,$CFG->dbuser,$CFG->dbpass);

Где dbhost — это «локальный хост».

Поскольку он ссылается на /var/run/mysqld/mysqld.sock - это, очевидно, означает, что он пытается подключиться не к тому, что нужно, поскольку mysql в стеке ламп, который я установил, имеет следующее в my.cnf:

[mysqladmin]
user=root

[mysqld]
basedir=(my account folder)/public_html/lamp/mysql
datadir=(my account folder)/public_html/lamp/mysql/data
port=3306
socket=(my account folder)/public_html/lamp/mysql/tmp/mysql.sock
tmpdir=(my account folder)/public_html/lamp/mysql/tmp

[mysqld_safe]
mysqld=mysqld.bin

[client]
port=3306
socket=(my account folder)/public_html/lamp/mysql/tmp/mysql.sock

[manager]
port=3306
socket=(my account folder)/public_html/lamp/mysql/tmp/mysql.sock
pid-file=(my account folder)/public_html/lamp/mysql/tmp/manager.pid
default-mysqld-path=(my account folder)/public_html/lamp/mysql/bin/mysqld.bin

Итак, мой вопрос: кто-нибудь знает, как заставить его подключиться к правильному сокету? Кроме того, var/run/mysqld/mysqld.sock вообще не существует, и у меня, очевидно, нет разрешения на его создание (не то чтобы я видел, как он вообще служит моей цели).

Это мучило меня со вчерашнего дня. Любая помощь будет принята с благодарностью.

Ваше здоровье!


person MikiRei    schedule 08.11.2009    source источник


Ответы (1)


Возможно, вам придется указать сокет, определенный в my.cnf, используя mysql_connect (вы должны увидеть функциональный пример в примере №3) вместо localhost, заставив $CFG->dbhost указывать на файл сокета

$CFG->dbhost = ':(my account folder)/public_html/lamp/mysql/tmp/mysql.sock';
$link = mysql_connect($CFG->dbhost,$CFG->dbuser,$CFG->dbpass);

Посмотрите, работает ли это!

Еще один совет: вы также должны убедиться, что файл сокета действительно создается вашей службой mysql в этом месте "(папка моей учетной записи)/public_html/lamp/mysql/tmp/mysql.sock"


Редактировать:

Нам просто нужно было подтвердить, что путь к вашему sock-файлу mysql был действительным, и файл был создан, что, по-видимому, и было.

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

mysql --socket=<my account folder>/public_html/lamp/mysql/tmp/mysql.sock -u <username> -p

Редактировать 2:

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

e.g.

/home/<username>/public_html/lamp/mysql/tmp/mysql.sock
person houmam    schedule 08.11.2009
comment
Как проверить, создан ли файл моей службой mysql? Я предполагаю, что это потому, что он был создан после установки стопки ламп Bitnami. Кроме того, я попробовал пример № 3. Это дает мне такое же предупреждение, и я дважды проверил расположение mysql.sock, и он определенно там, и я разрешил ему полный доступ. Спасибо еще раз - person MikiRei; 08.11.2009
comment
да. Я пробовал как /home/‹username›, так и файл полного пути на случай, если он не перенаправляется должным образом, если я использовал /home/‹username›. - person MikiRei; 08.11.2009
comment
Вам удалось подключиться к серверу mysql через командную строку? - person houmam; 08.11.2009
comment
Хммм, если вы можете подключиться к серверу mysql через сокет, тогда вы сможете сделать это через PHP, когда укажете соответствующий сокет. Можете ли вы подтвердить, что используете точную требуемую нотацию, такую ​​​​как «:/tmp/mysql», или, в качестве альтернативы, вы можете попробовать нотацию «localhost:/tmp/mysql», вы должны убедиться, что вы не пропустили «:» в вашей строке Если это все еще не работает, не могли бы вы предоставить сообщение об ошибке и вывод mysql_error() с новым файлом сокета. - person houmam; 08.11.2009
comment
Да, я пробовал несколько комбинаций, все с : но все равно предупреждение. Может быть, это брандмауэр моего универа мешает ему правильно подключиться? Возможно. Мне удалось заставить его работать на другом сервере, так что это больше не имеет значения. Тем не менее, большое спасибо за вашу помощь! Очень признателен! - person MikiRei; 08.11.2009