我希望我的活动每天在 00:20 运行。我对时间安排感到困惑。我应该使用第一个选项还是第二个选项?
选项1
CREATE EVENT my_event
ON SCHEDULE
EVERY 1 DAY
STARTS '2014-04-30 00:20:00' ON COMPLETION PRESERVE ENABLE
DO
# My query
Run Code Online (Sandbox Code Playgroud)
选项 2
CREATE EVENT my_event
ON SCHEDULE
AT ('2014-04-30 00:20:00'+ INTERVAL 1 DAY) ON COMPLETION PRESERVE ENABLE
DO
# My query
Run Code Online (Sandbox Code Playgroud) 我只是设置了一些存储过程以使用 CREATE EVENT 在事件调度程序中运行。
我试图找到它运行的历史存储在哪里(如果在某个地方)。我查看了文档,但找不到任何内容。
是否有一些表格或日志可以让我看到我的预定事件已成功运行?
在 MySQL 5.6.7 之前,官方 RPM附带这些文件:
/usr/share/mysql/my-innodb-heavy-4G.cnf
/usr/share/mysql/my-medium.cnf
/usr/share/mysql/my-huge.cnf
/usr/share/mysql/my-large.cnf
/usr/share/mysql/my-small.cnf
Run Code Online (Sandbox Code Playgroud)
在5.6.8中,这些文件都没有了,只剩下一个:
/usr/share/mysql/my-default.cnf
Run Code Online (Sandbox Code Playgroud)
我不是 MySQL 调优专家,过去总是以my-innodb-heavy-4G.cnf
. 现在我只剩下一个配置选项:
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
Run Code Online (Sandbox Code Playgroud)
调整这个变量是大多数优化的关键,还是在安装新服务器时我应该调整其他相关参数?
在这种情况下,我在哪里可以找到等效的文件,该文件将包含仅 InnoDB 的 4GB RAM 专用 MySQL 服务器的合理默认值?
以下是情况的简要说明:
我们正在创建一个真正的无状态应用程序前端(即改进遗留软件)。这意味着我们可以有许多(100 多个)应用服务器来处理用户流量,每个应用服务器可能需要连接到 50 多个服务器中的任何一个来随时提取数据。
拥有这么多应用服务器的原因是代码的计算量非常大。也许最终我们可以转向使用更强大硬件的更少应用程序服务器,但我们还没有做到这一点。
我的问题: 如何管理这种环境中的连接池情况?
如果我们想象一个“好”的连接池大约有 64 个连接,那么让每个应用服务器为每个数据库服务器生成一个连接池似乎是不可行的。这将导致对每个数据库服务器建立100+x64 = 6400 个持久连接......这太多了吗?
可以做什么?是否有某种可以使用的连接池代理软件?
我刚刚从 MySQL 5.6 升级到 5.7,并且意外地发现一个 WordPress 插件表包含一个荒谬的 438 个字段,并且超过了 8126 字节的行大小限制。
这是我在运行时收到的警告mysql_upgrade
:
行大小太大 (> 8126)。将某些列更改为 TEXT 或 BLOB 或使用 ROW_FORMAT=DYNAMIC 或 ROW_FORMAT=COMPRESSED 可能会有所帮助。在当前行格式中,内联存储 768 字节的 BLOB 前缀。
不过,这只是一个警告,桌子还在那里。我无法创建具有相同结构的新表,但有趣的是,我可以保留旧表并使用它(至少,SELECT
从它)。
我已经阅读了RolandoMySQLDBA和Bill Karwin对类似主题的回答,但没有任何解决方案可以帮助我:
ROW_FORMAT=DYNAMIC
为还不够,因为该表充满了内联 UTF-8VARCHAR
字段,这些字段仅超过最大大小我已经向插件开发人员报告了这个错误,并希望他们能尽快修复该表,但与此同时,我被这个非法表困住了。
所以问题是:
我从 MySQL 5.6 升级。我也尝试DYNAMIC
和COMPRESSED
格式,但没有运气。我计算了 integer + varchar 字段的大小,它们总共有 17,059 个字节,所以我没有机会以这种方式成功。
该插件名为Photo …
我四处寻找锁定整个数据库的解决方案,到目前为止我发现的唯一一个是FLUSH TABLES WITH READ LOCK。
这对于备份来说很好,但不幸的是,当我使用模式更改修补数据库时,我无法使用它来阻止对数据库的其他访问。如果我运行ALTER TABLE
after FLUSH TABLES WITH READ LOCK
,我会收到以下消息:
无法执行查询,因为您有一个冲突的读锁
有没有办法在我修补数据库时暂时阻止其他数据库连接访问数据库?
我不想主动拒绝其他连接,我只想让它们“暂停”,直到修补完成(几秒钟)。
我怎样才能做到这一点?
我尝试在 Amazon RDS for MySQL 上创建此函数:
CREATE FUNCTION GetRootZoneId (zoneId INT) RETURNS INT READS SQL DATA
BEGIN
DECLARE _id, _parentId INT;
SELECT zoneId INTO _parentId;
my_loop: LOOP
SELECT id, parentId
INTO _id,_parentId
FROM Zone
WHERE id = _parentId;
IF _parentId IS NULL THEN
LEAVE my_loop;
END IF;
END LOOP my_loop;
RETURN _id;
END;
Run Code Online (Sandbox Code Playgroud)
这将仅用于一次性查询以更新现有数据库表。
运行它让我出现以下错误:
错误 1419 (HY000):您没有 SUPER 权限并且启用了二进制日志记录(您可能想要使用不太安全的 log_bin_trust_function_creators 变量)
此限制是否也适用于存储过程,还是仅适用于函数?
如果它也适用于存储过程,是否有任何替代方法可以在不设置的情况下执行等效代码log_bin_trust_function_creators=1
?请注意,我知道如何在 RDS 上更改此设置,如果可能,我只想避免这种情况。
我已经阅读了许多关于取决于存储引擎的主键效率的文章,但我很困惑。
给定一个简单的多对多表,其中包含两个字段storeId
和zoneId
,以下哪种设计对 InnoDB 最有效,为什么?
CREATE TABLE store_zone(
storeId INT(10) UNSIGNED NOT NULL,
zoneId INT(10) UNSIGNED NOT NULL,
PRIMARY KEY(storeId, zoneId)
);
Run Code Online (Sandbox Code Playgroud)
CREATE TABLE store_zone(
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
storeId INT(10) UNSIGNED NOT NULL,
zoneId INT(10) UNSIGNED NOT NULL,
PRIMARY KEY(id),
UNIQUE KEY(storeId, zoneId)
);
Run Code Online (Sandbox Code Playgroud)
笔记:
storeId
,我需要 ( , zoneId
) 对上的唯一键store
和zone
桌子,在这里没有显示可读性,所以在这两种情况下有上一个额外的要求指标zoneId
,以及我刚刚下载了 MySQL 5.7 的第一个 GA 版本,并注意到 RPM 包带有两个版本的 MySQL 服务器包:
普通服务器包和“最小”服务器包有什么区别?
我在 MySQL 网站上找不到此信息。
我尝试通过WHM重新启动MySQL,现在重新启动时间太长,进度条仍然显示。
我能做些什么?
我仍然可以通过 SSH 访问服务器,但无法连接到 MySQL。这很紧急,因为我的在线商店现在已关闭。
重新启动 HTTP 服务器 (Apache) 会有帮助吗?
mysql ×10
event ×2
innodb ×2
mysql-5.7 ×2
amazon-rds ×1
jobs ×1
multi-tenant ×1
my.cnf ×1
phpmyadmin ×1
process ×1
shutdown ×1