MariaDB(MySQL)でレプリケーションエラー

CentOS 7がサポート終了となるので、RHEL8系のRockyLinux 8に移行する作業で、旧DBをエクスポートして新サーバーインポートすると、データベースの停止時間が長いので、一旦レプリケーションを作成して、SlaveからMasterに昇格してDBの移行をする事にしました。

旧サーバーはMariaDB5.5系で、新サーバーはMariaDB10系です。これでインポートはできたのですが、レプリケーションを開始すると以下のエラーでました

Last_SQL_Error: Unable to load replication GTID slave state from mysql.gtid_slave_pos: Table 'mysql.gtid_slave_pos' doesn't exist

MariaDB 5.5ではGTID(Global Transaction ID)が導入されていないので「mysql.gtid_slave_pos」がないのでエラーとなっているみたいです。新サーバー側では「mysql.gtid_slave_pos」のテーブルは存在していますが中身を見るとエラーになります

ネットで調べると、エラーとなっているテーブル削除すればいいとの記事を見つけましたので、削除すると怖いので「/var/tmp」に一度退避してからMariaDBを再起動しました。

データベースのファイルを直接さわりますので、下記の作業する前にデータベースをバックアップすることをお勧めします

# gtid_slave_pos関連のファイルを違うディレクトリに移動
$ sudo mv /var/lib/mysql/mysql/gtid_slave_pos.ibd /var/tmp
$ sudo mv /var/lib/mysql/mysql/gtid_slave_pos.frm /var/tmp

# MariaDB(MySQL)の再起動
$ sudo systemctl restart mariadb

再起動したら、エラーもなくなりレプリケーションが開始されたので良かったですのですが移動したテーブルがなくなった状態も気持ち悪いので、同じバージョンのMariaDBのサーバーがあったので、そちらより「mysql.gtid_slave_pos」のテーブル構造のみエクスポートして、先程、gtid_slave_pos のテーブルを退避したサーバーにインポートする事にしました。

サーバーの移行作業後は、SlaveからMasterに昇格して、今は問題なく動いています

# [gtid_slave_pos]テーブルが存在しているサーバーより、テーブル構造のみエクスポート
mysqldump -u root -p --lock-tables=0 --no-data mysql gtid_slave_pos> gtid_slave_pos.sql

# SCP等でエクスポートしたファイルをコピーして、[gtid_slave_pos]テーブルがないサーバーにインポート
mysql -u root -p mysql < /var/tmp/gtid_slave_pos.sql