mysql数据库怎么样实现在另一台服务器上同步
现在有三个运营中的项目A、B、C,需要在另一台服务器上运行一个项目D,项目D需要使用A、B、C项目的数据库,而且数据库需要同步,其中,A、B、D是在一个同网段的云服务器中可以通过内网访问,C项目是在别的服务器上,不能通过内网访问,请问大神们这种情况如何解决。
请尽量说的详细点,先行谢过!
我来答
添加附件
收藏
复制链接
微信扫码分享
在小程序上查看
分享
添加附件
问题补充
2条回答
默认
最新
- 在项目A、B、C所在的云服务器中,安装MySQL数据库,并确保其可以被访问。同时,为了保证数据安全性,建议开启MySQL数据库的SSL连接。
- 在项目D所在的服务器上,安装MySQL客户端,并使用MySQL客户端连接到项目A、B、C的数据库中。
- 为了保证数据库的同步,可以使用MySQL主从复制功能。在A、B、C中选择一台作为主服务器,在D服务器中作为从服务器,确保A、B、C上的数据变化可以同步到D中。如果C项目所在的服务器不能通过内网访问,则可以在C所在的服务器上创建一个SSH隧道,将C服务器上的MySQL端口通过SSH隧道映射到本地端口,然后在D服务器上使用这个本地端口连接到C服务器上的MySQL数据库。
- 为了在D服务器中访问A、B、C的数据库,需要为D服务器配置正确的MySQL权限,确保D服务器上的MySQL用户有权限访问A、B、C的数据库。
- 可以使用MySQL连接池,确保在高并发情况下,D服务器可以有效地连接到A、B、C的数据库,并保证连接的稳定性。
- 为了保证数据的安全性和完整性,建议在A、B、C中启用MySQL的binlog功能,并在D中启用MySQL的relay log功能。这样,即使A、B、C中的数据发生错误或被恶意篡改,也可以通过D中的binlog和relay log来进行数据还原和修复。
举例
假设现有三个运营中的项目:
- 项目A:IP地址为10.0.0.1,使用MySQL数据库,数据库名为project_a。
- 项目B:IP地址为10.0.0.2,使用MySQL数据库,数据库名为project_b。
- 项目C:IP地址为192.168.1.1,使用Oracle数据库,数据库名为project_c。
现在需要在另一台服务器上运行一个项目D,IP地址为10.0.0.3,使用MySQL数据库,数据库名为project_d,需要使用A、B、C项目的数据库,而且数据库需要同步。
举一个详细具体的例子来说:
- 在10.0.0.3服务器上安装MySQL数据库,创建数据库project_d。
- 在10.0.0.1和10.0.0.2服务器上安装MySQL数据库,分别创建数据库project_a和project_b。
- 在192.168.1.1服务器上安装Oracle数据库然后创建数据库project_c。
- 在10.0.0.1和10.0.0.2服务器上的MySQL数据库中,创建一个名为replication的用户,并授予它从远程主机访问数据库的权限。
GRANT ALL PRIVILEGES ON *.* TO 'replication'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
- 在10.0.0.1和10.0.0.2服务器上的MySQL数据库中,开启二进制日志功能。
vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin
server-id=1 # 10.0.0.1为1,10.0.0.2为2
- 在10.0.0.3服务器上的MySQL数据库中,创建一个名为replication的用户,授予它从远程主机访问数据库的权限。
GRANT ALL PRIVILEGES ON *.* TO 'replication'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
- 在10.0.0.3服务器上的MySQL数据库中,用mysqlbinlog命令从10.0.0.1和10.0.0.2服务器上的MySQL数据库中获取二进制日志,然后应用到本地的MySQL数据库中。
mysqlbinlog --host=10.0.0.1 --user=replication --password=password mysql-bin.000001 | mysql -h 10.0.0.3 -u root -p project_d
mysqlbinlog --host=10.0.0.2 --user=replication --password=password mysql-bin.000001 | mysql -h 10.0.0.3 -u root -p project_d
- 在10.0.0.3服务器上的MySQL数据库中,使用mysqldump命令备份项目A和项目B的数据库,并恢复到本地的MySQL数据库中。
mysqldump -h
评论
有用 0非常感谢详细的讲解。
还有几个问题:
1.C项目所在服务器是无法通过内网和其他三个服务器互通的,只能通过公网,是否还可以使用你上面说的方式解决。是不是必须把数据库的端口暴露到公网上?
2.项目D所在的服务器是是同时需要同步项目A,B,C三个项目的数据库,需要建立三个project_d_a,project_d_b,project_d_c三个数据库去分别同步吧。
3.有人说快照可以实现,我查了一些资料,快照可以备份和恢复,有这种同步的功能吗?
评论
有用 0不好意思,现在才看到。
1.理论上通过公网也可行,但是暴露到公网要承受被攻击的风险
2.如果同步的数据库结构相同是不用,不一样最好是要建立
3.有是有,但比较局限,使用是 SQL Server 数据库时可以利用数据库快照功能,它是源数据库的只读静态视图,从而在事务上与源数据库能够保持一致。但是,当需要实现双向或多向的数据同步就不行。回复参考:https://learn.microsoft.com/zh-cn/sql/relational-databases/databases/database-snapshots-sql-server?view=sql-server-ver16
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
墨值悬赏

