GA

2022/01/11

MySQL 8.0.26とそれ以降のmysqldumpで--master-dataや--dump-slaveでバックアップを取るとリストアしようとした時にエラる

TL;DR

  • 慌てず騒がず、エディタでダンプを開いて次の行を消してください

    • WARNING: --master-data is deprecated and will be removed in a future version. Use --source-data instead.
    • または WARNING: --dump-slave is deprecated and will be removed in a future version. Use --dump-replica instead.
  • Affects Meすると早く修正されると思います


Command-line options for mysqldump that contain the terms “master”, “slave”, or “mts”.

MySQL :: MySQL 8.0 Release Notes :: Changes in MySQL 8.0.26 (2021-07-20, General Availability)

この変更によって、 --master-data, --dump-slave を使っていると警告が出るように(それぞれ --source-data, --dump-replica を使ってね、と)なったんですが、

こともあろうにこれを標準出力(= ダンプを吐き出すのと同じチャンネル)に出す ので、ここの部分がシンタックスエラーになるという悲しい結末。

bash-4.4# mysqldump --master-data=2 --all-databases | head -10 | cat -n
mysqldump: Got errno 32 on write
     1  WARNING: --master-data is deprecated and will be removed in a future version. Use --source-data instead.     <---- 標準入力だからパイプを通ってcat -nまで到達している、しかもコメント扱い(先頭 '-- ' )にもなってない
     2  -- MySQL dump 10.13  Distrib 8.0.26, for Linux (x86_64)
     3  --
     4  -- Host: localhost    Database:
     5  -- ------------------------------------------------------
     6  -- Server version       8.0.26
     7
     8  /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
     9  /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    10  /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

bash-4.4# mysqldump --master-data=2 --all-databases > dump.sql

bash-4.4# mysql < dump.sql   ### というわけでさっきのWARNINGがシンタックスエラー
ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WARNING: --master-data is deprecated and will be removed in a future version. Us' at line 1

このオプションを使っている記憶がある方はご留意を。

これがコメントアウトなり標準エラー出力なりに書かれれば問題ないだけなので、もし直面したらこの1行だけを消してあげれば大丈夫です。

0 件のコメント :

コメントを投稿