我正在开发一个在客户端 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 来获得关于如何实现这一目标的大量答案。但是,我找不到有关此类设置的任何文档,也找不到推荐的方法。
到目前为止,这是我对可能解决方案的想法,请提供反馈或替代路线:
这应该导致客户端仅提取其架构的二进制日志数据。缺点(据我所知)是它极大地增加了我们设置的复杂性,可能使其更加脆弱。
想法?这种方法甚至会奏效吗?
请注意,我们在 RedHat 上运行 MySQL 5.0 服务器,但如果它产生解决方案,我们可以升级到 5.5。
我有 10 个存储过程,每个存储过程都将 INSERT 插入到一个 tableX 中。
是否可以在 tableX 的触发器主体中获取导致 tableX 修改的对象(存储的 proc1 或 sp2 或....)?
谢谢你。
我正在开发一种产品,作为其操作的一部分,必须跟踪大量文件/目录。这个想法是将统计信息存储在数据库中,然后在启动时为每个文件创建监视。更改的文件将排队(在数据库中)以组同步到远程数据库。它们将按优先级顺序同步,数字介于 1-10 之间。
数据库的相关资料:
我发现了几个我认为可以工作的数据库,但我不确定哪个是最好的:
我认为 NoSQL 数据库将是这里的最佳解决方案,因为没有太多的关系逻辑在进行,并且总数据大小不会太大(例如 < 100 mb,接近 < 30 mb)。我确实看过 SQLite,因为它似乎很简单,可以嵌入到可安装的应用程序中。
由于这是面向最终用户的分布式应用程序而不是高负载服务器,因此数据库不必支持许多并发用户。这里的主要优先事项是找到一个模型最有意义的数据库。
那么问题来了,哪个数据库最适合这种情况?
另外,是否还有其他数据库对这样的应用程序更有意义?
这是我的查询示例:
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) 我想了解这些 ibdata 文件,因为它们在崩溃恢复过程中起着至关重要的作用。我无法通过网络找到合适的资源。
这两个示例查询之间是否存在性能差异?
查询 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 5.5 的 AWS RDS t1-micro。它给了我太多的连接错误。我检查过,它同时允许 34 个最大连接。我读到的是,我可以通过为这个 Micro 实例创建一个数据库参数组来增加这个最大值。
我的困惑是
谢谢
当我运行时SHOW PROCESSLIST,经常有大量 INSERT/UPDATE 线程处于“释放项目”状态。
MySQL 手册表明,线程处于这种状态的至少部分原因涉及查询缓存 - 可能由于数据更改而使缓存的查询无效。
但是, myquery_cache_size设置为 0 应该完全禁用查询缓存。
有这么多线程处于这种状态,还有什么其他原因?
相关表使用 InnoDB 存储引擎。
我在将日期时间(甚至日期)作为主键的第一部分进行索引时遇到问题。
我使用 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) 我正在将 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 ×8
mysql-5.5 ×3
innodb ×2
mysql-5.1 ×2
amazon-rds ×1
index ×1
logs ×1
mysql-5 ×1
mysql-5.0 ×1
optimization ×1
oracle ×1
performance ×1
php ×1
primary-key ×1
replication ×1
trigger ×1