MySQL localhost преку VPN: сѐ уште значи локален процес
Базата на податоци што апликацијата ја нарекува localhost е на серверот, а не на вашиот преносен сметач. Користете приватен слушач или SSH пренос, потоа присилете го клиентот на TCP.
Апликацијата на канцеларискиот сервер се поврзува со MySQL на localhost, ја копирате таа име на домаќин во десктоп клиент, и врската или не успева или отвора друга база на податоци. VPN не промени ништо во значењето на зборот: localhost сѐ уште означува машината на која работи клиентот. VPN премести пакети, а не интерфејси. Одлучете до која крајна точка треба да стигне преносниот сметач пред да допрете маршрута.
Чекор 1: одлучете до која крајна точка треба да стигне преносниот сметач
Двата дизајна се легитимни и одговараат на различни прашања. Директен пристап значи дека базата слуша на приватна адреса до која стигнува тунелот, а преносниот сметач се поврзува со таа адреса. Пренесен пристап значи дека базата останува на loopback и SSH сесија го носи портот до вашата машина. Изберете еден намерно, бидејќи нивното мешање дава врска што работи од погрешна причина.
За директен пристап земете го сопственото приватно име или адреса на домаќинот на базата и неговиот порт од оној што ја управува. Адресата на VPN портата не е адресата на базата, освен ако не е истата машина. Потоа потврдете дека слушачот навистина е врзан за тој интерфејс, бидејќи маршрута кон интерфејс не создава слушач на него.
Чекор 2: пренесете го портот само ако слушачот остане локален
Ако базата треба да остане само на loopback, пренесете ја преку SSH и врзете го и локалниот крај на loopback. Адресата за врзување од левата страна и припаѓа на вашиот преносен сметач; целта од десната страна се толкува од страната на SSH серверот, како што опишува референцата за OpenSSH. Заменувањето на овие две улоги е вообичаената причина зошто преносот изгледа дека работи, но не се поврзува со ништо.
ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:13306:127.0.0.1:3306 [email protected]
ss -ltn 'sport = :13306'
Ако SSH слета на скок-домаќин наместо на домаќинот на базата, loopback од десната страна се однесува на скок-домаќинот, а целта мора да се смени во адреса до која тој домаќин стигнува. ExitOnForwardFailure го фаќа неуспехот да се воспостави преносот, но не докажува дека подоцнежните врски до целта успеваат. Оставете ја проверката на клучот на домаќинот вклучена и не го нудите портот за пренос на целиот ваш LAN со врзување за сите интерфејси.
Запрете ако базата мора да остане само на loopback, а не можете да користите SSH. Тогаш директниот пристап е погрешен дизајн, а не конфигурација што треба да се наметне.
Чекор 3: присилете го клиентот на TCP
На Unix, MySQL клиент на кој му се даде localhost стандардно избира Unix сокет, па менувањето само на портот може да го остави да бара сокет што нема никаква врска со вашиот пренос. Користете го експлицитниот TCP протокол и адресата loopback за клиентот да отвори врска до вашиот порт за пренос.
mysql --protocol=TCP --host=127.0.0.1 --port=13306 --user=DB_USER --password
Опцијата за лозинка без вредност прашува наместо да ја стави тајната во командната линија, и тоа е навиката што вреди да се задржи. Другите алатки имаат свој прекинувач за истото разликување, а некои драјвери го третираат localhost исто така посебно. Проверете што прави вашиот клиент наместо да претпоставите дека знаменцето се пренело. Сметката на базата исто така бара дозвола што одговара на изворот што го гледа серверот, а тоа е домаќинот на преносот, не вашиот преносен сметач.
Запрете ако алатката не може да се присили на TCP. Тогаш користете друг клиент или директен пристап до приватниот слушач.
Чекор 4: докажете до која крајна точка всушност стигнавте
Прашајте го серверот што мисли дека е врската. Променливите за име на домаќин, порт и сокет ви кажуваат дали стигнавте преку TCP и кој слушач одговори, а списокот на врски ја покажува изворната адреса што ја запишал серверот. Тој доказ е покорисен од уште една промена на маршрутата.
mysql --protocol=TCP -h 127.0.0.1 -P 13306 -u DB_USER -p -e "SELECT @@hostname, @@port, @@socket"
Запишете која крајна точка сте ја обиделе: локален Unix сокет, вашиот порт за пренос или приватниот слушач. Овие три неуспеси имаат различни поправки, а менувањето на VPN маршрутата додека клиентот сѐ уште зборува со погрешниот localhost е залуден труд. Во белешките одделно држете ја SSH автентикацијата и автентикацијата на базата, бидејќи неуспехот во едната од десктоп клиент изгледа како неуспех во другата. Потоа отстранете го преносот кога ќе завршите.
Списокот завршува кога можете да ги наведете крајната точка, протоколот на клиентот, изворната адреса што ја видел серверот и дозволата што го овозможила. Четири факти, и следниот проблем со врската трае минути наместо попладне.