1

Тема: MySQL на ZyXEL Keenetic

Установка MySQL на Zyxel Keenetic

1. Установка пакетов
Поставим пакеты вот этой командой

opkg install mysql-server

Если вы любите ставить каждый пакет в ручную, то читайте спойлер  big_smile


opkg install libmysqlclient
opkg install mysql-server

Если первый пакет не ставится ругаясь на зависимости, доставляем нужные ему пакеты или ставим с помощью этой команды

opkg install --nodeps  libmysqlclient

2 Настройка MySQL
Создаем  базу данных с именем "mysql" (для пользователя с именем "root")

mysql_install_db --datadir=/media/DISK_A1/system/var/mysql --basedir=/media/DISK_A1/system/usr --force

Лог с информацей создания базы


Installing MySQL system tables...
OK
Filling help tables...
OK

To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:

/media/DISK_A1/system/usr/bin/mysqladmin -u root password 'new-password'
/media/DISK_A1/system/usr/bin/mysqladmin -u root -h KEENETIC password 'new-password'

Alternatively you can run:
/media/DISK_A1/system/usr/bin/mysql_secure_installation

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:
cd /media/DISK_A1/system/usr ; /media/DISK_A1/system/usr/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl
cd /media/DISK_A1/system/usr/mysql-test ; perl mysql-test-run.pl

Please report any problems with the /media/DISK_A1/system/usr/scripts/mysqlbug script!

Добавляем в скрипт запуска, а лучше в папку firewall.d правило для локальной работы с MySQL.  Это нам понадобится для работы со связкой PHP+MySQL.
Вот правило которое можно добавить в скрипт запуска
iptables -I INPUT -i lo -j ACCEPT
А вот скрипт для firewall.d
#!/bin/sh
iptables -I INPUT -i lo -j ACCEPT

Если вам нужен автостарт, то можно сделать так

mv /media/DISK_A1/system/etc/init.d/K27mysqld /media/DISK_A1/system/etc/init.d/S27mysqld

smile

Запускаем сервер командой

/media/DISK_A1/system/etc/init.d/K27mysqld start

Подключаемся к базе

mysql --defaults-file=/media/DISK_A1/system/etc/my.cnf mysql

Создаем новую базу

mysql> CREATE DATABASE test;

Создаем пользователя test с паролем testtest  и с полными правами.

mysql> CREATE USER 'test'@'%' IDENTIFIED BY 'testtest';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'test'@'%'
    ->     WITH GRANT OPTION;

   
Устанавливаем программу для работы с MySQL. Я использую бесплатную программу HeidiSQL. Взять можно здесь http://www.heidisql.com/download.php   
В этой программе можно редактировать базы данных, изменять права пользователей и прочие штучки дрючки smile

3. Установка библиотек поддержки MySQL для PHP

В нашем распоряжении есть три модуля

php5-mod-mysql - 5.4.11-2 - MySQL shared module
php5-mod-mysqli - 5.4.11-2 - MySQL Improved Extension shared module
php5-mod-pdo-mysql - 5.4.11-2 - PDO driver for MySQL shared module

Выбираете какой из них вам нужен и ставите. Можно поставить сразу три, если вы экспериментатор.

Ставим их при помощи комманд(перед установкой php лучше выгрузить)

opkg install php5-mod-mysql 
opkg install php5-mod-mysqli 
opkg install php5-mod-pdo-mysql

Запускаем php и радуемся! MySQL работает весьма шустро и без проблем.
Если у вас что-то не заработало, то можно просто поплакать и включить мозг smile

Отредактировано khseal (2013-04-11 11:21:22)

2

Re: MySQL на ZyXEL Keenetic

khseal, нельзя ставить пакеты из репы указывая путь. От этого лезут ошибки. Нужно ставить только по имени.

Для поддержки mysql в php можно ставить только нужные пакеты, не обязательно все три.

3

Re: MySQL на ZyXEL Keenetic

khseal, нельзя ставить пакеты из репы указывая путь. От этого лезут ошибки. Нужно ставить только по имени.

Я в курсе, уже отредактировал) Не надо подсматривать мои черновики  tongue

Для поддержки mysql в php можно ставить только нужные пакеты, не обязательно все три.

Ок, сделаю пометку.

Отредактировано khseal (2013-04-11 10:53:46)

4

Re: MySQL на ZyXEL Keenetic

Достаточно поставить mysql-server - либы установятся автоматом.

5

Re: MySQL на ZyXEL Keenetic

Достаточно поставить mysql-server - либы установятся автоматом.

Тоже верно, забыл что это уже установка из репы)
Сделаю пометку)

6

Re: MySQL на ZyXEL Keenetic

я бы еще добавил, что для автостарта базы надо сделать

mv /media/DISK_A1/system/etc/init.d/K27mysqld /media/DISK_A1/system/etc/init.d/S27mysqld

7

Re: MySQL на ZyXEL Keenetic

я бы еще добавил, что для автостарта базы надо сделать

Ок, добавил и этот нюанс.

8

Re: MySQL на ZyXEL Keenetic

khseal :

php5-mod-mysql

емнип, тупой и тормозной. Рекомендуют использовать

khseal :

php5-mod-mysqli

Отредактировано ZimniY (2013-04-11 21:52:06)

Ph'nglui mglw'nafh Cthulhu R'lyeh wgah'nagl fhtagn...
Keenetic Giga & WD Mybook Live user

9

Re: MySQL на ZyXEL Keenetic

Спасибо. Текст в wiki.
http://keenetic.zyxmon.org/wiki/doku.ph … rver_mysql

10

Re: MySQL на ZyXEL Keenetic

Zyxmon :

Текст в wiki.

Дополнения:
- На my.cnf следует ставить соответствующие права 600 и владельца root. Если этого не сделать, mysql не запустится из соображений безопасности. Под ntfs следует прибегать к трюку с копированием my.cnf в /tmp/ и созданием символической ссылки.
- В mу.cnf в секции [mysqld] обязательно должна быть строка "user = root".

11

Re: MySQL на ZyXEL Keenetic

Для ext2/3 все нужное делается автоматически при установке. Для ntfs - если не сложно, допишите в wiki подробнее, чем тут.

12

Re: MySQL на ZyXEL Keenetic

Установил Perl, Perl-DBI, mySQL.
Скрипт на перл работает. Как начал тестить приесовединение к Базе MySQL -  не получается. Пишет, что не хватает каких-то "pm"

13

Re: MySQL на ZyXEL Keenetic

Vizman, в openwrt в целях минимизации места perl разбит на 100+ пакетов. Возникает настоящий квиз - какие поставить. Проще поставить все.

14

Re: MySQL на ZyXEL Keenetic

1)
День прошел в настройке и присоединении HeidiSQL к MySQL на роутере. Было бы клево, если бы в Wiki Вы дописали, что надо для этой связки, например, закоментировать bind-address.
Теперь соединения добился. Другая проблема. У меня все базы и perl-скрипты работают в windows-1251.

Можно ли MySQL научить работать с кодировкой 'cp1251'? (Из инета я понял, что надо как-то перекомпилировать Мускул!?)

2)
От Perl на keenetic мне нужно только самое простое - присоединение и работа с MySQL. Другими модулями пока не интересовался. Попробовал поставить несколько модулей  с  *db* - не спасло ситуацию.

Вопрос по Perl-DBI: есть ли возможность узнать какой модуль нужно доустановить? (На данный момент не хватает DynaLoader.pm)

Отредактировано Vizman (2013-05-02 20:58:54)

15

Re: MySQL на ZyXEL Keenetic

Vizman :

Было бы клево, если бы в Wiki Вы дописали

А еще более клёво, если это напишите Вы.

Vizman :

есть ли возможность узнать какой модуль нужно доустановить?

Исходники доступны - но я бы порекомендовал поставить ВСЕ модули perl.

16

Re: MySQL на ZyXEL Keenetic

Остался без ответа этот вопрос:

Vizman :

Другая проблема. У меня все базы и perl-скрипты работают в windows-1251.

Можно ли MySQL научить работать с кодировкой 'cp1251'? (Из инета я понял, что надо как-то перекомпилировать Мускул!?)

Дописал в Wiki про временное отключение безопасности.

17

Re: MySQL на ZyXEL Keenetic

Проблема по Perl + MySQL осталась!

согласно совету, установил "вручную" модули:

/media/DISK_A1/system/root # opkg list-installed |grep perl

perl - 5.10.0-8
perl-dbi - 1.604-1
perlbase-abbrev - 5.10.0-8
perlbase-anydbm-file - 5.10.0-8
perlbase-archive - 5.10.0-8
perlbase-assert - 5.10.0-8
perlbase-attribute - 5.10.0-8
perlbase-attributes - 5.10.0-8
perlbase-attrs - 5.10.0-8
perlbase-autoloader - 5.10.0-8
perlbase-autosplit - 5.10.0-8
perlbase-autouse - 5.10.0-8
perlbase-b - 5.10.0-8
perlbase-base - 5.10.0-8
perlbase-benchmark - 5.10.0-8
perlbase-bigfloat - 5.10.0-8
perlbase-bigint - 5.10.0-8
perlbase-bignum - 5.10.0-8
perlbase-bigrat - 5.10.0-8
perlbase-blib - 5.10.0-8
perlbase-bytes - 5.10.0-8
perlbase-cacheout - 5.10.0-8
perlbase-cgi - 5.10.0-8
perlbase-charnames - 5.10.0-8
perlbase-class - 5.10.0-8
perlbase-complete - 5.10.0-8
perlbase-compress - 5.10.0-8
perlbase-config - 5.10.0-8
perlbase-cpan - 5.10.0-8
perlbase-cpanplus - 5.10.0-8
perlbase-ctime - 5.10.0-8
perlbase-cwd - 5.10.0-8
perlbase-data - 5.10.0-8
perlbase-db - 5.10.0-8
perlbase-db-file - 5.10.0-8
perlbase-dbm-filter - 5.10.0-8
perlbase-devel - 5.10.0-8
perlbase-diagnostics - 5.10.0-8
perlbase-digest - 5.10.0-8
perlbase-dirhandle - 5.10.0-8
perlbase-dotsh - 5.10.0-8
perlbase-dumpvalue - 5.10.0-8
perlbase-dumpvar - 5.10.0-8
perlbase-dynaloader - 5.10.0-8
perlbase-encode - 5.10.0-8
perlbase-encoding - 5.10.0-8
perlbase-english - 5.10.0-8
perlbase-env - 5.10.0-8
perlbase-errno - 5.10.0-8
perlbase-essential - 5.10.0-8
perlbase-exceptions - 5.10.0-8
perlbase-extutils - 5.10.0-8
perlbase-fastcwd - 5.10.0-8
perlbase-fatal - 5.10.0-8
perlbase-fcntl - 5.10.0-8
perlbase-feature - 5.10.0-8
perlbase-fields - 5.10.0-8
perlbase-file - 5.10.0-8
perlbase-filecache - 5.10.0-8
perlbase-filehandle - 5.10.0-8
perlbase-filetest - 5.10.0-8
perlbase-filter - 5.10.0-8
perlbase-find - 5.10.0-8
perlbase-findbin - 5.10.0-8
perlbase-finddepth - 5.10.0-8
perlbase-flush - 5.10.0-8
perlbase-gdbm-file - 5.10.0-8
perlbase-getcwd - 5.10.0-8
perlbase-getopt - 5.10.0-8
perlbase-getoptpl - 5.10.0-8
perlbase-hash - 5.10.0-8
perlbase-hostname - 5.10.0-8
perlbase-i18n - 5.10.0-8
perlbase-if - 5.10.0-8
perlbase-importenv - 5.10.0-8
perlbase-integer - 5.10.0-8
perlbase-io - 5.10.0-8
perlbase-ipc - 5.10.0-8
perlbase-less - 5.10.0-8
perlbase-list - 5.10.0-8
perlbase-locale - 5.10.0-8
perlbase-log - 5.10.0-8
perlbase-look - 5.10.0-8
perlbase-math - 5.10.0-8
perlbase-memoize - 5.10.0-8
perlbase-mime - 5.10.0-8
perlbase-module - 5.10.0-8
perlbase-mro - 5.10.0-8
perlbase-net - 5.10.0-8
perlbase-next - 5.10.0-8
perlbase-o - 5.10.0-8
perlbase-object - 5.10.0-8
perlbase-opcode - 5.10.0-8
perlbase-open - 5.10.0-8
perlbase-ops - 5.10.0-8
perlbase-package - 5.10.0-8
perlbase-params - 5.10.0-8
perlbase-perl5db - 5.10.0-8
perlbase-perlio - 5.10.0-8
perlbase-pod - 5.10.0-8
perlbase-posix - 5.10.0-8
perlbase-pwd - 5.10.0-8
perlbase-re - 5.10.0-8
perlbase-safe - 5.10.0-8
perlbase-scalar - 5.10.0-8
perlbase-sdbm-file - 5.10.0-8
perlbase-search - 5.10.0-8
perlbase-selectsaver - 5.10.0-8
perlbase-selfloader - 5.10.0-8
perlbase-shell - 5.10.0-8
perlbase-shellwords - 5.10.0-8
perlbase-sigtrap - 5.10.0-8
perlbase-socket - 5.10.0-8
perlbase-sort - 5.10.0-8
perlbase-stat - 5.10.0-8
perlbase-storable - 5.10.0-8
perlbase-switch - 5.10.0-8
perlbase-symbol - 5.10.0-8
perlbase-sys - 5.10.0-8
perlbase-syslog - 5.10.0-8
perlbase-tainted - 5.10.0-8
perlbase-term - 5.10.0-8
perlbase-termcap - 5.10.0-8
perlbase-test - 5.10.0-8
perlbase-text - 5.10.0-8
perlbase-thread - 5.10.0-8
perlbase-threads - 5.10.0-8
perlbase-tie - 5.10.0-8
perlbase-time - 5.10.0-8
perlbase-timelocal - 5.10.0-8
perlbase-unicode - 5.10.0-8
perlbase-unicore - 5.10.0-8
perlbase-universal - 5.10.0-8
perlbase-user - 5.10.0-8
perlbase-utf8 - 5.10.0-8
perlbase-validate - 5.10.0-8
perlbase-version - 5.10.0-8
perlbase-xsloader - 5.10.0-8

Программа:
#!perl
use strict;
use DBI();
  # Connect to the database.
  my $dbh = DBI->connect("DBI:mysql:database=test;host=localhost",
                         "test", "testtest",
                         {'RaiseError' => 1});
...

Выдает ошибку:
install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains: /media/DISK_A1/system/usr/lib/perl5/5.10 .) at (eval 3) line 3.
Perhaps the DBD::mysql perl module hasn't been fully installed, or perhaps the capitalisation of 'mysql' isn't right.
Available drivers: DBM, ExampleP, File, Gofer, Proxy, Sponge. at r.pl line 6

Уважаемые специалисты. Помогите, пожалуйста, разобраться. Похоже не хватает драйвера mySQL или каких-то доп. настроек.

(Сам в Линухе мало разбираюсь, хотя администрю сайты на *nix больше 10 лет)

Отредактировано Vizman (2013-05-03 00:23:42)

18

Re: MySQL на ZyXEL Keenetic

Vizman :

my $dbh = DBI->connect("DBI:mysql:database=test;host=localhost",
                         "test", "testtest",
                         {'RaiseError' => 1});

А интерфейс lo разрешен у вас?
Правило

iptables -I INPUT -i lo -j ACCEPT

есть?

19

Re: MySQL на ZyXEL Keenetic

Vizman :

установил "вручную" модули:

Судя по длине списка, Вы поставили не все, их более 140:

~$ opkg list | grep perl | wc -l
149

Вам скрипт говорит, что ему не хватает файла DBD/mysql.pm. Может быть нужно его через span доустановить, я тут не спец, давно perl не использовал.
Используйте, пожалуйста, теги форума (для листингов). Напишите для всех скрипт по установке всех модулей perl - не нужно их ручками устанавливать, 140 строк набирать.
Правило, которое привел Dr.Acid понадобится после установки нужных модулей perl.

20

Re: MySQL на ZyXEL Keenetic

Dr.Acid :
Vizman :

my $dbh = DBI->connect("DBI:mysql:database=test;host=localhost",
                         "test", "testtest",
                         {'RaiseError' => 1});

А интерфейс lo разрешен у вас?
Правило

iptables -I INPUT -i lo -j ACCEPT

есть?

Эта строка добавлена после присвоения системных переменных в файл system\etc\init.d\S27mysqld

21

Re: MySQL на ZyXEL Keenetic

Zyxmon :
Vizman :

установил "вручную" модули:

Судя по длине списка, Вы поставили не все, их более 140

Не смог разобраться с командой инсталляции.
Команда

> opkg install perl* 

не сработала, а думать в полночь уже извилин не хватило smile

1) На одном из форумов прочитал, что mysql.pm вообще находится в модуле Апача. (Мне показалось это странным)
2) Посмотрел на своем хостинге, где Перл всегда великолепно работает. Так там нет такого файла в папке с pm. Правда у хостера более низкая версия Перла.
3) На CPAN тоже пытался разобраться... с первого подхода к инфе не вышло...

Начал тестировать Libra-офис с mySQL на Кинетике. Драйвер Java установился. Подключение произоизошло. Пока разбираюсь с несовместимостью кодировок для русского языка... В мускуле нет cp1251. С UTF мне трудновато.

22

Re: MySQL на ZyXEL Keenetic

Zyxmon :

... Напишите для всех скрипт по установке всех модулей perl - не нужно их ручками устанавливать, 140 строк набирать.

Не досканально знаю как автоматизировать такой процесс, но я сделал следующем образом:

opkg list | grep perlbase >1.txt

В Windows в блокноте для программистов регуляркой " - .*\n" удалил описание модулей заменяя на "\n". Здесь же регуляркой "^" добавил в начало всех строк текст "opkg install ". Скопировал получившийся текст и вставил его в окно telnet. Подождал 5-ть минут... и усё готово шеф smile

23

Re: MySQL на ZyXEL Keenetic

Установил оставшиеся недоставленные модули Perl - не помогло. Ошибка выдается такая же...

install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains: /media/DISK_A1/system/usr/lib/perl5/5.10 .) at (eval 4) line 3.
Perhaps the DBD::mysql perl module hasn't been fully installed,
or perhaps the capitalisation of 'mysql' isn't right.
Available drivers: DBM, ExampleP, File, Gofer, Proxy, Sponge.
 at t.pl line 38

Прошу помощи. Никогда не ставил модули...
Я начал искать сначала так: http://search.cpan.org/search?query=%22 … p;mode=all
Обратил внимание сюда:
модуль http://search.cpan.org/~capttofu/DBD-mysql-4.005/ по дате созданию похож на находящейся в репе Perl (т.е. тот что я установил 5.10)

Если модуль надо установить/добавить на кенетик, то подскажите плиз, что надо делать (или где об этом почитать)?

Следующая команда привела к ошибке:

/media/DISK_A1/system/root # perl -MCPAN -e 'install DBD-mysql-4.005.tar.gz'

Untagged opnames: ne i_le scalar pushmark print vec trans regcreset substcont gn
etent fttext i_predec dofile ftsize stat entereval setpriority backtick eof bit_
or tied ehostent i_subtract system shmget time custom ftbinary ftrwrite smartmat
ch getpriority enterwrite leaveeval readline enterloop ord concat sservent gsbyp
ort bless wait seekdir ftdir exists ghostent ftfile ftewrite flop substr kill li
neseq readdir stringify gprotoent seq exp ioctl gpwnam values eservent negate su
bst shift hex add sprotoent msgctl gv postdec msgrcv modulo epwent aelem rv2av g
oto accept ftrexec lc schomp i_postdec atan2 regcmaybe fcntl dor sysread closedi
r study break list semctl setstate ref match leavegiven abs pushre tell rcatline
 repeat leave sysopen int rv2hv fteowned enterwhen flip syswrite glob pos i_modu
lo gservent gnbyaddr bit_xor syscall chr ftblk shmctl semop gnbyname orassign su
btract dorassign mkdir ftzero leavewrite lstat regcomp lock multiply getc fileno
 leavesub msgget ftsock prototype exec sselect srand sockpair defined telldir ft
sgid enter cond_expr reverse entersub continue aassign setpgrp send rv2sv gsocko
pt crypt symlink gpwuid say log dbmopen hslice ftrowned i_ncmp leavetry return p
ow enetent msgsnd ftmtime dbmclose seek anoncode sqrt le anonhash getppid rename
 ghbyaddr sge chop i_preinc snetent caller schop wantarray each undef ftctime op
en ggrnam flock scmp qr delete i_lt rindex and getpeername ge quotemeta aslice i
_ge tms divide die ftchr unshift open_dir uc warn helem last truncate predec i_g
t ncmp ftsvtx getlogin length index sort xor chdir gt leavewhen shmwrite prtf re
quire next shmread ggrent exit ggrgid ftis egrent unlink ghbyname padav split ri
ght_shift null sin push gelem dbstate sle pack getpgrp padhv gsbyname pipe_op an
dassign keys gpbyname grepstart close ftrread lslice unstack select ssockopt for
mline leaveloop i_eq leavesublv gmtime chmod i_negate fork splice rewinddir post
inc ftlink spwent refgen sgt sassign entertry not getsockname i_ne padsv listen
mapwhile eq scope localtime lcfirst enteriter sgrent chown join const av2arylen
ftsuid sne nextstate fttty shostent rv2cv range untie unpack gvsv method_named e
ntergiven padany alarm method oct rv2gv tie fteread binmode i_add waitpid semget
 ucfirst pop bit_and ftpipe redo fteexec rmdir sysseek or shutdown eprotoent rea
d gpwent i_multiply once iter chroot stub i_divide readlink bind socket lt srefg
en preinc utime recv anonlist grepwhile dump cos reset left_shift sprintf connec
t link aelemfast ftatime rand gpbynumber slt i_postinc complement chomp mapstart
 umask sleep
Can't locate object method "maybe_command" via package "MM" at /media/DISK_A1/system/usr/lib/perl5/5.10/CPAN.pm line 1140.
Compilation failed in require.
BEGIN failed--compilation aborted.

/media/DISK_A1/system/root #

24

Re: MySQL на ZyXEL Keenetic

Эта строка добавлена после присвоения системных переменных в файл system\etc\init.d\S27mysqld

Лучше все же прописать это в firewall.d. Т.к. у меня отваливались периодически правила.
По перлу ничего не подскажу. Когда вижу перл впадаю в панику и начинаю материться)

Если вам будет нужно проверить работу БД MySQL, например, из HeidiSQL (см. ниже), то отключите временно «безопасность». Для этого закоментируйте в /media/DISK_A1/system/etc/my.cnf строку. Закомментирование позволяет подключиться к БД с любого IP!

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

install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC

Гугл выдает много информации для раздумий  smile

Отредактировано khseal (2013-05-04 02:59:23)

25

Re: MySQL на ZyXEL Keenetic

Vizman, Вам гугл в помощь. Помню читал, что CPAN сходу на установке perl из openwrt не работает, но можно ручками исправить.

PS Немного погуглил - может быть (пока???) не прикрутить mysql к perl. Но точно не скажу, не уверен, что искал нужное.