更改从属服务器上的 mysql 表列,然后将其提升为主服务器

更改从属服务器上的 mysql 表列,然后将其提升为主服务器

如果我想更改 NOT NULL 列以允许空值,那么ALTER TABLE在我的 DB 从属服务器上运行该操作、等待它赶上进度,然后将其提升为主服务器是否安全?

答案1

当您从“NOT NULL”变为“NULL”时,这应该没问题。以下是我要做的:

  1. 停止从服务器上的从属SQL线程[1]:mysql> STOP SLAVE SQL_THREAD;
  2. 执行 ALTER TABLE
  3. 启动从属线程:mysql> START SLAVE SQL_THREAD;

然后在主服务器上运行:

  1. 禁用该会话的 bin 日志[2]: mysql> SET SQL_LOG_BIN=FALSE;
  2. 在主服务器上执行 ALTER TABLE
  3. 重新启用会话的 bin 日志: mysql> SET SQL_LOG_BIN=TRUE;

[1] MySQL 复制在从服务器上以两个线程运行。I/O 线程将复制数据从主服务器复制到从服务器。SQL 线程在从服务器上执行该 SQL,执行 INSERT/UPDATE/DELETE/等。您可以独立停止每个线程。

[2] 这只会影响你所在的会话,而不会影响生产应用程序的其他连接。你指示 MySQL 不要将你运行的任何命令添加到 bin 日志中以进行复制。你需要这样做,这样你的命令ALTER TABLE就不会复制到从属服务器上,因为它已经在那里运行了。

答案2

我刚刚读完一篇关于使用 MMM 修改大表假设您正在使用或可以设置MMM,这似乎可以解决您的问题。

相关内容