背景:最近、同社のプロジェクトは同時実行のプレッシャーに耐えられないようなので、最適化が差し迫っています。現在のシステムは単一のデータベース システムであるため、可能な限り最適化するよう最善を尽くしましたが、データベースのボトルネックにより、プロジェクトの同時実行能力は依然として大幅に制限されています。そこで、プロジェクトの同時実行機能を高めるためにデータベースを追加することを検討しました。 アイデア:1: 集中ライブラリを作成します。主に履歴データを保存します。クエリとして使用します。 2: 複数のビジネス ライブラリを作成します。プロジェクトの高い同時実行機能を満たすためです。 デモ環境:1: VM ware 仮想マシン - CentOS 7
2: MySQL 5.7 ステップ1: メインライブラリ100 my.cnf を設定します。 [mysqld] lower_case_table_names = 1 # テーブル名は大文字と小文字を区別しません server-id = 100 log_bin = mysql-bin # binlog 記録を開始 binlog_format = MIXED #トランザクションがコミットされるたびに、MySQL は binlog をフラッシュします。これは最も安全な設定ですが、パフォーマンスの低下が最も大きくなります。 #この場合、データベースが配置されているホストオペレーティングシステムが破損したり、突然電源が失われたりした場合、システムは 1 つのトランザクションのデータのみを失う可能性があります。#ただし、binlog はシーケンシャル IO ですが、sync_binlog=1 が設定されている場合は、複数のトランザクションが同時に送信されます。 #MySQL と IO パフォーマンスにも大きく影響します。必要に応じて設定してください。 同期バイナリログ = 1 # バイナリ ログが自動的に削除/期限切れになるまでの日数。デフォルト値は 0 で、自動削除は行われません。 有効期限切れログ日数 = 7 #binlog_cache_size = 128m #最大binlogキャッシュサイズ = 512m #最大バイナリログサイズ = 256M # データベースを同期する必要があります binlog-do-db = dev # 同期ライブラリは必要ありません binlog-ignore-db = mysql binlog_ignore_db = 情報スキーマ binlog_ignore_db = パフォーマンススキーマ binlog_ignore_db = システム データディレクトリ=/var/lib/mysql スレーブユーザーを設定する #mysql -uroot -p # パスワード: xxxxxx # mysql> 'root1234' によって識別される 'slave'@'%' に *.* のレプリケーション スレーブを許可します。 # mysql> 権限をフラッシュします。 # やめる; # systemctl で mysqld を再起動します。 # マスターステータスを表示 \G #************************** 1. 行 **************************** ファイル:mysql-bin.000001 位置: 886 Binlog_Do_DB: 開発 Binlog_Ignore_DB: mysql、information_schema、performance_schema、sys 実行されたGtidセット: セット内の 1 行 (0.00 秒) 2: メインライブラリ 200 my.cnf を設定します。 [mysqld] lower_case_table_names = 1 # テーブル名は大文字と小文字を区別しません server-id = 200 log_bin = mysql-bin # binlog 記録を開始 binlog_format = MIXED #トランザクションがコミットされるたびに、MySQL は binlog をフラッシュします。これは最も安全な設定ですが、パフォーマンスの低下が最も大きくなります。 #この場合、データベースが配置されているホストオペレーティングシステムが破損したり、突然電源が失われたりした場合、システムは 1 つのトランザクションのデータのみを失う可能性があります。#ただし、binlog はシーケンシャル IO ですが、sync_binlog=1 が設定されている場合は、複数のトランザクションが同時に送信されます。 #MySQL と IO パフォーマンスにも大きく影響します。必要に応じて設定してください。 同期バイナリログ = 1 # バイナリ ログが自動的に削除/期限切れになるまでの日数。デフォルト値は 0 で、自動削除は行われません。 有効期限切れログ日数 = 7 #binlog_cache_size = 128m #最大binlogキャッシュサイズ = 512m #最大バイナリログサイズ = 256M # データベースを同期する必要があります binlog-do-db = dev # 同期ライブラリは必要ありません binlog-ignore-db = mysql binlog_ignore_db = 情報スキーマ binlog_ignore_db = パフォーマンススキーマ binlog_ignore_db = システム データディレクトリ=/var/lib/mysql スレーブユーザーを設定する #mysql -uroot -p # パスワード: xxxxxx # mysql> 'root1234' によって識別される 'slave'@'%' に *.* のレプリケーション スレーブを許可します。 # mysql> 権限をフラッシュします。 # やめる; # systemctl で mysqld を再起動します。 # マスターステータスを表示 \G #************************** 1. 行 **************************** ファイル:mysql-bin.000001 ポジション: 154 Binlog_Do_DB: 開発 Binlog_Ignore_DB: mysql、information_schema、performance_schema、sys 実行されたGtidセット: セット内の 1 行 (0.00 秒) 3: 図書館300より my.cnf を設定します。 [mysqld] lower_case_table_names = 1 # テーブル名は大文字と小文字を区別しません server-id = 300 master_info_repository = テーブル リレーログ情報リポジトリ = テーブル データディレクトリ=/var/lib/mysql ソケット=/var/lib/mysql/mysql.sock シンボリックリンク=0 ログエラー=/var/log/mysqld.log pidファイル=/var/run/mysqld/mysqld.pid マスターデータベース情報を設定する #mysql -uroot -p # パスワード: xxxxxx # マスターデータベース情報を設定する# mysql> CHANGE MASTER TO # ->MASTER_HOST='192.168.194.3', # ->MASTER_PORT=3306、MASTER_USER='スレーブ'、 # ->MASTER_PASSWORD='root1234', # ->MASTER_LOG_FILE='mysql-bin.000001'、チャネル '100' の MASTER_LOG_POS=886; # mysql> マスターを変更する # ->MASTER_HOST='192.168.194.4', # ->MASTER_PORT=3306、MASTER_USER='スレーブ'、 # ->MASTER_PASSWORD='root1234', # ->MASTER_LOG_FILE='mysql-bin.000001'、チャネル '200' の MASTER_LOG_POS=154; # マスターデータベース情報を設定します# mysql> flush privileges; # スレーブを起動します。 # mysql>スレーブステータスを表示 \G 識別同期成功
テスト。 ランダム メイン データベース: テーブルを作成し、データを挿入します。 テーブル `t_user` を作成します ( `id` varchar(32) NOT NULL COMMENT '主キーID', `name` varchar(32) 文字セット utf8mb4 NULL コメント 'ユーザー名', `code` varchar(32) 文字セット utf8mb4 NULL コメント 'ユーザーコード', `phone_number` varchar(300) 文字セット utf8mb4 NULL コメント '電話番号', `create_date` datetime NULL COMMENT '作成時刻', `update_date` datetime NULL COMMENT '変更時刻', 主キー (`id`) ) COMMENT = 'ユーザー情報テーブル'; t_user に INSERT INTO (`id`, `name`, `code`, `phone_number`, `create_date`, `update_date`) VALUES ('userId_4', '张三', '123456789', '123456789632', '2020-04-27 22:05:00', '2020-04-27 22:05:00'); ライブラリからのクエリ t_user から * を選択します。 ------+--------+----------+--------------+----------------------+-------------+ | ID | 名前 | コード | 電話番号 | 作成日 | 更新日 | +-------+--------+----------+--------------+----------------------+----------+ | userId_4 | 張三|123456789|123456789632|2020-04-27 22:05:00|2020-04-27 22:05:00 要約する以上で、MySQL マスタースレーブ構築 (複数マスター、1 スレーブ) の実装アイデアと手順についての説明は終了です。MySQL マスタースレーブ構築に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
序文一般的なビジネス シナリオでは、検索ボックスへの入力が完了した後、検索データを取得するために関連...
最近、HTML を再度学習しており、これは HTML に対する新たな理解と言えます。これを過小評価し...
目次複数テーブル結合の基本構文クロス結合と直積現象クロスコネクトデカルト積現象内部結合外部結合左外部...
<テンプレート> <div id="ルート"> <...
序文:デジタル加算ボタンと減算ボタンの実装には、次のような多くのソリューションがこれまでに使用されて...
目次Prometheusはエクスポーターを介してMySQLを監視し、Grafanaチャートで表示しま...
<br />一般的なゲストブック、フォーラムなどでは、テキスト入力ボックスが使われていま...
目次1.setInterval() 2.タイムアウトを設定する() 1.setInterval()指...
今日、イメージを起動した後、HTTP リクエスト経由でアクセスできないという小さな問題が発生しました...
効果(ソースコードは最後にあります): 成し遂げる: 1. タグを定義します。 <h1>...
前回の記事「Docker コンテナの UID と GID を理解する」では、Docker コンテナ内...
ページ分割されたクエリを実行するには: 1. MySQL の場合、サブクエリと結合の使用は推奨されま...
質問:よく使用されるコマンド「ll」が無効であるか、コマンドが見つかりません理由: 「ll」コマンド...
1. Dockerネットワークモードdocker run が Docker コンテナを作成するときに...
序文この記事では主にMySQLのメモリ使用量に関する関連コンテンツを紹介し、皆さんの参考と学習のため...