Туннелирование MySQL

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

Модераторы: SLEDopit, Модераторы разделов

TTATPuOT
Сообщения: 35

Туннелирование MySQL

Сообщение TTATPuOT »

Ситуация: есть сервис которому нужно подключиться к БД MySQL для этого надо подключиться напрямую. Через SSH. Подключаюсь, запускаю сервис и в SSH пишет что сервис не может подключиться к БД.
Конфиг сервиса:

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

DataSource:
    mySQLColumnName: username
    mySQLTablename: authme
    mySQLUsername: p77618_db
    backend: mysql
    mySQLColumnLastLogin: lastlogin
    mySQLDatabase: p77618_db
    mySQLPort: 3306
    mySQLColumnIp: ip
    mySQLHost: 127.0.0.1
    mySQLColumnPassword: password
    mySQLPassword: [тут типа пароль]
    caching: true

Вот ошибка:

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

MySQL driver loaded
Connection pool ready
ERROR: Timeout while waiting for a valid database connection.

Подключаюсь командой ssh -C -L 3306:localhost:3306 p77618@p77618.ftp.ihc.ru
Как быть?
Спасибо сказали:
Аватара пользователя
Hrafn
Сообщения: 213
ОС: Fedora 19

Re: Туннелирование MySQL

Сообщение Hrafn »

Это конечно оригинально - создавать дублирующую, фактически, тему.

Но вопрос свой повторю.
База запущена, работает и слушает на порту 3306?
Пробовали подключиться к базе после проброса порта с помощью клиента mysql? Если да, то покажите, что пишет при попытке. Если нет - попробуйте.
/ Den siste viking...
Спасибо сказали:
TTATPuOT
Сообщения: 35

Re: Туннелирование MySQL

Сообщение TTATPuOT »

Hrafn писал(а):
07.02.2012 12:50
Это конечно оригинально - создавать дублирующую, фактически, тему.

Но вопрос свой повторю.
База запущена, работает и слушает на порту 3306?
Пробовали подключиться к базе после проброса порта с помощью клиента mysql? Если да, то покажите, что пишет при попытке. Если нет - попробуйте.

Ну с той темы меня выгнали))
Какого клиента? ssh -v.... это что ли? Я же просил командами писать)
Спасибо сказали:
Аватара пользователя
Hrafn
Сообщения: 213
ОС: Fedora 19

Re: Туннелирование MySQL

Сообщение Hrafn »

Для особо одаренных пишу еще раз: Пробовали подключиться к базе с помощью клиента mysql?

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

mysql -u <имя пользователя mysql> -p <пароль пользователя mysql>
/ Den siste viking...
Спасибо сказали:
BIgAndy
Сообщения: 1923

Re: Туннелирование MySQL

Сообщение BIgAndy »

TTATPuOT писал(а):
07.02.2012 17:20
Какого клиента? ssh -v.... это что ли?

wWOW!!!

Я же просил командами писать)


Р-рр--равняйсь! См-м-ии--ирррно! Слушай мою команду....

Неспешно идём читаем про mysql и man ssh. Хотя за время беседы в той и этой теме вас не один раз посылали восполнить пробелы знаний, вы, видимо проигнорировали данные сентенции как особовредные для вашего здоровья. Как вы думаете? С вами будут говорить на одном языке или на сконно русском?
Спасибо сказали:
TTATPuOT
Сообщения: 35

Re: Туннелирование MySQL

Сообщение TTATPuOT »

Hrafn писал(а):
07.02.2012 17:58
Для особо одаренных пишу еще раз: Пробовали подключиться к базе с помощью клиента mysql?

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

mysql -u <имя пользователя mysql> -p <пароль пользователя mysql>

[p77618@h11 ~]$ mysql -u p77618 -p nhj123wq
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Туннелирование MySQL

Сообщение Ленивая Бестолочь »

iУведомление от модератора
создание дублей тем у нас считается нарушением.
старую тему я закрою с глаз долой, но пожалуйста, не делайте так больше.
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
TTATPuOT
Сообщения: 35

Re: Туннелирование MySQL

Сообщение TTATPuOT »

Ленивая Бестолочь писал(а):
07.02.2012 19:54

Ну ты думаешь я не знаю что это не хорошо? Дело в том что та тема в разделе для тех кто уже что-то понимает в этом)
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Туннелирование MySQL

Сообщение Ленивая Бестолочь »

тему можно перенести из раздела в раздел. если будет нужно - обащайтесь. а нарушать правила форумчика совсем не обязательно ;-)
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
TTATPuOT
Сообщения: 35

Re: Туннелирование MySQL

Сообщение TTATPuOT »

Ленивая Бестолочь писал(а):
07.02.2012 20:38
тему можно перенести из раздела в раздел. если будет нужно - обащайтесь. а нарушать правила форумчика совсем не обязательно ;-)

Извините не знал)
Спасибо сказали:
TTATPuOT
Сообщения: 35

Re: Туннелирование MySQL

Сообщение TTATPuOT »

Hrafn писал(а):
07.02.2012 17:58
Для особо одаренных пишу еще раз: Пробовали подключиться к базе с помощью клиента mysql?

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

mysql -u <имя пользователя mysql> -p <пароль пользователя mysql>

Написал в саппорт сказали что не правильно пиши правильно так: mysql -u p77618_auth -p [пароль от MySQL] p77618_auth
вот что вывело:

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

[p77618@h11 ~]$ mysql -u p77618_auth -p nhj123wq p77618_auth
mysql  Ver 14.14 Distrib 5.1.52, for unknown-linux-gnu (x86_64) using readline 5.1
Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license
Usage: mysql [OPTIONS] [database]
  -?, --help          Display this help and exit.
  -I, --help          Synonym for -?
  --auto-rehash       Enable automatic rehashing. One doesn't need to use
                      'rehash' to get table and field completion, but startup
                      and reconnecting may take a longer time. Disable with
                      --disable-auto-rehash.
  -A, --no-auto-rehash
                      No automatic rehashing. One has to use 'rehash' to get
                      table and field completion. This gives a quicker start of
                      mysql and disables rehashing on reconnect.
  -B, --batch         Don't use history file. Disable interactive behavior.
                      (Enables --silent.)
  --character-sets-dir=name
                      Directory for character set files.
  --column-type-info  Display column type information.
  -c, --comments      Preserve comments. Send comments to the server. The
                      default is --skip-comments (discard comments), enable
                      with --comments.
  -C, --compress      Use compression in server/client protocol.
  -#, --debug[=#]     This is a non-debug version. Catch this and exit.
  --debug-check       Check memory and open file usage at exit.
  -T, --debug-info    Print some debug info at exit.
  -D, --database=name Database to use.
  --default-character-set=name
                      Set the default character set.
  --delimiter=name    Delimiter to be used.
  -e, --execute=name  Execute command and quit. (Disables --force and history
                      file.)
  -E, --vertical      Print the output of a query (rows) vertically.
  -f, --force         Continue even if we get an SQL error.
  -G, --named-commands
                      Enable named commands. Named commands mean this program's
                      internal commands; see mysql> help . When enabled, the
                      named commands can be used from any line of the query,
                      otherwise only from the first line, before an enter.
                      Disable with --disable-named-commands. This option is
                      disabled by default.
  -g, --no-named-commands
                      Named commands are disabled. Use \* form only, or use
                      named commands only in the beginning of a line ending
                      with a semicolon (;). Since version 10.9, the client now
                      starts with this option ENABLED by default. Disable with
                      '-G'. Long format commands still work from the first
                      line. WARNING: option deprecated; use
                      --disable-named-commands instead.
  -i, --ignore-spaces Ignore space after function names.
  --local-infile      Enable/disable LOAD DATA LOCAL INFILE.
  -b, --no-beep       Turn off beep on error.
  -h, --host=name     Connect to host.
  -H, --html          Produce HTML output.
  -X, --xml           Produce XML output.
  --line-numbers      Write line numbers for errors.
  -L, --skip-line-numbers
                      Don't write line number for errors.
  -n, --unbuffered    Flush buffer after each query.
  --column-names      Write column names in results.
  -N, --skip-column-names
                      Don't write column names in results.
  -O, --set-variable=name
                      Change the value of a variable. Please note that this
                      option is deprecated; you can set variables directly with
                      --variable-name=value.
  --sigint-ignore     Ignore SIGINT (CTRL-C).
  -o, --one-database  Only update the default database. This is useful for
                      skipping updates to other database in the update log.
  --pager[=name]      Pager to use to display results. If you don't supply an
                      option, the default pager is taken from your ENV variable
                      PAGER. Valid pagers are less, more, cat [> filename],
                      etc. See interactive help (\h) also. This option does not
                      work in batch mode. Disable with --disable-pager. This
                      option is disabled by default.
  --no-pager          Disable pager and print to stdout. See interactive help
                      (\h) also. WARNING: option deprecated; use
                      --disable-pager instead.
  -p, --password[=name]
                      Password to use when connecting to server. If password is
                      not given it's asked from the tty.
  -P, --port=#        Port number to use for connection or 0 for default to, in
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
                      /etc/services, built-in default (3306).
  --prompt=name       Set the mysql prompt to this value.
  --protocol=name     The protocol to use for connection (tcp, socket, pipe,
                      memory).
  -q, --quick         Don't cache result, print it row by row. This may slow
                      down the server if the output is suspended. Doesn't use
                      history file.
  -r, --raw           Write fields without conversion. Used with --batch.
  --reconnect         Reconnect if the connection is lost. Disable with
                      --disable-reconnect. This option is enabled by default.
  -s, --silent        Be more silent. Print results with a tab as separator,
                      each row on new line.
  -S, --socket=name   The socket file to use for connection.
  --ssl               Enable SSL for connection (automatically enabled with
                      other flags).Disable with --skip-ssl.
  --ssl-ca=name       CA file in PEM format (check OpenSSL docs, implies
                      --ssl).
  --ssl-capath=name   CA directory (check OpenSSL docs, implies --ssl).
  --ssl-cert=name     X509 cert in PEM format (implies --ssl).
  --ssl-cipher=name   SSL cipher to use (implies --ssl).
  --ssl-key=name      X509 key in PEM format (implies --ssl).
  --ssl-verify-server-cert
                      Verify server's "Common Name" in its cert against
                      hostname used when connecting. This option is disabled by
                      default.
  -t, --table         Output in table format.
  --tee=name          Append everything into outfile. See interactive help (\h)
                      also. Does not work in batch mode. Disable with
                      --disable-tee. This option is disabled by default.
  --no-tee            Disable outfile. See interactive help (\h) also. WARNING:
                      Option deprecated; use --disable-tee instead.
  -u, --user=name     User for login if not current user.
  -U, --safe-updates  Only allow UPDATE and DELETE that uses keys.
  -U, --i-am-a-dummy  Synonym for option --safe-updates, -U.
  -v, --verbose       Write more. (-v -v -v gives the table output format).
  -V, --version       Output version information and exit.
  -w, --wait          Wait and retry if connection is down.
  --connect_timeout=# Number of seconds before connection timeout.
  --max_allowed_packet=#
                      The maximum packet length to send to or receive from
                      server.
  --net_buffer_length=#
                      The buffer size for TCP/IP and socket communication.
  --select_limit=#    Automatic limit for SELECT when using --safe-updates.
  --max_join_size=#   Automatic limit for rows in a join when using
                      --safe-updates.
  --secure-auth       Refuse client connecting to server if it uses old
                      (pre-4.1.1) protocol.
  --server-arg=name   Send embedded server this as a parameter.
  --show-warnings     Show warnings after every statement.

Default options are read from the following files in the given order:
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf
The following groups are read: mysql client
The following options may be given as the first argument:
--print-defaults        Print the program argument list and exit.
--no-defaults           Don't read default options from any option file.
--defaults-file=#       Only read default options from the given file #.
--defaults-extra-file=# Read this file after the global files are read.

Variables (--variable-name=value)
and boolean options {FALSE|TRUE}  Value (after reading options)
--------------------------------- -----------------------------
auto-rehash                       TRUE
character-sets-dir                (No default value)
column-type-info                  FALSE
comments                          FALSE
compress                          FALSE
debug-check                       FALSE
debug-info                        FALSE
database                          (No default value)
default-character-set             latin1
delimiter                         ;
vertical                          FALSE
force                             FALSE
named-commands                    FALSE
ignore-spaces                     FALSE
local-infile                      FALSE
no-beep                           FALSE
host                              (No default value)
html                              FALSE
xml                               FALSE
line-numbers                      TRUE
unbuffered                        FALSE
column-names                      TRUE
sigint-ignore                     FALSE
port                              0
prompt                            mysql>
quick                             FALSE
raw                               FALSE
reconnect                         TRUE
socket                            (No default value)
ssl                               FALSE
ssl-ca                            (No default value)
ssl-capath                        (No default value)
ssl-cert                          (No default value)
ssl-cipher                        (No default value)
ssl-key                           (No default value)
ssl-verify-server-cert            FALSE
table                             FALSE
user                              p77618_auth
safe-updates                      FALSE
i-am-a-dummy                      FALSE
connect_timeout                   0
max_allowed_packet                16777216
net_buffer_length                 16384
select_limit                      1000
max_join_size                     1000000
secure-auth                       FALSE
show-warnings                     FALSE
[p77618@h11 ~]$ ^C

port 0 - то или нет? тут 0 а не 3306
По инструкции прописал mysql -u p77618_auth -p [пароль от MySQL] p77618_auth --port=3306
теперь выводит port 3306
Правильно надеюсь?
Спасибо сказали:
Аватара пользователя
Hrafn
Сообщения: 213
ОС: Fedora 19

Re: Туннелирование MySQL

Сообщение Hrafn »

Мне не надо справку по мускулу показывать, я ее и так посмотреть могу :)
Повторю еще раз вопрос: у ВАС сервер MYSQL запущен вообще??? Сколько раз еще спросить, чтобы Вы ответ-то дали?
Вы только сразу скажите, я просто строку с вопросом скопирую столько раз, сколько захотите

3306 - это стандартный порт для MySQL

а вот сюда по этому:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

у Вас MySQL НЕ РАБОТАЕТ

А вообще - сходи, наконец, доки почитайте все-таки, иначе разговор бессмысленный получается
/ Den siste viking...
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Туннелирование MySQL

Сообщение sash-kan »

Hrafn
мне кажется, надо всего лишь добавить параметр --protocol=TCP·
и клиент не будет пытаться найти несуществующий на локальной машине сокет·
ведь я так понимаю, топикстартер всё-таки на локальной машине запускает mysql·
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Hrafn
Сообщения: 213
ОС: Fedora 19

Re: Туннелирование MySQL

Сообщение Hrafn »

как я понимаю - нет, иначе смысл городить пробросы портов с помощью ssh
/ Den siste viking...
Спасибо сказали:
TTATPuOT
Сообщения: 35

Re: Туннелирование MySQL

Сообщение TTATPuOT »

sash-kan писал(а):
07.02.2012 22:09
Hrafn
мне кажется, надо всего лишь добавить параметр --protocol=TCP·
и клиент не будет пытаться найти несуществующий на локальной машине сокет·
ведь я так понимаю, топикстартер всё-таки на локальной машине запускает mysql·

вообщето нет. Еслибы БД на локалке стояли этой темы не должно быть. Там же всё проще.

С нереально помощью хостера вот что плучилось:

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

[p77618@h11 ~]$ mysql -u p77618_auth -p p77618_auth -h p77618.mysql.ihc.ru
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1789207
Server version: 5.0.92-50-log Percona SQL Server, Revision 85 (GPL)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
Спасибо сказали:
Аватара пользователя
Hrafn
Сообщения: 213
ОС: Fedora 19

Re: Туннелирование MySQL

Сообщение Hrafn »

тогда рассказывайте, что за хосты h11, p77618.mysql.ihc.ru?

что и где должно работать, откуда и куда Вы пытаетесь попасть и т.д.
и если к мускулу можно подключиться снаружи, то зачем городить пробросы? я уже перестал понимать как и что у Вас организованно
/ Den siste viking...
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Туннелирование MySQL

Сообщение sash-kan »

TTATPuOT писал(а):
07.02.2012 22:21
вообщето нет. Еслибы БД на локалке стояли этой темы не должно быть.
правильно·
mysqld крутится не на локальной машине, а на удалённой·
клиент mysql вы запускаете на локальной машине·
правильно?
и он завершается с ошибкой, что не найден сокет·
сокет этот создаётся mysqld-емоном·
и на локальной машине его, естественно, нет·
поэтому вам нужно соединяться не через файловый сокет (умолчальный способ подключения клиента mysql), а через tcp порт (который вы пробросили на удалённую машину с помощью ssh)·
значит, так и надо сказать клиенту: используй tcp, а не файловый сокет для соединения с mysqld·
что-то вроде:
$ mysql --protocol=TCP -u <пользователь> -p<пароль> <база данных>

p.s. кстати, обратите внимание, что между "-p" и паролем не должно быть пробела·
если после -p идёт пробел, то mysql запросит пароль отдельно·
а если вы напишите "-p <пароль>" (с пробелом), то mysql попробует истолковать "<пароль>" как очередной параметр или как имя базы данных·
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Hrafn
Сообщения: 213
ОС: Fedora 19

Re: Туннелирование MySQL

Сообщение Hrafn »

sash-kan, спасибо, кстати, про --protocol=TCP :)
мне как-то никогда не приходилось принудительно указывать, всегда подключалось нормально
/ Den siste viking...
Спасибо сказали:
TTATPuOT
Сообщения: 35

Re: Туннелирование MySQL

Сообщение TTATPuOT »

Hrafn писал(а):
07.02.2012 22:49
тогда рассказывайте, что за хосты h11, p77618.mysql.ihc.ru?

h11 это где?
а 2 это хост MySQL

Hrafn писал(а):
07.02.2012 22:49
что и где должно работать, откуда и куда Вы пытаетесь попасть и т.д.

Должен работать сервис. Конфиг его в первом посте. Сервис на локальном компе хост MySQL в дали.
Hrafn писал(а):
07.02.2012 22:49
и если к мускулу можно подключиться снаружи, то зачем городить пробросы? я уже перестал понимать как и что у Вас организованно

Снаружи нельзя. Он блокируют прямые подключения.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Туннелирование MySQL

Сообщение sash-kan »

sash-kan писал(а):
07.02.2012 23:03
$ mysql --protocol=TCP -u <пользователь> -p<пароль> <база данных>
теоретически, возможно, сработает и вариант:
$ mysql -h localhost -u <пользователь> -p<пароль> <база данных>

в этом случае, если мне не изменяет склероз, mysql будет пытаться соединиться именно через tcp порт к указанному серверу·
а указать нужно именно localhost — ведь порт 3306 с localhost-а вы уже пробросили на удалённый сервер (с помощью ssh)·

Hrafn писал(а):
07.02.2012 23:06
всегда подключалось нормально
вероятно, использовался при этом параметр -h (--host), что принуждало клиента использовать именно tcp·
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Туннелирование MySQL

Сообщение sash-kan »

TTATPuOT
ещё один момент уточню·
а то, мне кажется, у вас тут тоже недопонимание присутствует·
команда
$ ssh -C -L 3306:localhost:3306 p77618@p77618.ftp.ihc.ru
должна быть запущена у вас на локальной машине _однократно_·
пока она работает, она обеспечивает туннель к удалённому серверу·
как только она завершилась (в результате ошибки или если вы её прервали), то всё, туннеля больше нет·
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
TTATPuOT
Сообщения: 35

Re: Туннелирование MySQL

Сообщение TTATPuOT »

sash-kan писал(а):
07.02.2012 23:09
sash-kan писал(а):
07.02.2012 23:03
$ mysql --protocol=TCP -u <пользователь> -p<пароль> <база данных>
теоретически, возможно, сработает и вариант:
$ mysql -h localhost -u <пользователь> -p<пароль> <база данных>

в этом случае, если мне не изменяет склероз, mysql будет пытаться соединиться именно через tcp порт к указанному серверу·
а указать нужно именно localhost — ведь порт 3306 с localhost-а вы уже пробросили на удалённый сервер (с помощью ssh)·

Hrafn писал(а):
07.02.2012 23:06
всегда подключалось нормально
вероятно, использовался при этом параметр -h (--host), что принуждало клиента использовать именно tcp·

0 эфекта
Спасибо сказали:
Аватара пользователя
Hrafn
Сообщения: 213
ОС: Fedora 19

Re: Туннелирование MySQL

Сообщение Hrafn »

вероятно, использовался при этом параметр -h (--host), что принуждало клиента использовать именно tcp·

не, -h тоже не использовал, поскольку смысла нет: точно также пробрасывал на локалхост и коннектился
/ Den siste viking...
Спасибо сказали:
BIgAndy
Сообщения: 1923

Re: Туннелирование MySQL

Сообщение BIgAndy »

Hrafn писал(а):
08.02.2012 09:47
вероятно, использовался при этом параметр -h (--host), что принуждало клиента использовать именно tcp·

не, -h тоже не использовал, поскольку смысла нет: точно также пробрасывал на локалхост и коннектился

/me запасся попкорном.

P.S. Кто не помнит, ssh можноиспользовать в качестве socks прокси/туннеля.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Туннелирование MySQL

Сообщение sash-kan »

TTATPuOT писал(а):
08.02.2012 07:48
0 эфекта
извините, но это не сообщение о том, что произошло·
это просто информационный мусор, содержащий практически ноль процентов информации·
сообщением это было бы, если бы вы скопировали сюда команду, которую вводили, и всё, что она вам выдала·

Hrafn
есть ещё и конфигурационные файлы, системные и пользовательские·
а ещё и сборки mysql могут, конечно, отличаться·
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
Hrafn
Сообщения: 213
ОС: Fedora 19

Re: Туннелирование MySQL

Сообщение Hrafn »

sash-kan, это да, согласен
/ Den siste viking...
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Туннелирование MySQL

Сообщение sash-kan »

sash-kan писал(а):
07.02.2012 23:09
теоретически, возможно, сработает и вариант:
$ mysql -h localhost -u <пользователь> -p<пароль> <база данных>
нет, параметра "-h localhost", скорее всего, будет недостаточно·
по крайней мере у меня и в этом случае mysql пытался соединиться с mysqld именно через файловый сокет·
TTATPuOT
так что используйте параметр "--protocol=TCP"
у меня сработало·

убеждаюсь, что порт 3306 на моей машине никто не слушает

$ telnet localhost 3306 Trying 127.0.0.1... telnet: Unable to connect to remote host: Connection refused $

создаю туннель к машине server

$ ssh -CfNL 3306:localhost:3306 server $

теперь видно, что кто-то слушает порт 3306 на моей машине

$ telnet localhost 3306 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 5 5.0.51aLDkl^rA.`,�3yaXt`f^%;:PbConnection closed by foreign host. $

ну, можно и клиентом попробовать подключиться

$ mysql -u someuser -p somedatabase Enter password: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) $

упс! забыл указать протокол!

с протоколом — всё океу

$ mysql --protocol=TCP -u someuser -p somedatabase Enter password: Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 69217 Server version: 5.0.51a Mandriva Linux - MySQL Standard Edition (GPL) Copyright © 2000, 2010, Oracle and/or its affiliates. All rights reserved. This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to modify and redistribute it under the GPL v2 license Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> exit Bye $


по поводу параметров к ssh, которые я использовал·
я добавил "-f", чтобы процесс ssh уходил в бэкграунд, и "-N", чтобы он при этом не ругался на то, что не указана команда (мне же надо только туннелировать трафик, а выполнять на удалённой стороне команды мне сейчас не нужно)·
этот процесс ssh присутствует в списке процессов:

вот он

$ ps ax | grep 'ssh -CfNL 3306:localhost:3306 server' 3185 ? Ss 0:00 ssh -CfNL 3306:localhost:3306 server $

и выполняет свою работу: переправляет все обращения к локальному порту 3306 на порт 3306 машины server (и возвращает ответы)·
остановить его можно командой kill:

kill <номер процесса>

$ kill 3185 $


чтобы не смотреть список процессов на предмет номера интересующего процесса, можно воспользоваться программой pkill (в кавычки надо подставить полный текст команды, которой запускался ssh-туннель):

Shell

$ pkill -f 'ssh -CfNL 3306:localhost:3306 server' $

Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Туннелирование MySQL

Сообщение sash-kan »

sash-kan писал(а):
08.02.2012 11:28

создаю туннель к машине server

$ ssh -CfNL 3306:localhost:3306 server $

пароль здесь у меня ssh не запросил потому, что я настроил аутентификацию по ключу:

это делается просто

$ ssh-copy-id server user@server's password: Now try logging into the machine, with "ssh 'server'", and check in: .ssh/authorized_keys to make sure we haven't added extra keys that you weren't expecting. $


для mysql можно тоже сделать некоторые «оптимизации»·
вписать в ~/.my.cnf такие, например, строки:

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

[client]
host=localhost
protocol=TCP
database=somedatabase
user=someuser
password=somepassword
теперь вместо "mysql --protocol=TCP -u someuser -p somedatabase" можно просто вводить "mysql"

и пароль тоже не будет запрашиваться, так как указан в ~/.my.cnf

$ mysql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 69326 Server version: 5.0.51a Mandriva Linux - MySQL Standard Edition (GPL) Copyright © 2000, 2010, Oracle and/or its affiliates. All rights reserved. This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to modify and redistribute it under the GPL v2 license Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> exit Bye $

Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
TTATPuOT
Сообщения: 35

Re: Туннелирование MySQL

Сообщение TTATPuOT »

Ну что-то уже есть -
логи:

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

anton@CssDizServer:~$ telnet 127.0.0.1 3306
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
anton@CssDizServer:~$ ssh -C -L 3306:127.0.0.1:3306 p77618@p77618.ftp.ihc.rup77618@p77618.ftp.ihc.ru's password:
Last login: Wed Feb  8 18:34:56 2012 from 31.192.236.180
[p77618@h11 ~]$ mysql -u p77618_auth -p -h p77618.mysql.ihc.ru --protocol=TCP
Enter password:
тут куча мусора
mysql> exit
Bye
[p77618@h11 ~]$ channel 3: open failed: connect failed: Connection refused - в этот момент я проверял "слушается" ли порт.
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Туннелирование MySQL

Сообщение sash-kan »

TTATPuOT писал(а):
08.02.2012 21:14
[p77618@h11 ~]$ mysql -u p77618_auth -p -h p77618.mysql.ihc.ru --protocol=TCP
вы запустили программу mysql на удалённой машине·
а вам (для проверки работоспособности туннеля) нужно запустить её на _локальной_ машине·

раз вы не добавили ключи "-f" и "-n" при запуске ssh (и, следовательно, процесс ssh не ушёл в бэкграунд, а в дополнение к созданному туннелю, ещё и открыл shell на удалённой машине), то можно запустить ещё одно окно эмулятора терминала и в нём уже пробовать telnet и/или mysql·
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали: