错误错误2013(HY000):在Lightsail上设置组复制的查询过程中,与MySQL服务器的连接丢失



我正在尝试在两个vp之间配置sql组复制,其中一个是非AWS Lightsail实例,并充当主实例。

然而,我似乎无法使Lightsail实例正常工作。它在主服务器上启动时没有问题,但当我尝试在Lightsail服务器上启动组复制时

START GROUP_REPLICATION; 
ERROR 2013 (HY000): Lost connection to MySQL server during query

(timemout设置为20(

端口3306和33061打开了ufw中的两个服务器,也打开了AWS Lightsail的防火墙。

Lightsail上的my.cnf看起来像这个

# Shared replication group configuration
loose-group_replication_group_name = "<uuid>"
loose-group_replication_ip_whitelist = "<primary_static_public_ip>,<lightsail_static_public_ip>"
loose-group_replication_group_seeds = "<primary_static_public_ip>:33061,<lightsail_static_public_ip>:33061"
# Single or Multi-primary mode? Uncomment these two lines
# for multi-primary mode, where any host can accept writes
loose-group_replication_single_primary_mode = OFF
loose-group_replication_enforce_update_everywhere_checks = ON
# Host specific replication configuration
server_id = 2
bind-address = "0.0.0.0"
report_host = "<lightsail_static_public_ip>"
loose-group_replication_local_address = "<lightsail_static_public_ip>:33061"

在主服务器上,我只使用主服务器的地址和白名单Lightsail公共地址。我不明白它为什么拒绝连接。

但是,我可以使用mysql -h命令和复制用户名从Lightsail连接到primary。

更新

因此,如果服务器不在同一专有网络或本地网络中,显然无法远程工作。

因此,唯一的解决方案是使用";被否决的";Master/Master复制的解决方案(根据mysql官方网站(。

要做到这一点,必须首先设置一个常见的主/从复制(我不会在这里解释,因为有很多关于如何设置的教程,例如:https://www.digitalocean.com/community/tutorials/how-to-set-up-master-slave-replication-in-mysql)。

一旦复制到位并工作:

在从属服务器上:

  • 编辑/etc/mysql/my.cnf以添加以下行

    #use public IP address of the server or 0.0.0.0 if you wish to bind it to  
    #more than a single IP address (ie using localhost)
    bind-address = "0.0.0.0" 
    binlog_do_db = db_to_replicate
    binlog_ignore_db = db_to_ignore
    
  • 然后,如果您不同步mysql数据库,您将需要在从属上创建一个从属用户

    CREATE USER 'slave_usr'@'%' IDENTIFIED BY 'password' REQUIRE SSL;GRANT REPLICATION SLAVE ON *.* TO 'slave_usr'@'%';

  • 然后运行service mysql restart

在MASTER上:

  • 使用:SHOW MASTER STATUS;获取binlog文件和位置

  • 运行CHANGE MASTER命令:CHANGE MASTER TO MASTER_SSL=1, MASTER_HOST='slave_host_public_ip',MASTER_USER='<slave_usr>', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.00000X', MASTER_LOG_POS= binlog_pos;

    您可能需要事先运行stop slave

  • 然后运行START SLAVE;

您可以在两台服务器上使用SHOW SLAVE STATUSG检查所有操作是否正常。

如果bind-address到0.0.0.0,建议拒绝所有不需要连接到服务器的IP

使用ufw的示例:sudo ufw allow from <ip> to any port 3306

最新更新