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

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

Почти все проверки и исправления можно выполнить только от пользователя 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

Подключение Алфавитной книги к базе

Во время установки Алфавитной книги есть шаг, на котором следует указать ip-адрес сервера, где установлен Школьный портал и путь к базе.

Если этот шаг не удаётся пройти даже с помощью кнопки "Автоопределение пути", проверьте следующее:

Доступен ли портал именно с той же машины, на которую производится установка Алфавитной книги, если зайти на внутрисетевой ip-адрес сервера браузером?

На всякий случай, адреса всех сетевых интерфейсов можно получить на сервере командами:

ip a

или

ifconfig

Если портал отвечает, попробуйте с той машины пощупать TCP-порт 3050, например так:

telnet ip_сервера 3050

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

На случай, если клиент telnet-клиент всё ещё не установлен на машине с Windows 7, её можно установить так: Пуск, Панель управления, Программы и компоненты, Включение или отключение компонентов Windows, Клиент Telnet (ставим галочку) - Ok.

Если проба telnet-ом не прошла, можно посмотреть в сторону фаерволов. На стороне клиентской машины универсальный совет: если на машине установлены какие-либо средства защиты, например Kaspersky Internet Security и ему подобные, стоит попробовать выключить их на время процесса установки Алфавитной книги.

При установке Алфавитной книги есть выбор компонент.

Обязательные компоненты:

  • Алфавитная книга
  • FireBird v2.0 Client
  • BDE v5.01

Галки следующих ниже компонент ставятся только в случае, если компонент НЕ установлен:

  • FireBird v2.0 Client
  • BDE v5.01

Автоопределение того, что компонент уже установлен весьма поверхностное. Если ничего не помогает, стоит попробовать переустановить Алфавитную книгу, поставив галки принудительно.

AltLinux Школьный сервер v5.0.1

Для доступа к БД Алфавитной книге с других машин необходимо на сервере в веб-интерфейсе администратора в разделе "Брандмауэр" добавить порт 3050 в "Дополнительные порты TCP".