我正在尝试在两个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