Не закрывается соединение с базой (Mysql)

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

Аватара пользователя
kpocobok
Сообщения: 92

Не закрывается соединение с базой

Сообщение kpocobok » 20.01.2015 13:21

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

kpoc@cmp

# cat test.sh .... mysql -u $dbUser --password=$dbPass -Bse " bla bla bla; " ....



Суть в том, что скрипт успешно работал, пока при входе на страницу сайта не появилась ошибка подключения к базе. Я захожу в базу ручками и мне пишет ответ, что слишком много подключений. Видимо при обращении к базе, пользователь под которым я захожу остается подключенным и только при перезагрузке mysql все пользователи автоматически дисконятся.

Тогда переписал скрипт так:

kpoc@cmp

# cat test.sh .... mysql -u $dbUser --password=$dbPass -Bse " bla bla bla; exit; " ....



Но вот беда: выдает ошибку:

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'exit' at line 1
Также как и с 'guit'
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'guit' at line 1

Если ручками захожу в базу и прописываю команды через точку с запятой - все прекрассно. В чем проблема?
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15761
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Не закрывается соединение с базой

Сообщение Bizdelnick » 20.01.2015 13:39

Опция -B тут явно лишняя, возможно, именно из-за неё выхода не происходит.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
kpocobok
Сообщения: 92

Re: Не закрывается соединение с базой

Сообщение kpocobok » 20.01.2015 13:49

Я нашел эти опции где то в интернете.
Нашел описание в мануале, что опция -e завершает сеанс, после выполнения, опция -s так не понял, какой-то бесшумный режим, множественные подключение, но опцию -B так и не нашел. Можете дать ей описание пожалуйста?
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15761
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Не закрывается соединение с базой

Сообщение Bizdelnick » 20.01.2015 14:00

Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
nerve
Сообщения: 267
ОС: OpenBSD

Re: Не закрывается соединение с базой

Сообщение nerve » 20.01.2015 14:12

покажи лучше весь скрипт.
эти команды (B и s) влияют только на форматирование вывода.
можешь их вообще убрать.
http://www.percona.com/blog/2013/11/28/mys...ny-connections/

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

-e  это выполнить команду и отключиться.

--silent, -s

           Silent mode. Produce less output. This option can be given multiple times to produce less and less
           output.

           This option results in nontabular output format and escaping of special characters. Escaping may be
           disabled by using raw mode; see the description for the --raw option.

--batch, -B

           Print results using tab as the column separator, with each row on a new line. With this option,
           mysql does not use the history file.

           Batch mode results in nontabular output format and escaping of special characters. Escaping may be
           disabled by using raw mode; see the description for the --raw option.
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Не закрывается соединение с базой

Сообщение drBatty » 20.01.2015 15:35

kpocobok писал(а):
20.01.2015 13:21
-Bse

kpocobok писал(а):
20.01.2015 13:49
Я нашел эти опции где то в интернете.

однострок на перле не нашли? Ссылку дать? Вам это явно нужно, для ума.
kpocobok писал(а):
20.01.2015 13:21
--password=$dbPass

в интернете не написано, что так делают только м***ки? Жаль. А вот в man'е — написано.
пруф:
Specifying a password on the command line should be considered insecure. See
Section 5.3.2.2, “End-User Guidelines for Password Security”. You can use an option file
to avoid giving the password on the command line.


Давайте весь скрипт + конфиги, т.к. поведение сервера и клиента зависит от их конфигурации. Какие конфиги — тоже в мануале написано.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
kpocobok
Сообщения: 92

Re: Не закрывается соединение с базой

Сообщение kpocobok » 20.01.2015 16:18

Вообщем даже просто с опцией '-e' идет перегрузка по входам в базу.

в интернете не написано, что так делают только м***ки? Жаль. А вот в man'е — написано.


Я очень рад что оказался м***ком. Спасибо.

По поводу конфига:

/etc/mysql/my.cnf

[client] port = 3306 socket = /var/run/mysqld/mysqld.sock [mysql] character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8 [mysqladmin] character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8 [mysqlcheck] character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8 [mysqldump] character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8 [mysqlimport] character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8 [mysqlshow] character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8 [myisamchk] character-sets-dir=/usr/share/mysql/charsets [myisampack] character-sets-dir=/usr/share/mysql/charsets # use [safe_mysqld] with mysql-3 [mysqld_safe] err-log = /var/log/mysql/mysql.err # add a section [mysqld-4.1] or [mysqld-5.0] for specific configurations [mysqld] skip-external-locking skip-name-resolve server-id = 1 character-set-server = utf8 language = /usr/share/mysql/english user = mysql bind-address = 0.0.0.0 port = 3306 socket = /var/run/mysqld/mysqld.sock pid-file = /var/run/mysqld/mysqld.pid log-error = /var/log/mysql/mysqld.err basedir = /usr datadir = /home/mysql tmpdir = /tmp/ key_buffer = 16M max_allowed_packet = 16M table_open_cache = 64 net_buffer_length = 8K read_buffer_size = 2M read_rnd_buffer_size = 16M sort_buffer_size = 16M join_buffer_size = 32M #### MyISAM Specific options #myisam_recover key_buffer_size = 1G bulk_insert_buffer_size = 64M myisam_sort_buffer_size = 256M myisam_max_sort_file_size = 2G myisam_repair_threads = 8 #### INNODB Specific options #innodb_force_recovery = 1 skip-innodb_doublewrite innodb_file_per_table innodb_file_io_threads = 4 innodb_additional_mem_pool_size = 2M innodb_buffer_pool_size = 8G innodb_log_file_size = 256M innodb_log_buffer_size = 8M innodb_log_files_in_group = 2 innodb_flush_log_at_trx_commit = 0 innodb_thread_concurrency = 16 innodb_flush_method = O_DIRECT innodb_locks_unsafe_for_binlog = 1 innodb_additional_mem_pool_size = 16M innodb_max_dirty_pages_pct = 90 innodb_lock_wait_timeout = 50 innodb_data_file_path = ibdata1:128M:autoextend:max:1G [mysqldump] quick max_allowed_packet = 16M [mysql] [isamchk] key_buffer = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M [myisamchk] key_buffer = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout



/etc/mysql/mysqlaccess.cnf

# ----------------# # Global settings # # --------------- # #$Param{'host'} = ''; $Param{'user'} = 'nobody'; $Param{'db'} = 'test'; $Param{'password'} = 'foobar'; $Param{'debug'} = 0; # --------------------------# # Settings for Command-line # # ------------------------- # if ($CMD) { $Param{'superuser'} = 'root'; $Param{'rhost'} = 'localhost'; $Param{'spassword'} = ''; $Param{'brief'} = 1; } # ---------------------# # Settings for CGI-BIN # # -------------------- # if ($CGI) { $Param{'superuser'} = 'root'; $Param{'rhost'} = 'localhost'; $Param{'spassword'} = ''; $Param{'table'} = 1; } 1; #to make require happy



Вот такая вот тема со сменой пароля, по крону каждую минуту в конечном итоге выдает ошибку по подключениям


# mysql -u $dbUser --password=$dbPass -e "grant ALL ON $SelectDB.* TO '$SelectDB'@'localhost' IDENTIFIED BY '$pass'"


В скрипте там ничего особенного создание рандома и его шифрование и запись в логи шифра с использованием ключа и проверка наличия свободной оперативной памяти на выполнение скрипта. Основная функция в одной строке которую я предоставил выше.

Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15761
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Не закрывается соединение с базой

Сообщение Bizdelnick » 20.01.2015 16:26

kpocobok писал(а):
20.01.2015 16:18
# mysql -u $dbUser --password=$dbPass -e "grant ALL ON $SelectDB.* TO '$SelectDB'@'localhost' IDENTIFIED BY '$pass'"

; забыли.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
команда
новичок
нюанс
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
kpocobok
Сообщения: 92

Re: Не закрывается соединение с базой

Сообщение kpocobok » 20.01.2015 16:35

Bizdelnick писал(а):
20.01.2015 16:26
kpocobok писал(а):
20.01.2015 16:18
# mysql -u $dbUser --password=$dbPass -e "grant ALL ON $SelectDB.* TO '$SelectDB'@'localhost' IDENTIFIED BY '$pass'"

; забыли.

ОМГ! Ошибка новичка :) Спасибо ^_^
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Не закрывается соединение с базой

Сообщение drBatty » 20.01.2015 18:56

kpocobok писал(а):
20.01.2015 16:18
Я очень рад что оказался м***ком. Спасибо.

пожалуйста. Section 5.3.2.2, “End-User Guidelines for Password Security” вы посмотрели, я надеюсь? Или так и останетесь? ☺

про ";" вам уже сказали, да строка не заканчивается, и команда не завершена; mysql ждёт продолжения.

kpocobok писал(а):
20.01.2015 16:18
В скрипте там ничего особенного создание рандома и его шифрование и запись в логи шифра с использованием ключа и проверка наличия свободной оперативной памяти на выполнение скрипта. Основная функция в одной строке которую я предоставил выше.

Вангую проблему XY.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
kpocobok
Сообщения: 92

Re: Не закрывается соединение с базой

Сообщение kpocobok » 21.01.2015 11:15

drBatty писал(а):
20.01.2015 18:56
Вангую проблему XY.


Вообщем опция -e не помогает.

Помогла статья http://habrahabr.ru/post/108418/

Вообщем ограничил время по соединениям. Так как запрос к базе максимально 5-10 секунд я поставил ограничение на 30 секунд. В итоге так как крон работает каждую минуту, запрос закрывается автоматически через 30 секунд.
Спасибо сказали: