0

我正在尝试在 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 的防火墙上开放。

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 连接到主节点。

4

1 回答 1

1

更新

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

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

为此,必须首先设置一个通常的主/从复制(我不会在这里解释这一点,因为有很多关于如何设置它的教程,例如:https ://www.digitalocean.com/community/教程/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

在主上:

  • 使用以下命令获取 binlog 文件和位置: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

于 2021-04-06T16:04:46.687 回答