小编Rol*_*DBA的帖子

我们可以在 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
查看次数

是否可以在触发器中获取执行调用堆栈?

我有 10 个存储过程,每个存储过程都将 INSERT 插入到一个 tableX 中。

是否可以在 tableX 的触发器主体中获取导致 tableX 修改的对象(存储的 proc1 或 sp2 或....)?

谢谢你。

trigger sql-server-2008

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

哪种 DBMS 适合超快速读取和简单数据结构?

我正在开发一种产品,作为其操作的一部分,必须跟踪大量文件/目录。这个想法是将统计信息存储在数据库中,然后在启动时为每个文件创建监视。更改的文件将排队(在数据库中)以组同步到远程数据库。它们将按优先级顺序同步,数字介于 1-10 之间。

数据库的相关资料:

  • < 100,000 个统计信息条目
  • 启动时读取整个数据库,只需要文件路径
  • 排队的文件将有一个优先级字段(不需要搜索其他任何内容)
  • 插入可能很慢

我发现了几个我认为可以工作的数据库,但我不确定哪个是最好的:

  • Redis - 将文件路径存储为键,将统计数据存储为值;队列将是一个列表
  • MongoDB - 比 Redis 更多的查询选项,但仍然很快

我认为 NoSQL 数据库将是这里的最佳解决方案,因为没有太多的关系逻辑在进行,并且总数据大小不会太大(例如 < 100 mb,接近 < 30 mb)。我确实看过 SQLite,因为它似乎很简单,可以嵌入到可安装的应用程序中。

由于这是面向最终用户的分布式应用程序而不是高负载服务器,因此数据库不必支持许多并发用户。这里的主要优先事项是找到一个模型最有意义的数据库。

那么问题来了,哪个数据库最适合这种情况?

另外,是否还有其他数据库对这样的应用程序更有意义?

database-recommendation

18
推荐指数
2
解决办法
2万
查看次数

“复制到 tmp 表”非常慢

这是我的查询示例:

SELECT
    nickname, 
    CASE class_id
      WHEN 1 THEN 'Druid'
      WHEN 2 THEN 'Necromancer'
      WHEN 3 THEN 'Mage'
      WHEN 4 THEN 'Priest'
      WHEN 5 THEN 'Warrior'
      WHEN 6 THEN 'Stalker'
      WHEN 7 THEN 'Paladin'
      WHEN 8 THEN 'Psionic'
    END class_name,
    ROUND(AVG(level),2) level,
    ROUND(AVG(tabard_id),2) tabard,
    CASE rank_id
      WHEN 1 THEN 'Leader'
      WHEN 2 THEN 'Officer'
      WHEN 3 THEN 'Veteran'
      WHEN 4 THEN 'HonoryMember'
      WHEN 5 THEN 'OrdinaryMember'
      WHEN 6 THEN 'Alt'
      WHEN 7 THEN 'Apprentice'
      WHEN 8 THEN 'Penalty'
    END rank_name,
    ROUND(AVG(loyality),2) …
Run Code Online (Sandbox Code Playgroud)

mysql optimization temporary-tables

18
推荐指数
2
解决办法
9万
查看次数

mysql中的iblog文件究竟是什么

我想了解这些 ibdata 文件,因为它们在崩溃恢复过程中起着至关重要的作用。我无法通过网络找到合适的资源。

mysql innodb logs

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

JOIN 条件和 WHERE 条件之间是否存在执行差异?

这两个示例查询之间是否存在性能差异?

查询 1:

select count(*)
from   table1 a
join   table2 b
on     b.key_col=a.key_col
where  b.tag = 'Y'
Run Code Online (Sandbox Code Playgroud)

查询 2;

select count(*)
from   table1 a
join   table2 b
on     b.key_col=a.key_col
   and b.tag = 'Y'
Run Code Online (Sandbox Code Playgroud)

注意唯一的区别是补充条件的位置;第一个使用WHERE子句,第二个将条件添加到ON子句中。

当我在 Teradata 系统上运行这些查询时,解释计划是相同的,JOIN 步骤显示了每种情况下的附加条件。但是,在关于 MySQL 的这个 SO 问题上,其中一个答案表明首选第二种样式,因为WHERE在进行连接之后进行处理。

编码这样的查询时是否有一般规则要遵循?我猜它必须依赖于平台,因为它显然对我的数据库没有影响,但这也许只是 Teradata 的一个功能。而如果它与平台相关的,我非常喜欢弄几个文件的参考资料; 我真的不知道该找什么。

mysql performance oracle

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

我应该在 AWS RDS t1-micro for MySQL 中增加 max_connections 吗?

我有一个运行 MySQL 5.5 的 AWS RDS t1-micro。它给了我太多的连接错误。我检查过,它同时允许 34 个最大连接。我读到的是,我可以通过为这个 Micro 实例创建一个数据库参数组来增加这个最大值。

我的困惑是

  • 我应该在 DB 参数组中增加 micro 的最大连接值吗?或者我应该考虑升级到下一个提供更多最大连接数的 RDS 级别(125)吗?
  • 我应该将微型 RDS 上的 max_connections 增加到 125 还是升级到 RDS 小实例?
  • 为什么以及我应该根据哪些因素做出决定?

谢谢

mysql mysql-5.5 amazon-rds

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

为什么在禁用查询缓存时,MySQL 线程经常显示“正在释放项目”状态?

当我运行时SHOW PROCESSLIST,经常有大量 INSERT/UPDATE 线程处于“释放项目”状态。

MySQL 手册表明,线程处于这种状态的至少部分原因涉及查询缓存 - 可能由于数据更改而使缓存的查询无效。

但是, myquery_cache_size设置为 0 应该完全禁用查询缓存。

有这么多线程处于这种状态,还有什么其他原因?

相关表使用 InnoDB 存储引擎。

mysql innodb

17
推荐指数
2
解决办法
2万
查看次数

永远不会使用以 DATETIME 作为复合键第一部分的主键索引

我在将日期时间(甚至日期)作为主键的第一部分进行索引时遇到问题。

我使用 MySQL 5.5

这是我的两个表:

-- This is my standard table with dateDim as a dateTime

CREATE TABLE `stats` (
 `dateDim` datetime NOT NULL,
 `accountDim` mediumint(8) unsigned NOT NULL,
 `execCodeDim` smallint(5) unsigned NOT NULL,
 `operationTypeDim` tinyint(3) unsigned NOT NULL,
 `junkDim` tinyint(3) unsigned NOT NULL,
 `ipCountryDim` smallint(5) unsigned NOT NULL,
 `count` int(10) unsigned NOT NULL,
 `amount` bigint(20) NOT NULL,
 PRIMARY KEY (`dateDim`,`accountDim`,`execCodeDim`,`operationTypeDim`,`junkDim`,`ipCountryDim`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8


-- Here is a copy with datDim as an integer

CREATE TABLE `stats_todays` (
`dateDim` …
Run Code Online (Sandbox Code Playgroud)

mysql index primary-key mysql-5.5

17
推荐指数
1
解决办法
3138
查看次数

如何摆脱“最大用户连接数”错误?

我正在将 MySQLi 用于我的网络应用程序,但是每当我想访问某个特定页面时,我都会得到mysqli_connect() [function.mysqli-connect]: (42000/1203): User ***_user already has more than 'max_user_connections' active connections.

我已经尝试关闭所有连接,但这并没有改善情况。

有没有办法确切知道在任何特定时刻打开了哪些连接或任何其他可以帮助我解决此问题的有用数据?

顺便说一句,我使用的是 PHP 5.2.17 和 MySQL 5.1。

mysql mysql-5 max-connections php mysql-5.1

17
推荐指数
1
解决办法
14万
查看次数