Проблемы с подключением к базе

Материал из Школьный портал: справочника
Перейти к: навигация, поиск

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

Подключение портала к базе

Firebird запущен?

Как проверить

Для Superserver:

service firebird status

Название сервиса "firebird" может отличаться между дистрибутивами. Например, может быть "firebird2.1" или "firebird-superserver".

Для classic:

Classic работает через xinetd. Поэтому первым делом проверьте, запущен ли он.

service xinetd status

Возможно, после установки Firebird требуется перезапустить xinetd, чтобы он перечитал файлы конфигурации, в том числе и конфиг для firebird-classic.

Как исправить

Попробуйте перезапустить firebird-superserver или xinetd в зависимости от установленной версии Firebird:

# classic
service xinetd restart

# superserver
service firebird start
# или
service firebird2.1-super start

Убедитесь также, что в /etc/services есть запись для firebird:

grep gds_db /etc/services
# результат должен быть:
# gds_db 3050/tcp

Если нет, добавьте.

Результат должен быть таким: Firebird должен отвечать на порту tcp/3050.

# Проверка прямо на сервере
telnet 127.0.0.1 3050

Сервер перезагрузили, а firebird снова не запущен?

Исправление:

# пример из убунты 10.04 lts
update-rc.d firebird2.1-super enable

# пример из alt linux
chkconfig firebird on

Правильно ли указан адрес сервера и путь к базе в конфиге?

Как проверить

Выполните и сверьтесь:

grep db_ /var/www/cgi-bin/sp/sp.conf
db_server = 127.0.0.1                         # <--- адрес сервера
db_path   = /path/to/database.gdb             # <--- путь к базе
db_user   = ***
db_pass   = ***

grep cmsdb /var/www/cgi-bin/sp/sp.conf
cmsdbhost         = 127.0.0.1                 # <--- адрес сервера
cmsdbname         = /path/to/database-cms.gdb # <--- путь к базе
cmsdbuser         = ***
cmsdbpasswd       = ***

Файлы должны существовать на сервере с указанным адресом (допустимы IP-адреса и DNS-имена). Файл должен быть доступен firebird. Убедитесь, что пользователю firebird разрешено читать и писать в файлы БД.

Пример исправления:

# выяснить, есть ли файл и какие у него права и владелец
ls -l /path/to/database.gdb

# задать владельца
chown firebird:firebird /path/to/database.gdb

# задать права на чтение и запись (остальным нужно запретить всё)
chmod 660 /path/to/database.gdb

Правильно ли указан логин и пароль?

Как проверить:

# Значения переменных СЕРВЕР, БАЗА, ЛОГИН, ПАРОЛЬ
# брать в /var/www/cgi-bin/sp/sp.conf

# Основная база данных:
#   переменные db_server, db_path, db_user, db_pass

# Система управления Школьным сайтом:
#   переменные cmsdbhost, cmsdbname, cmsdbuser, cmsdbpasswd

isql СЕРВЕР:БАЗА -user ЛОГИН -pass ПАРОЛЬ

# в ubuntu
isql-fb СЕРВЕР:БАЗА -user ЛОГИН -pass ПАРОЛЬ

В ответ вы должны увидеть приглашение порулить базой:

Database:  СЕРВЕР:БАЗА, User: ЛОГИН

Чтобы выйти из инструмента isql, наберите quit; или нажмите Ctrl + D.

Инструмент isql может называться fbsql, isql-fb в зависимости от дистрибутива.

Если вы не увидели приглашение, а вместо этого получили отказ, устраните причину и попробуйте снова. Типичные проблемы: неверный путь, права доступа или владелец, неправильно указан пароль.

Чтобы изменить пароль, воспользуйтесь советами из документации по Firebird (помните о различии в путях в разных дистрибутивах, не воспроизводите рецепты без вникания):

Фаерволл

Если вы используете firebird-classic, нет ли ограничения по адресам?

# проверка
grep only_from /etc/xinetd.d/firebird

Нет ли правила в iptables, запрещающего всё, кроме разрешённого, причём в разрешённом нет tcp/3050?

Нет ли правила в iptables, запрещающего соединения на tcp/3050?

iptables --list | less