Как я направил бы локальный (127.0.0.1) трафик MySQL к внешнему SQL-серверу?

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

Пользователи Linux не должны изучать операции оболочки вообще, если они не чувствуют себя подобно (и не становитесь вынужденными к некоторой ситуацией). И наоборот: можно выполнить все необходимые задачи с помощью только командную строку (никакие файловые менеджеры или графический интерфейсы пользователя даже). Все это зависит от того, для чего Вы (предназначают к) используете свою систему.

1
04.04.2012, 05:42
2 ответа

Я думаю, что это могло бы быть тем, что Вы ищете:

iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to <private ip>:3306
1
27.01.2020, 23:54

У меня есть подобная установка, но немного более сложный.

На моем домашнем ноутбуке у меня есть a /etc/xinetd.d/mysqlfwd содержа

service mysqlfwd
{
        type            = UNLISTED
        port            = 3307 # could be 3306 as well if ther will never be a MySQL server installed here
        socket_type     = stream
        protocol        = tcp
        wait            = no
        user            = ports
        server          = /usr/local/bin/ports
        server_args     = -s mysql@<mydomain>
}

Это mysql@<mydomain> обозначает подсистему SSH, определенную на сервере. Как mysql не и не имеет, определенное имя подсистемы, я принял решение определить тот один с помощью (соответствующая Конвенция для Имен) [http://tools.ietf.org/html/rfc4250#section-4.6.1].

Используемый /usr/local/bin/ports определяется как

#!/usr/bin/env python

def ssh(*args, **opts):
    import subprocess
    map= { False: 'no', True: 'yes' }
    op = [ "-o%s=%s" % (k, map.get(v, v)) for k, v in opts.iteritems()]
    args = op + list(args)
    sp = subprocess.Popen(['ssh'] + args)
    return sp

def ssh_conn(*args, **opts):
    args = ['connect@myservernamehere', '-C' ] + list(args)
    opts2 = dict(ControlPath='/tmp/ssh-%r@%h:%p')
    opts2.update(opts)
    return ssh(*args, **opts2)

def master():
    sp = ssh_conn('-f', 'sleep', '15h', ControlMaster=True)
    sp.wait()

def client(*args):
    sp = ssh_conn(*args, **dict(ControlMaster=False))
    sp.wait()

def main():
    import sys
    args = sys.argv[1:]
    if not args:
        master()
    else:
        client(*args)

if __name__ == '__main__':
    main()

В упомянутом сервере существует названный пользователь connect и, как сказано, названная подсистема mysql@<mydomain> Последний определяется в /etc/ssh/sshd_config со строкой

Subsystem mysql@<mydomain> /usr/bin/netcat localhost 3306

Пользователь connect существует только, чтобы иметь платформу для работы, под рукой имеет, кроме принятия моего "ключа перенаправления портов" через ~/.ssh/authorized_keys, никакие специальные функции, свойства или такой.

Таким образом, мой сервер может сохранить свой порт MySQL частным (не доступный снаружи), но у меня есть способ соединить его, тем не менее.

0
27.01.2020, 23:54

Теги

Похожие вопросы