Ztyx Asked: 2014-03-06 06:49:59 +0800 CST2014-03-06 06:49:59 +0800 CST 2014-03-06 06:49:59 +0800 CST 在 MySQL 服务器主机上更改时钟时间的风险 772 我有一个 MySQL 服务器主机,它的时钟大约有 75 分钟的误差。在 MySQL 运行时更改主机时钟是否有任何风险? 更新:显然NOW()和其他返回当前时间的函数将返回不同的结果。就我而言,我正在考虑 MySQL 中的自旋锁和其他可怕的内部结构。 mysql time 1 个回答 Voted Best Answer RolandoMySQLDBA 2014-03-06T07:21:31+08:002014-03-06T07:21:31+08:00 二进制日志将使用它具有的任何时间戳顺序记录事件。在时钟更改前后使用任何二进制日志会使特定日志无法用于 PITR(时间点恢复)。 如果 DB Server 是 Slave,Replication 可能会跳过某些事件的处理。 如果您启用了二进制日志记录或复制,我会执行以下操作 在 DB1 上,停止写入数据库 在 DB2 上,运行SHOW SLAVE STATUS\G多次以确保没有新的命令正在处理并且 Seconds_Behind_Master 为 0 在 DB2 上,STOP SLAVE; 在 DB1 上,RESET MASTER;(擦除所有二进制日志) 停止 DB1 上的 MySQL 关闭 停止 DB2 上的 MySQL 关闭 在 DB1 和 DB2 上设置 Linux 时间(确保时间匹配) 在 DB2 上启动 MySQL 关闭 在 DB1 上启动 MySQL 关闭 在 DB1 上,RESET MASTER;(再次擦除所有二进制日志) 在 DB2 上,CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=4; 在 DB2 上,START SLAVE; 这里的想法是确保所有二进制日志和中继日志都是时间同步的。然后可以从这些日志中正确解释 NOW() 函数。 警告 当涉及到夏令时时,在可能没有必要更改时钟时间时要非常小心。由于自 1970 年 1 月 1 日起时钟时间以秒为单位写入二进制日志,因此可能没有必要。由于时钟已关闭 75 分钟,请尽快执行此操作。不要等到夏令时开始。
二进制日志将使用它具有的任何时间戳顺序记录事件。在时钟更改前后使用任何二进制日志会使特定日志无法用于 PITR(时间点恢复)。
如果 DB Server 是 Slave,Replication 可能会跳过某些事件的处理。
如果您启用了二进制日志记录或复制,我会执行以下操作
SHOW SLAVE STATUS\G
多次以确保没有新的命令正在处理并且 Seconds_Behind_Master 为 0STOP SLAVE;
RESET MASTER;
(擦除所有二进制日志)RESET MASTER;
(再次擦除所有二进制日志)CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=4;
START SLAVE;
这里的想法是确保所有二进制日志和中继日志都是时间同步的。然后可以从这些日志中正确解释 NOW() 函数。
警告
当涉及到夏令时时,在可能没有必要更改时钟时间时要非常小心。由于自 1970 年 1 月 1 日起时钟时间以秒为单位写入二进制日志,因此可能没有必要。由于时钟已关闭 75 分钟,请尽快执行此操作。不要等到夏令时开始。