为什么有些mysql系统变量是只读的

neo*_*tam 5 mysql

mysql服务器系统变量差不多有277个。在这些变量中,有些变量是动态的,而很少是动态的。

我不明白只读变量背后的原因是什么。为什么mysql系统变量很少是只读的。如果他们使这些变量动态化将会发生什么。

只读变量有什么深层原因吗?

现在我们可以考虑:

  • innodb_buffer_pool_size
  • innodb_校验和
  • 日期时间格式
  • 日志箱

我们还可以在http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html找到许多其他变量

当然,我知道我们不能像这样改变变量version。但许多其他变量log-bin都不是动态的。general_log对我来说,如果和是动态的就没有意义log_slow_queries。为什么 log-bin 不是动态的?同样,还有许多其他变量。

Rol*_*DBA 3

innodb_buffer_pool_size

InnoDB 存储引擎有太多移动部件,无法动态调整缓冲池大小,因为缓冲池与系统表空间 (ibdata1) 和事务日志(ib_logfile0、ib_logfile1)交互。

日志箱

尽管有MySQL 文档log-bin,您仍然可以使用另一个名为 的变量来更改效果SQL_LOG_BIN。看看效果:

会议

如果你跑

SET SQL_LOG_BIN = 0; 
Run Code Online (Sandbox Code Playgroud)

这将禁止您的数据库会话记录二进制日志事件。

如果你跑

SET GLOBAL SQL_LOG_BIN = 0; 
Run Code Online (Sandbox Code Playgroud)

这将禁止所有传入的数据库会话记录二进制日志事件。

普通日志/慢速日志

作为一名DBA,我很高兴普通日志和慢日志是动态的。否则

  • 如何执行任何日志轮转?
  • 如何在磁盘空间耗尽之前停止这些日志?

这是我发表的一些关于进行日志轮换的帖子

日期时间格式

mysqld 通常能够识别时区和日期时间显示的内部化。我不认为按需改变日期时间格式有什么好处。这实际上可能会导致问题,对于 mysqld 来说不是那么严重,但是对于 PHP/Python/Ruby 脚本来说,这些脚本从 MySQL 实例读取日期,并且可能将“04/12/2013”​​误解为 4 月 12 日,而实际上应该是 12 月 4 日。这将是开发人员要处理的噩梦。将日期时间格式设置为只读变量只是提供了一个安全网,以防止这种玩命的举动,而正确规划数据库和代码与日期的互操作性将是有序的。