重新加载my.cnf,而无需重新启动MySQL服务


26

我必须配置一个MySQL服务器来充当复制主服务器。

我修改了my.cnf以激活二进制日志,但是现在为了重新加载配置,我必须使用重新加载服务/etc/init.d/mysqld restart。问题是服务器每秒接收几个查询,而我不想丢失所有可能同时到达的数据。

有没有一种方法可以在不重新启动服务的情况下重新加载配置文件my.cnf?


3
/etc/init.d/restart将重新启动整个主机。您可能在想/etc/init.d/mysqld restart
Kevin M,2009年

是的,我建议mysqld重新启动。编辑。谢谢!
戴维·埃斯帕特

Answers:


28

专门
针对MySQL: my.cnf中的选项是系统变量。这些变量是动态的(可以在运行时更改)或不是动态的。动态的可以在运行时使用SET变量语法进行更改。您可以使用查看变量SHOW VARIABLES;。但是根据手册中的此链接,二进制日志选项不是动态的。因此,看来您必须重新启动。您可能要等一个比我自己了解mysql更好的人来确认这一点。

一般的守护程序:
在Linux中,/ etc / init.d /包含用于启动和停止守护程序(服务)的脚本。由于这些是脚本,因此可以使用文本编辑器查看它们。这些脚本中的许多将带有reload参数。查看我的mysql脚本,使用mysqladmin命令将重载作为参数。因此,在重载下的mysqladmin手册说:

重装

Reload the grant tables.

因此,通常看起来,这不是为了更改配置,而是为了更改特权(也许是等效的flush privileges命令?)。


2
嘿,很好的解释。似乎没有重启就没有办法。如果没有人回答解决方案或解决方法,我将接受您的问题。谢谢。
David Espart,2009年

根据您的链接,它看起来像SET GLOBAL binlog_format ='STATEMENT'; 会成功吗?
凯尔·史密斯

其他Kyle:看起来很像,但我认为必须启用二进制日志记录才能执行任何操作(并且可能已设置)。该变量是在我当前的MySQL 5.0.x版本之后引入的,因此我无法进行测试。
凯尔·布​​兰特

我必须搜索SET命令语法-如果有人需要它,这是一个链接:dev.mysql.com/doc/refman/5.1/en/set-option.html
Mark McDonald

4
还值得一提的是,当您使用MySQL版本时,哪些变量是动态更改。例如,在5.x中,您可以即时启用慢速查询日志,但是在4.x中,您不能(如我昨天发现的那样)。
Coops 2011年

1

我一直在寻找解决方案,但对找到的有限帮助并不满意。一个小伙子提出要杀人-HUP ..对我没用..

我所做的是暂停apache实例..然后再继续它们..在服务器上,我平均每秒有25个活动请求,就像是一种魅力。

与sudo(显然)pkill -STOP httpd && /etc/init.d/mysqld restart && pkill -CONT httpd

当然,您的apache进程名称和/或mysql重新启动脚本可能与我的有所不同,但您的想法正确!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.