Страница 1 из 1

[netams] mysql51 FIXED

Добавлено: 2011-01-20 16:31:39
MASiK
У гугла ответов не нашёл, пришлось самому капать
в общем так

проблема в том что netams юзает функцию

Код: Выделить всё

LOAD DATA CONCURRENT LOCAL INFILE '%s' REPLACE INTO TABLE %s FIELDS TERMINATED BY ','
и всё было хорошо до выхода mysql 5.1 так как они просто взяли и брали функцию LOCAL (Кому интересно что за функция)
При применении опции LOCAL выполнение может происходить несколько медленнее в сравнении с предоставлением серверу доступа к файлам напрямую, поскольку содержимое файла должно переместиться с клиентского хоста на сервер. С другой стороны, в этом случае нет необходимости в привилегиях FILE для загрузки локальных файлов.
Но не просто убрали а закрыли, и достаточно собрать mysql51 сервер иклиент с опцией
--enable-local-infile
и всё будет хорошо

я надумал 2 вида решение этой проблеммы, поправкой самого Netams и поправкой Mysql

И так решение Номбер 1: Поправка Mysql (Для FreeBSD)

идём в /usr/ports/databases/mysql51-server

открываем Makefile и добовляем

Код: Выделить всё

.if defined(ENABLE_LOCAL_INFILE) && ${ENABLE_LOCAL_INFILE} != ""
CONFIGURE_ARGS+=--enable-local-infile=${ENABLE_LOCAL_INFILE}
.endif
перед

Код: Выделить всё

.if defined(WITH_CHARSET) && ${WITH_CHARSET} != ""
CONFIGURE_ARGS+=--with-charset=${WITH_CHARSET}
.endif
Сохраняем

потом идём в
/etc/make.conf
и добовляем

Код: Выделить всё

# for mysql-server
.if ${.CURDIR} == ${PORTSDIR}/databases/mysql51-server
ENABLE_LOCAL_INFILE=yes
.endif

# for mysql-client
.if ${.CURDIR} == ${PORTSDIR}/databases/mysql51-client
ENABLE_LOCAL_INFILE=yes
.endif

Сохраняем и естественно

Код: Выделить всё

cd /usr/ports/databases/mysql51-server
make deinstall clean
make install clean
И все рады и довольны

Естественно если вам надо под другую ось, то тут тока компил из исходников с параметром --enable-local-infile

А теперь решение Номбер 2: Поправка Netams (Для любой оси но пример на FreeBSD)

Идём в

Код: Выделить всё

cd /usr/ports/net-mgmt/netams
Пишем

Код: Выделить всё

make deinstall clean
make extract
Далее идём в

Код: Выделить всё

cd work/netams-3.4.5/src
открываем файлик

Код: Выделить всё

st_sql_mysql.c
строка 230
snprintf(query, 254, "LOAD DATA CONCURRENT LOCAL INFILE '%s' %s INTO TABLE %s FIELDS TERMINATED BY ','", filename, replace, st_table_name[type]);
И тут колдуем убираем слово LOCAL и добовляем полный путь до файлов Netams (У меня да и вообще по дефолту в FreeBSD (А может и везде не заморачивался) /var/netams/)
LOCAL INFILE '/var/netams/%s'
И сохраняем файлик

потом идём в

Код: Выделить всё

cd /usr/ports/net-mgmt/netams
И естественно

Код: Выделить всё

make install
И вроде бы всё хорошо но я сталкнулся с error13 в Mysql это значит что Нет доступа, есть конечно вариант постоянно делать

Код: Выделить всё

chmod -R mysql:mysql /var/netams
но мне понравилось первое решение чем я и воспользовался.
в принципе можно и эту проблемму решить просто покапаться по сорсам и дать всем этим файлам группу mysql или просто chown 755.

В общем всем спасибо у меня всё пользуйтесь на здоровье.

Литература http://mysql2.mirrors-r-us.net/doc/refm ... local.html

Re: [netams] mysql51 FIXED

Добавлено: 2011-01-20 16:34:11
MASiK
Ах да! Есть ешё такая штука как в файлик my.cnf добавить

Код: Выделить всё

local-infile=1
как для сервера так и для клиента
Но у меня не сработало...