mysql_upgrade在多个mysql实例上

我正在运行MySQL的5个实例(备份复制服务器),我需要在服务器id = 3(端口3303)上运行mysql_upgrade 。 当我尝试做

 # mysql_upgrade -P3303 

该脚本运行在#0(id = 0)实例而不是#3。

任何人都知道我可以做到这一点?

可能只是一个小东西,但我认为你需要在-P之后和端口号之前的空格。 或者这只是一个抄写错误?

为了防止连接到其他事物,除了要处理的事物之外,您可以阻止所有事物。

如果该实例甚至不会启动,那么我认为大部分工具都不会起作用。 它必须有一些相当严重的错误,导致它甚至不能启动。 大概你有一个旧版本的MySQL,它可以工作(你正在升级) – 你能运行一个不需要升级的旧实例,并在重试升级之前修复所有的表格吗? 甚至做一个转储,并从旧版本加载到新的(应复制到复制),而不是进行就地升级。

你也可以尝试手动运行mysqlcheck,而不是通过mysql_upgrade。

你可以指定Socket:
我想你可能需要使用-S开关指定特定实例的套接字文件,但是我从来没有这样做过。 例如:

mysql_upgrade -S /var/run/mysqld/mysqld.sock

或者,你需要告诉它使用TCP:
如果您不使用套接字并使用tcp,则需要使用-h 127.0.0.1(不是localhost)或–protocol = tcp指定tcp。 从手册 :

您也可以指定连接到本地服务器的端口号。 但是,正如前面所指出的那样,在Unix上与localhost的连接默认使用套接字文件。 您将需要强制一个TCP / IP连接已经描述或任何指定端口号的选项将被忽略。