Clusterの概要説明とデモをさせて頂きました。プレゼン資料をスライドシェアにアップロードしたので、2017年4月にリリースされたMySQL標準の高可用性構成に興味あるある方、若しくは高可用性構成を検討の方はご覧ください。Lightプラグインをアップグレードしたら古いPHPで動かなかったので、PHP5.6のバージョンにアップグレードしました。WordPressのアップグレードのタイミングでwp-social-bookmarking-light.phpがエラーになったら、PHPを5.5以上にアップグレードしてみて下さい。Replicationは、グループで一つのIDを持つ為、通常のシングルインスタンスと同じようにレプリケーションを組む事が出来ます。REPLICATIONを準備。Replicationにスレーブ接続用のアカウントを作成し、スレーブにデータをコピーしたので、レプリケーションをスレーブ側のグループレプリケーションで開始。MASTER出来なかったり、パラメータ周りやレプリケーションの設定でいくつか考慮が必要なので、慣れるまでは十分に手順の確認と検証して下さい。ミッションクリティカルな環境では、設計の段階でサポートを受けると安心かと思います。https://www.mysql.com/jp/support/参考までに、Defaultでシングルマスターモードでもauto_incrementの値が7になっているため、group_replication_auto_increment_increment=1等で設定を変更すると良いかと思います。変更しない場合は、以下のように値がIncrementされていきます。補足:双方向にレプリケーションも可能ですが、やはり事前に確認が必要ですので事前のPOCをお願いします。以下の様に、逆方向にもレプリケーションを張る事は可能です。グループレプリケーションとグループレプリケーションの間は非同期でレプリケーションを張っています。その為、両方で同じデータを同時に変更しないようにする必要があります。Clusterの場合は、グループレプリケーションだけで構成した以外にも考慮が必要です。Routerの設定ファイルが自動的に作成されます。Replicationの状況をモニタリングしています。それにより、構成変更や障害発生時には自動的に検知してアプリケーションを適切なデータベースに振り分けてくれます。Replicationの構成を認識している。rdbmsTweetMySQL5.7で約20程のJSON関数が追加されていましたが、MySQL8.0においても更に追加でJSON関数が加えられているので、基本的な動作のみを確認しています。JSON関数マニュアルhttps://dev.mysql.com/doc/refman/5.7/en/json-functions.htmlMySQL5.7のJSONの概要に関しては、こちらにて資料がダウンロード可能です。https://www.mysql.com/jp/why-mysql/presentations/mysql-json-201701-ja/まだ、MySQL8.0はDMRなので、これからまだ仕様が変わる部分がある事はご了承ください。ReplicationはシングルマスターモードがDefaultなので、Auto_Incrementの値も普段使いなれている値の1に設定し直して利用する事にしました。実際にサーバーの初期設定時の段階で予め変更しておくと良いかと思います。Default設定の7で利用するのが良いでしょう。Replication設定時のDefault値マルチマスターモードであれば、このまま利用するが個人的には、auto_incrementの値は1つずつ増えて欲しいので通常のMySQLの設定に変更。sec)【メモ】シングルマスターモードなので、トランザクション分離レベルはREPEATABLE-READのままでOK。ReplicationのトポロジーViewやAdvisor等で、モニタリングを簡素化して、システムの安定稼働と運用負荷を軽減してくれるようになりました。自作でモニタリングツールを作る事も可能ですが、ツールのアップデート等に工数がかかるので、出来るだけ既存のツールを利用したい場合は有用かと思います。ONLINEグループによってコミットされたトランザクション、キューの増加状況、競合の検出数、検査されたトランザクションの数等を確認。Replicationの状態を可視化して、詳細を管理ノードで一元管理する事が可能。障害発生時は、メール若しくはSNMPでトラップ送信して知らせる事も可能。Partitioningがサポートされるようになり、多くパーティションを利用している環境で、メモリーの利用率を大幅に下げる事が出来るようになっている。Engineがデフォルトでロードされなくなるので注意を促す為に、MySQL5.7.17から”–disable-partition-engine-check”を設定して下さいというWarningがエラーログに出るようになっています。yoku0825さんが速攻で確認して、ブログを書かれているので確認してみて下さい。Paritioningがサポートされている。EngineもまだDefaultで含まれている。MySQL5.7.17で確認すると以下のような感じ。MySQL5.7までは、まだメタデータのFRMファイルも作成されている。engineは含まれていない。MySQL8.0からはfrmがテーブルに格納されるのでファイルは無い。MySQL8.0でNDB,InnoDB以外でパーティションを作成しようとすると以下のようにエラーになる。Cluster”がGAになりました。http://mysqlserverteam.com/mysql-innodb-cluster-ga/複数サーバーを用意して検証する事も出来ますが、手取り早く手元のlocalhost環境で検証したい場合はSandboxモードを利用すると良いでしょう。(3台~9台:奇数構成を推奨しています)mysqlshコマンドでSandbox用のインスタンスを作成しています。mysqlユーザーで実行すると、ホームディレクトリに以下のようにPort毎にフォルダーが出来ます。データファイル、オプションファイル共に以下のフォルダーに配置されます。上記で3台のインスタンスが作成されたので、mysqlshを使って接続して、グループレプリケーションの設定とノードを参加させます。上記コマンドでグループレプリケーション(シングルマスターモード)が作成されたので、ステータスを確認して見ます。グループレプリケーションに接続する為に、bootstrapオプションを利用してmysqlrouterを立ち上げます。ReplicationのステータスとRouterからの接続をハンドリングする為のメタデータが作成されます。上記オプションで作成されたmysqlrouterのコンフィグレーションファイルは以下の様になっています。Routerはこのメタデータを参照してサーバーを自動的に切り替えます。Routerを起動します。接続を確認してみます。シングルマスターモードなので、PRIMARYは常に同じインスタンスに接続しに行きます。SECONDARYはラウンドロビンで接続先を割り振られます。Indexがサポートされる。これによりMySQL5.7と比較して、大きなテーブルでの降順(DESC)のデータ参照処理を、高速に実行する事が出来るようになる。小さいテーブルに関しては、既存のMySQL5.7でもインデックスが利用出来るので、それ程差は出ないかと思います。(INDEXをDESCで作成し直した場合)インデックスを降順に作成したので、先程とはEXTRAが反対になっている事が確認出来る。Teamのブログを確認下さい。5.7までは、インデックスのデータはASCで格納されています。こちらは、DESCで格納したインデックスと比べて、降順のデータの参照パフォーマンスは遅いが、クエリーにDESCオプションを付けて、直近のデータを参照するとASCで作成したINDEXを利用してデータを参照する為、インデックスを利用した後方参照処理になる為、インデックスが無い場合と比べても高速なレスポンスで後方参照処理を行う事が出来る。以下のマニュアルは、若干分かり難いがASC、DESCを付けてインデックスを作成しても、MySQL5.5以降のMySQLであれば昇順(ASC)で作成されたINDEXでASCもDESCも処理出来る為、高速に参照する事が可能です。MySQL8.0で処理がより高速になる。終了させることができます。これらのキーワードは、インデックス値の昇順または降順での格納を指定する将来の拡張のために許可されています。現在、これらは解析されますが、無視されます。インデックス値は、常に昇順で格納されます。MySQL5.7.18の実行プランは以下のような感じです。インデックスを利用して降順(DESC)参照が行われている事が確認出来る。MySQL8.0RCがリリースされた頃に、大きなテーブルでレスポンスの差を確認して見たいと思います。rdbmsTweetMySQL8.0におけるROLEによるユーザー権限管理についての確認。Userを利用する事で、ROLEと同じように権限をまとめて管理する事が出来るようになりましたが、MySQL8.0からは正式にROLEが追加されて、複数ROLEの切り替えやROLEのネストが出来るようになります。これにより、多くのユーザーを管理するような環境では、権限管理工数やミスが削減出来る事になるかと思います。sec)USER01にrole80の権限を付与ROLE権限を付与する前は、何も権限を付与していない為、information_schemaのみ確認可能。その他参考:roleはpassword_expireとaccount_lockedで設定されている通常のアカウント同様に利用したい場合、必要であればexpiredとlockedを解除してあげる。Roleはrole80になっているので、DEMOデータベースのみにアクセス出来るが、SETコマンドでroleを切り替える事が出来る。sec)role80のメンバーのuser01でログインして、付与された権限を確認してみる。role80には、role81の権限が付与されているのでDEMOとsakilaデータベース共にアクセス可能になっている。