Назад | Перейти на главную страницу

mysql_upgrade на нескольких экземплярах mysql

Я запускаю 5 экземпляров mysql (сервер резервной репликации), и мне нужно запустить mysql_upgrade на сервере id = 3 (порт 3303). Когда я пытаюсь сделать

# mysql_upgrade -P3303 

Сценарий выполняется на экземпляре №0 (id = 0), а не №3.

Кто-нибудь знает, как я могу это сделать?

Может быть, это просто мелочь, но я думаю, вам нужен пробел после -P и перед номером порта. Или это просто ошибка транскрипции?

Чтобы предотвратить соединение с другими экземплярами, вы можете остановить их все, кроме того, над которым хотите работать.

Если экземпляр даже не запускается, я не думаю, что большинство инструментов будут работать. У него должно быть что-то довольно серьезное, чтобы он даже не запустился. Предположительно у вас есть более старая версия MySQL, с которой она будет работать (с которой вы обновляетесь) - можете ли вы запустить более старый экземпляр, который не требует обновления, и восстановить все свои таблицы перед повторной попыткой обновления? Или даже сделайте дамп и загрузите из старой версии в новую (должно быть хорошо с точки зрения репликации) вместо обновления на месте.

Вы также можете попробовать запустить mysqlcheck вручную, а не через mysql_upgrade.

Вы можете указать Socket:
Я думаю, вам, вероятно, нужно указать файл сокета для конкретного экземпляра с помощью переключателя -S, но я никогда раньше этого не делал. Например:

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

Или вам нужно указать ему использовать TCP:
Если вы не используете сокет и используете tcp, вам необходимо указать tcp с помощью -h 127.0.0.1 (не localhost) или --protocol = tcp. Из Руководство:

Вы также можете указать номер порта для подключения к локальному серверу. Однако, как указывалось ранее, соединения с localhost в Unix по умолчанию будут использовать файл сокета. Вам нужно будет принудительно установить TCP / IP-соединение, как уже было описано, иначе любой параметр, указывающий номер порта, будет проигнорирован.