このページは機械翻訳したものです。
InnoDB ReplicaSet は、InnoDB クラスタ と同様の方法でデプロイします。 まず、いくつかの MySQL サーバーインスタンスを構成します。最小インスタンスは 2 つです。セクション6.1「MySQL AdminAPI」 を参照してください。 一方はプライマリとして、このチュートリアル rs-1
では機能します。もう一方のインスタンスはセカンダリとして機能し、このチュートリアル rs-2
ではプライマリによって適用されるトランザクションをレプリケートします。 これは、非同期 MySQL レプリケーションから認識されるソースおよびレプリカと同等です。 次に、MySQL Shell を使用していずれかのインスタンスに接続し、ReplicaSet を作成します。 ReplicaSet を作成したら、それにインスタンスを追加できます。
InnoDB ReplicaSet はサンドボックスインスタンスと互換性があり、テスト目的などでローカルにデプロイするために使用できます。 手順については、サンドボックスインスタンスのデプロイを参照してください。 ただし、このチュートリアルでは、各インスタンスが異なるホストで実行されている本番 InnoDB ReplicaSet をデプロイすることを前提としています。
InnoDB ReplicaSet を使用するには、次の前提条件に注意する必要があります:
MySQL バージョン 8.0 以降を実行しているインスタンスのみがサポートされます
GTID ベースのレプリケーションのみがサポートされており、バイナリログファイルの位置レプリケーションは InnoDB ReplicaSet と互換性がありません
行ベースのレプリケーション (RBR) のみがサポートされ、ステートメントベースのレプリケーション (SBR) はサポートされていません
レプリケーションフィルタはサポートされていません
管理対象外レプリケーションチャネルはどのインスタンスでも許可されていません
ReplicaSet は最大 1 つのプライマリインスタンスで構成され、1 つまたは複数のセカンダリがサポートされます。 ReplicaSet に追加できるセカンダリ数に制限はありませんが、ReplicaSet に接続されている各 MySQL Router は各インスタンスを監視する必要があります。 したがって、ReplicaSet に追加されるインスタンスが多いほど、より多くの監視を行う必要があります。
ReplicaSet は、MySQL Shell によって完全に管理される必要があります。 たとえば、レプリケーションアカウントは MySQL Shell によって作成および管理されます。 たとえば、SQL ステートメントを直接使用してプライマリを変更するなど、MySQL Shell 外部のインスタンスに対する構成変更はサポートされていません。 InnoDB ReplicaSet を使用する場合は、常に MySQL Shell を使用してください。
AdminAPI および InnoDB ReplicaSet を使用すると、基礎となる概念を深く理解しなくても、MySQL レプリケーションを使用できます。 ただし、背景情報については、レプリケーション を参照してください。
dba.configureReplicaSetInstance(
を使用して、レプリカセットで使用する各インスタンスを構成します。MySQL Shell は、インスタンスに接続して構成するか、instance
)instance
を渡して特定のリモートインスタンスを構成できます。 ReplicaSet でインスタンスを使用するには、永続化設定をサポートする必要があります。 設定の永続化を参照してください。
管理タスクのためにインスタンスに接続する場合、適切な権限を持つユーザーが必要です。 ReplicaSet を管理するユーザーを作成するには、setupAdminAccount()
操作を使用することをお薦めします。 管理用のユーザーアカウントの作成を参照してください。 または、clusterAdmin
オプションが指定されている場合は、dba.configureReplicaSetInstance()
操作で管理者アカウントをオプションで作成できます。 アカウントは、InnoDB ReplicaSet の管理に必要な正しい権限セットで作成されます。
管理者アカウントは、同じクラスタまたはレプリカセットのすべてのインスタンスで同じユーザー名とパスワードを持つ必要があります。
rsadmin
という名前のクラスタ管理者で、rs-1:3306
でインスタンスを構成するには、次のコマンドを発行します:
mysql-js> dba.configureReplicaSetInstance('root@rs-1:3306', {clusterAdmin: "'rsadmin'@'rs-1%'"});
対話型プロンプトは、指定されたユーザーに必要なパスワードを要求します。 MySQL Shell が現在接続されているインスタンスを構成するには、null のインスタンス定義を指定できます。 たとえば、次のコマンドを発行します:
mysql-js> dba.configureReplicaSetInstance('', {clusterAdmin: "'rsadmin'@'rs-1%'"});
対話型プロンプトは、指定されたユーザーに必要なパスワードを要求します。 これにより、MySQL Shell が現在接続されているインスタンスが InnoDB ReplicaSet での使用に有効かどうかがチェックされます。 可能であれば、InnoDB ReplicaSet と互換性のない設定が構成されます。 クラスタ管理者アカウントは、InnoDB ReplicaSet に必要な権限で作成されます。
インスタンスを構成したら、InnoDB クラスタ で使用される MySQL Group Replication ではなく、インスタンスに接続し、dba.createReplicaSet()
を使用して MySQL 非同期レプリケーションを使用する管理対象 ReplicaSet を作成します。 MySQL Shell が現在接続されている MySQL インスタンスは、ReplicaSet の初期プライマリとして使用されます。
dba.createReplicaSet()
操作では、インスタンスの状態および構成が管理対象 ReplicaSet と互換性があることを確認するために複数のチェックが実行され、互換性がある場合はインスタンスでメタデータスキーマが初期化されます。 操作をチェックするが、実際にはインスタンスを変更しない場合は、dryRun
オプションを使用します。 これにより、MySQL Shell が ReplicaSet を作成するために実行するアクションがチェックされ、表示されます。 ReplicaSet が正常に作成されると、ReplicaSet
オブジェクトが返されます。 したがって、返された ReplicaSet
を変数に割り当てることをお薦めします。 これにより、
操作をコールするなどして、ReplicaSet を操作できます。 インスタンス ReplicaSet
.status()rs-1
で example
という名前の ReplicaSet を作成し、rs
変数に割り当てるには、次のように発行します:
mysql-js> \connect root@rs-1:3306
...
mysql-js> var rs = dba.createReplicaSet("example")
A new replicaset with instance 'rs-1:3306' will be created.
* Checking MySQL instance at rs-1:3306
This instance reports its own address as rs-1:3306
rs-1:3306: Instance configuration is suitable.
* Updating metadata...
ReplicaSet object successfully created for rs-1:3306.
Use rs.add_instance() to add more asynchronously replicated instances to this replicaset
and rs.status() to check its status.
操作が成功したことを確認するには、返された ReplicaSet
オブジェクトを操作します。 たとえば、ReplicaSet に関する情報を表示する
操作を提供します。 返された ReplicaSet
.status()ReplicaSet
はすでに変数 rs
に割り当てられているため、次のコマンドを発行します:
mysql-js> rs.status()
{
"replicaSet": {
"name": "example",
"primary": "rs-1:3306",
"status": "AVAILABLE",
"statusText": "All instances available.",
"topology": {
"rs-1:3306": {
"address": "rs-1:3306",
"instanceRole": "PRIMARY",
"mode": "R/W",
"status": "ONLINE"
}
},
"type": "ASYNC"
}
}
この出力は、example
という名前の ReplicaSet が作成され、プライマリが rs-1
であることを示しています。 現在、インスタンスは 1 つのみで、次のタスクは ReplicaSet にインスタンスを追加することです。