更改从属的MySQL表列,然后提升为主

如果我想要更改一个NOT NULL列以允许空值,对于我来说,在我的数据库从服务器上运行该ALTER TABLE是否安全,等待它赶上来,然后将其提升为主?

当你从“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以便您的ALTER TABLE不复制到从属,因为它已经在那里运行。

我刚刚读完一篇关于使用MMM改写大型表格的文章 ,看起来好像能解决您的问题,假设您正在使用或可以设置MMM。