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
ディスカッション
コメント一覧
まだ、コメントがありません