![mysql_upgrade 在多个 mysql 实例上](https://linux22.com/image/492254/mysql_upgrade%20%E5%9C%A8%E5%A4%9A%E4%B8%AA%20mysql%20%E5%AE%9E%E4%BE%8B%E4%B8%8A.png)
我正在运行 5 个 mysql 实例(备份复制服务器),我需要mysql_upgrade
在服务器 id=3(端口 3303)上运行。当我尝试执行
# mysql_upgrade -P3303
该脚本在 #0(id=0)实例上运行,而不是 #3。
有人知道我该怎么做吗?
答案1
可能只是一件小事,但我认为 -P 之后和端口号之前需要一个空格。或者这只是一个转录错误?
为了防止连接到其他实例,您可以停止所有实例,只留下您想要处理的实例。
如果实例无法启动,那么我认为大多数工具也无法工作。它一定存在相当严重的错误,导致它无法启动。假设您有一个可以与之配合使用的旧版 MySQL(您正在从该版本升级)- 您可以运行不需要升级的旧实例并在重试升级之前修复所有表吗?或者甚至可以从旧版本转储并加载到新版本(就复制而言应该没问题),而不是进行就地升级。
您也可以尝试手动运行 mysqlcheck,而不是通过 mysql_upgrade。
答案2
您可以指定套接字:
我认为您可能需要使用 -S 开关指定特定实例的套接字文件,但我以前从未这样做过。例如:
mysql_upgrade -S /var/run/mysqld/mysqld.sock
或者,您需要告诉它使用 TCP:
如果你不使用套接字并使用 tcp,则需要使用 -h 127.0.0.1 (不是 localhost)或 --protocol=tcp 指定 tcp。从手动的:
您还可以指定用于连接到本地服务器的端口号。但是,如前所述,在 Unix 上连接到 localhost 默认会使用套接字文件。您将需要强制建立 TCP/IP 连接,如上所述,否则任何指定端口号的选项都将被忽略。