相关疑难解决方法(0)

我们可以在 MySQL 5.0 Replication 中做些什么来解决带宽问题?

我正在开发一个在客户端 PC (Win) 上运行的应用程序,它配置了一个 MySQL 服务器 5.1 实例,它将充当远程主站的只读从站。远程主服务器有几十个模式,但我每个客户端只需要一个,所以我在 my.ini 中提供了replication-do-db设置以仅复制客户端需要的模式。复制有效,但是当我们的客户进入只能通过 3G 无线网络访问互联网的地区时,他们会迅速超出数据计划限制并遇到昂贵的问题。

据我了解,MySQL 将所有模式的所有事务写入单个 binlog 文件,这意味着每个客户端必须下载在主服务器上的每个模式上执行的所有事务,然后在下载后,对每个复制应用数据库过滤器 -客户端的 my.ini 文件中的do-db设置。

为了最大限度地减少这种低效率,我采用了slave_compressed_protocol = 1设置,这似乎将传输的数据减少了 50%,但仍然导致我们的客户快速超过他们的数据限制,从而增加了 3G 账单。

我无法想象我是唯一面临这个问题的人,所以我相信我会通过设置 x = y 来获得关于如何实现这一目标的大量答案。但是,我找不到有关此类设置的任何文档,也找不到推荐的方法。

到目前为止,这是我对可能解决方案的想法,请提供反馈或替代路线:


  1. 为每个模式设置一个“代理”从属(在不同的机器上,或具有不同 MySQL 实例/端口的同一个机器上)
  2. 将代理从服务器配置为仅复制客户端希望复制的一个数据库。
  3. 将客户端的 MySQL 实例配置为相应代理从站的从站。

应该导致客户端仅提取其架构的二进制日志数据。缺点(据我所知)是它极大地增加了我们设置的复杂性,可能使其更加脆弱。

想法?这种方法甚至会奏效吗?

请注意,我们在 RedHat 上运行 MySQL 5.0 服务器,但如果它产生解决方案,我们可以升级到 5.5。

mysql replication mysql-5.5 mysql-5.1 mysql-5.0

18
推荐指数
1
解决办法
2560
查看次数

记录 MySQL 数据库更改查询和用户

出于安全原因,我需要在服务器端(运行 Debian 6.0 Squeeze)记录所有可能更改 MySQL DB(v. 5.1)内容的查询以及发布它的用户。我不得不排除

  • 由于性能问题的通用查询日志(它记录了所有内容,而且 IO 太多)
  • 二进制日志,因为它不记录用户的姓名。
  • 使用诸如ngrep捕获网络流量和过滤器之类的工具UPDATEDELETE因为这会让我处理事务并且我不知道收到的查询是否真的被执行了。

我找不到任何可以让我更改 MySQL 固有日志行为的设置,因此我正在寻找其他解决方案。到目前为止,我提出了两种可能性:

  • 将一般查询日志写入命名管道并将过滤器和写入器附加到管道的另一端 - 但我担心这...
  • 将相关日志分别传输到服务器,但那样我必须发送查询两次(一次用于数据库,一次用于日志记录),很难确保日志与数据库同步(事务、锁等) .),并且出于安全原因,信任客户端真正发送日志可能是不明智的

背景:

  • 用户通过 Java 桌面应用程序访问数据库,该应用程序打开到 MySQL 服务器的 SSH 隧道
  • 我使用 EclipseLink 作为持久性提供者
  • 该应用程序大量使用事务
  • 服务器在共享环境中运行

您对如何执行我的日志记录有更好的想法吗?

mysql logs

5
推荐指数
1
解决办法
3492
查看次数

标签 统计

mysql ×2

logs ×1

mysql-5.0 ×1

mysql-5.1 ×1

mysql-5.5 ×1

replication ×1