AddThis Smart Layers

суббота, 26 апреля 2014 г.

Как подключиться к MSSQL серверу из Linux. Ревизия 3.

Недавно снова настраивал сервер, где необходимо было установить драйвер PDO_DBLIB.

Ниже речь пойдет о конфигурации FreeTDS и драйвера PDO_DBLIB для подключения к MSSQL сервера CentOS 6.5 64bit и PHP 5.3.x.

Шпаргалка сисадмина



Сначала надо установить FreeTDS.
wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-stable.tgz
# Скачать последнюю версию дистрибутива

tar -zxvf freetds-stable.tgz
# Распаковать ее

cd freetds-*
# Перейти в папку дистрибутива. * поменять на номер текущей версии

./configure --prefix=/usr/local/freetds --with-tdsver=8.0 --enable-msdblib --with-gnu-ld
# Сконфигурировать

make && make install
# Скомпилировать и установить

ln -s /usr/local/freetds/lib/libsybdb.so.5 /usr/lib64/libsybdb.so.5
# Так как у нас 64-х битная система, нужно создать symlink

touch /usr/local/freetds/include/tds.h
# Все тот же старый глюк, без этого работать не будет

touch /usr/local/freetds/lib/libtds.a
# Аналогично


После этого устанавливаем сам PDO_DBLIB.

wget http://pecl.php.net/get/PDO_DBLIB-1.0.tgz
# Скачать последнюю версию дистрибутива

tar -zxvf PDO_DBLIB-1.0.tgz
# Распаковать ее

cd PDO_DBLIB-1.0
# Перейти в папку дистрибутива

phpize
# Подготовить почву

./configure --with-pdo-dblib=/usr/local/freetds
# Сконфигурировать. Без этого ключа будет ругаться

make && make install
# Скомпилировать и установить

Хоть в PHP 5.3 поддержка PDO и является частью ядра, по умолчанию он не включен.
Надо зайти в файл конфигурации php.ini и добавить строчку
extension = pdo.so

В нашем же случае речь идет о сервере где установлена Magento, поэтому поддержка PDO уже была включена.

Ну и сразу же добавить свежеустановленный модуль
extension = pdo_dblib.so

Перезапустить апач
# service httpd restart

И проверить что получилось
# php -i | grep PDO

У меня ответ был таким:
PDO
PDO support => enabled
PDO drivers => sqlite, sqlite2, mysql, dblib
PDO Driver for FreeTDS/Sybase DB-lib => enabled
PDO Driver for MySQL => enabled
PDO Driver for SQLite 3.x => enabled


Проверим установку FreeTDS:

#  /usr/local/freetds/bin/tsql -C

Я получил следующий ответ:

Compile-time settings (established with the "configure" script)
Version: freetds v0.91
freetds.conf directory: /usr/local/freetds/etc
MS db-lib source compatibility: yes
Sybase binary compatibility: no
Thread safety: yes
iconv library: yes
TDS version: 5.0
iODBC: no
unixodbc: no
SSPI "trusted" logins: no
Kerberos: no

Обращаем внимание на строчку TDS version: 5.0.

Теперь можно попробовать подключиться к удаленному MSSQL серверу прямо из командной строки:

# /usr/local/freetds/bin/tsql -H  -p  -U 

Если удаленный сервер отвечает, система попросит ввести пароль. Ок, дадим ей пароль.

И внезапно

locale is "C"
locale charset is "ANSI_X3.4-1968"
using default charset "ISO-8859-1"
Error 20017 (severity 9):
Unexpected EOF from the server
OS error 115, "Operation now in progress"
Error 20002 (severity 9):
Adaptive Server connection failed
There was a problem connecting to the server

Почему ошибка? Смотрим выше на строчку TDS version: 5.0.

Решается проблема просто - нужно в файле настроек FreeTDS глобально указать используемую версию.

Открываем для редактирования файл
# nano /usr/local/freetds/etc/freetds.conf

Находим в нем
# TDS protocol version
tds version = 5.0

Меняем его на 8.0

И да будем нам счастье :-)

Все вышеописанные операции делаются с правами root. Данная шпаргалка не претендует на универсальность.

Предыдущую ревизию этой шпаргалки можно найти в моем старом блоге на Livejournal.

Комментариев нет :

Отправить комментарий