暂无图片
mysql数据库怎么样实现在另一台服务器上同步
我来答
分享
老鱼
2023-04-23
mysql数据库怎么样实现在另一台服务器上同步

现在有三个运营中的项目A、B、C,需要在另一台服务器上运行一个项目D,项目D需要使用A、B、C项目的数据库,而且数据库需要同步,其中,A、B、D是在一个同网段的云服务器中可以通过内网访问,C项目是在别的服务器上,不能通过内网访问,请问大神们这种情况如何解决。

请尽量说的详细点,先行谢过!

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
Zixin Huo
  1. 在项目A、B、C所在的云服务器中,安装MySQL数据库,并确保其可以被访问。同时,为了保证数据安全性,建议开启MySQL数据库的SSL连接。
  2. 在项目D所在的服务器上,安装MySQL客户端,并使用MySQL客户端连接到项目A、B、C的数据库中。
  3. 为了保证数据库的同步,可以使用MySQL主从复制功能。在A、B、C中选择一台作为主服务器,在D服务器中作为从服务器,确保A、B、C上的数据变化可以同步到D中。如果C项目所在的服务器不能通过内网访问,则可以在C所在的服务器上创建一个SSH隧道,将C服务器上的MySQL端口通过SSH隧道映射到本地端口,然后在D服务器上使用这个本地端口连接到C服务器上的MySQL数据库。
  4. 为了在D服务器中访问A、B、C的数据库,需要为D服务器配置正确的MySQL权限,确保D服务器上的MySQL用户有权限访问A、B、C的数据库。
  5. 可以使用MySQL连接池,确保在高并发情况下,D服务器可以有效地连接到A、B、C的数据库,并保证连接的稳定性。
  6. 为了保证数据的安全性和完整性,建议在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项目的数据库,而且数据库需要同步。

举一个详细具体的例子来说:

  1. 在10.0.0.3服务器上安装MySQL数据库,创建数据库project_d。
  2. 在10.0.0.1和10.0.0.2服务器上安装MySQL数据库,分别创建数据库project_a和project_b。
  3. 在192.168.1.1服务器上安装Oracle数据库然后创建数据库project_c。
  4. 在10.0.0.1和10.0.0.2服务器上的MySQL数据库中,创建一个名为replication的用户,并授予它从远程主机访问数据库的权限。
GRANT ALL PRIVILEGES ON *.* TO 'replication'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; FLUSH PRIVILEGES;
复制
  1. 在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
复制
  1. 在10.0.0.3服务器上的MySQL数据库中,创建一个名为replication的用户,授予它从远程主机访问数据库的权限。
GRANT ALL PRIVILEGES ON *.* TO 'replication'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; FLUSH PRIVILEGES;
复制
  1. 在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
复制
  1. 在10.0.0.3服务器上的MySQL数据库中,使用mysqldump命令备份项目A和项目B的数据库,并恢复到本地的MySQL数据库中。
mysqldump -h
复制
暂无图片 评论
暂无图片 有用 0
打赏 0
老鱼

非常感谢详细的讲解。

还有几个问题:

1.C项目所在服务器是无法通过内网和其他三个服务器互通的,只能通过公网,是否还可以使用你上面说的方式解决。是不是必须把数据库的端口暴露到公网上?

2.项目D所在的服务器是是同时需要同步项目A,B,C三个项目的数据库,需要建立三个project_d_a,project_d_b,project_d_c三个数据库去分别同步吧。

3.有人说快照可以实现,我查了一些资料,快照可以备份和恢复,有这种同步的功能吗?

暂无图片 评论
暂无图片 有用 0
打赏 0
Zixin Huo
2023-05-08
不好意思,现在才看到。 1.理论上通过公网也可行,但是暴露到公网要承受被攻击的风险 2.如果同步的数据库结构相同是不用,不一样最好是要建立 3.有是有,但比较局限,使用是 SQL Server 数据库时可以利用数据库快照功能,它是源数据库的只读静态视图,从而在事务上与源数据库能够保持一致。但是,当需要实现双向或多向的数据同步就不行。回复参考:https://learn.microsoft.com/zh-cn/sql/relational-databases/databases/database-snapshots-sql-server?view=sql-server-ver16
回答交流
Markdown


请输入正文
提交
相关推荐
为什么分组报错:数据集配置错误
回答 1
已采纳
select的列必须是分组的列,或者聚合函数
有什么开源的免费的数据库建模工具推荐吗?
回答 1
dbeave可以凑合用用
整理脚本用什么笔记?
回答 3
OneNote
有没得坐标转换地址的快速方法?
回答 1
写个PY实现https://zhuanlan.zhihu.com/p/358847780
请问各位老大mysql double write机制为什么解决partial write问题?
回答 2
已采纳
因为Linux文件系统页(OSpage)默认大小是4KB,而MySQL的页(Page)默认大小是16KB。如果只是写了一部分页就宕机了,那就写坏。而doublewrite机制下整个数据页落盘刷新的过程
一个亿的数据,做了分区 然后释放空间 我只知道truncate 有更好的方法吗?
回答 1
truncatepartition可以释放。还有droppartition
为什么数据库RAC集群一重启,ASM磁盘组的所属用户和组就都变成root,使用的udev link的方式绑定的磁盘?
回答 1
已采纳
那得看看你的多路径和UDEV的配置权限是怎么写的了。一般都是660grid:oinstall
数据库高并发怎么处理?
回答 2
看是什么高并发,如果是查询高并发可以扩展多个节点,分摊查询压力,如果是修改或者插入高并发,可以采用消息队列削峰处理
数据库需要添加唯一索引 但是重复数据较多,怎么操作?
回答 3
如果有重复数据,创建唯一索引的过程会出错的。我想你的本意是为每行添加唯一的行标识,这个就要看具体数据库了,比如MySQL,可以添加自增列。
达梦数据库sqllog解析出来的表格中,执行时间的单位是毫秒吗?
回答 1
在达梦数据库的SQLLOG解析出来的表格中,执行时间的单位是微秒(μs),而不是毫秒(ms)。