错误 ERROR 2013 (HY000):在 Lightsail 上设置组复制查询期间丢失与 MySQL 服务器的连接

Error ERROR 2013 (HY000): Lost connection to MySQL server during query setting up group replication on Lightsail

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

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

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

(超时设置为 20)

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

my.cnf 在 Lightsail 上看起来像这样

# 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 public 地址。我不明白为什么它拒绝连接。

不过,我可以使用 mysql -h 命令和复制用户名从 Lightsail 连接到主服务器。

更新

所以,如果服务器不在同一 VPC 或本地网络中,显然无法远程工作。

因此,唯一的解决方案是使用 Master/Master 复制的“已弃用”解决方案(根据 mysql 官方网站)。

要做到这一点,必须首先设置一个普通的 Master/Slave 复制(我不会在这里解释这个,因为有很多关于如何设置它的教程,例如: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数据库你需要在slave上创建一个slave用户

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

  • 然后运行service mysql restart

关于大师:

  • 获取二进制日志文件和位置使用:SHOW MASTER STATUS;

  • 运行 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 STATUS\G 检查是否一切正常。

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

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