错误 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
我正在尝试在 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