Reverse tunnel works manually, not for replication

2019-08-26 23:37发布

问题:

My MASTER mysql server is on a local network, and I have a new slave which is remote (i.e. on the internet). As MASTER does not have an accessible IP, I gathered from the docs that I should establish a reverse tunnel. I execute this:

ssh -f -N -T -R 7777:localhost:3306 user@slave.slave.com

on the MASTER. The connection seems to work - I can go to the slave and connect with mysql to the MASTER without problem. For some reason though, replication does not start. MASTER is already replicating to two other slaves without problems - seems the configuration is correct there.

I initiated replication on the slave as:

CHANGE MASTER TO MASTER_HOST='127.0.0.1', 
                 MASTER_PORT=7777,
                 MASTER_USER='my_repl', 
                 MASTER_PASSWORD='xxxxx', 
                 MASTER_LOG_FILE='mysql-bin.nnnnn', 
                 MASTER_LOG_POS=mm;

SLAVE STATUS reports mysql trying to connect to the remote, but never succeeding:

error connecting to master 'my_repl@127.0.0.1:7777' - retry-time: 60  retries: 86400

Can anyone suggest how to diagnose this problem?

BTW: OS is Linux.

回答1:

My apologies... I didn't realize I had to define a new user with 127.0.0.1 as IP.

So, 'intranet' connections use

replication_user@machine_name 

as id, the connection which comes through the reverse tunnel uses

replication_user@127.0.0.1 

as id. Both have to be declared to mysql separately. The rest of the info in the original message is valid - maybe this helps someone...

Greetings, John

PS: Forgot to mention - I debugged this remotely (both MASTER and SLAVE are remote to me) using tcpdump:

tcpdump -i lo 'tcp port 7777'

on the SLAVE side, and

tcpdump -i lo 'tcp port 3306'

on the MASTER (of course that would not be very useful when there is much traffic).



标签: mysql ssh tunnel