3

助けてください!

GTID メカニズムに基づいてマスター/スレーブ レプリケーションをセットアップしました。スレーブで mysqld の再起動が発生するまで、レプリケーションは正常に機能します。それから混乱が始まります...

このような再起動の後、レプリケーションを復元できません。「START SLAVE」コマンドを発行すると、次のエラー メッセージが表示されます。

1 行目の ERROR 1794 (HY000): スレーブが構成されていないか、正しく初期化できませんでした。マスターまたはスレーブを有効にするには、少なくとも --server-id を設定する必要があります。追加のエラー メッセージは、MySQL エラー ログにあります。

言うまでもなく、my.cnf に server-id を設定しました (以下を参照)。

/var/log/mysqld.log ファイルで、次のエラー メッセージを見つけました。

[エラー] マスター情報の作成中にエラーが発生しました: 複数のレプリケーション メタデータ リポジトリ インスタンスがデータと共に見つかりました。どちらを選択するのが正しいかを判断できません。

[エラー] レプリケーション情報リポジトリの作成または復元に失敗しました。

何が間違っていたのか理解できません。

マスターとスレーブ間の通信は stunnel を介して ssl トンネリングされますが、再起動するまですべてが正しく機能するため、これは関連する事実ではないと思います。

(mysql の再起動後に) レプリケーションを再確立する唯一の方法は、mysql データ ファイルを手動で削除し、マスターからインポートしたダンプ ファイルを再度ロードすることです。(私は mysqldump を使用します)。これはもちろん不合理です。

my.cnf ファイルは次のとおりです。

スレーブ上:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
server-id=2
log-bin=mysql-bin
binlog_format=ROW
relay_log=relay-log
skip-slave-start
enforce-gtid-consistency
gtid-mode=ON
log-slave-updates
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

母親について:

[mysqld]
server-id=1
log-bin=mysql-bin
binlog_format=ROW
gtid-mode=on
enforce-gtid-consistency
log-slave-updates
innodb_buffer_pool_size = 1G
query_cache_size = 32M

スレーブ マシン: Centos 6.6、mysql 5.6.24。

マスター マシン: RHEL 6.6、mysql 5.6.10。

どんな助けでも大歓迎です!

ありがとう

ナダブ・ブルム

4

3 に答える 3

1

なるほど、謎が解けました。

master と slave 間のトンネリング通信の手段として、この問題は stunnel の使用法とは何の関係もないことを私がどのように書いたか覚えていますか? まあ、私は間違っていました。

問題は、マスターへのスレーブ通信のエンドポイントとして localhost ポート 3307 を使用したことです。(stunnel はこのポートをリッスンし、データを master-server ip に転送しました)。したがって、「マスターの変更」は次の方法で行われました。

change master to master_host="localhost", master_port=3307, master_user="XXX", master_password="XXX", MASTER_AUTO_POSITION = 1;'

その「localhost」のことが混乱を引き起こしました。「127.0.0.1」に変更したところ、再起動しても害はありません!

Hitech と Jaydee に感謝します。

于 2015-04-29T06:45:20.737 に答える
1

マスター上 -

mysql> reset master;

[このコマンドはマスターのバイナリ ログをクリアし、新しいログから開始します。必要に応じて保存してください。]

スレーブ mysqld を起動したら、次のコマンドを実行します。

mysql> stop salve;
mysql> reset slave;
mysql> change master to master_host='192.168.10.116', master_user='root', master_password='root', master_auto_position=1;
mysql> start slave;
mysql> show slave status \G

すべてがうまくいけば、スレーブを再起動できます (すべてのトランザクションがコミットされている場合は、マスター バイナリ ログでトランザクションの実行が開始されます。リレー ログ ファイルを確認できます)。

于 2015-04-28T11:16:19.807 に答える