問題タブ [master-slave]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
mysql - マスターとスレーブのセットアップ用に PHP MySQL クラスをコーディングする方法は?
私は自分の mysql データベースにマスター/スレーブ設定を使用したことがないので、ここで意味をなさない場合はご容赦ください。
マスター DB と 3 つのスレーブ DB が必要だとしましょう。マスター DB に接続してエントリを追加/更新/削除するには、データベース クラスを作成する必要がありますか、それとも何らかの形で自動化されていますか?
また、SELECT クエリの場合、ランダムな DB サーバーをランダムに選択するようにコーディングする必要がありますか?
java - 高レプリケーション DB の「結果整合性」とは、デタッチされた JDO オブジェクトに常に更新されたオブジェクト グラフが含まれているとは限らないことを意味しますか?
以前の App Engine プロジェクトではマスター/スレーブ データベースを使用していましたが、新しいアプリは高レプリケーション データストアとして定義されています (定義後にこの設定を変更できるとは思えません)。
私がこれまで行ってきたことはdetachedCopy
、更新後にオブジェクトを呼び出して、その後の更新が新しく更新されたオブジェクト グラフで確実に機能するようにすることでした。
しかし、High Replication Datastore には、完全には理解できないが懸念される特性、つまり「結果整合性」があります。Google App Engine グループの一部の Python 関係者から聞いた話では、彼らは「モデル」オブジェクトの更新を実行しますが、High Replication Datastore は更新されたオブジェクト グラフをそのように感じるまで返さないため、その後の更新はすべてこのオブジェクトへの接続は、基礎となるデータストアと同期していない可能性があります。
これが正しければ、私がdetachedCopy
Datanucleus JDO で使用してきた方法を台無しにしてしまいます。Master/Slave データベースでは、デタッチされたオブジェクトがデータストアと一致しないという状況に遭遇したことはありません。これは私が今心配する必要があることですか?高レプリケーション データストアで大惨事を回避する方法はありますか? それとも、JDO の回避策がない場合、この問題を回避するために、マスター/スレーブ構成に対してすべてのアプリを実行する必要がありますか?
mysql - mysqlレプリケーション-マスターからスレーブ
マスターからスレーブへの環境を正常にセットアップしましたが、間違いなく正常に機能しています。
私が抱えている唯一の問題は、テーブルからカウントを選択することです。それらは同じではありませんが、マスターから5分後に選択すると、スレーブ上で50行が作成され、50行も作成されます(これが、私が確信している理由です)正常に動作しています)
マスター:
スレーブ:
なぜこれが起こったのか考えていますか?'CHANGE MASTER TO'コマンドを使用してスレーブをマスターを指すように変更したときに、マスターのバイナリログファイルの位置がすでに移動している可能性はありますか?
mysql - ORMとmysqlのレプリケーションの遅れ
マスター/マルチスレーブのMySQLセットアップに移行しており、アプリケーションコードをあまり変更せずにデータの整合性の問題に取り組む方法が心配です。
このアプリケーションはORM(Doctrine PHP)を使用しており、理論的には、SELECTステートメントをスレーブの1つまたはマスターに送信し、UPDATE/DELETEクエリをマスターに送信するように拡張できます。
ORMの性質によりこれが失敗する場所は次のとおりです。
- スレーブからの古いデータに基づいて書き込みを実行します。たとえば、最近マスターで列Yが変更されたが、まだスレーブでは変更されていないスレーブからレコードを読み取り、列Yの古いデータと一緒に列Xで変更を保存します。マスター上で、したがって、列Yへの以前の変更を上書きします。
- マスターへの最近の書き込みの直後にスレーブから読み取りを行う(ユーザーがフォームを投稿したばかりのシナリオ-フォーラムのコメントを言う-そしてページをリロードしてコメントが表示されないシナリオ)
アプリケーションコントローラー上にロジックを構築して、データレイヤーが古いデータを取得する許容範囲があるかどうかを通知し、そうでない場合(たとえば、書き込みの意図がある場合)とそうでない場合にデータレイヤーができるようにする必要があると考えています。ただし、それに応じてマスターまたはスレーブに接続します。それは良いソフトウェアエンジニアリングの慣行に反しているようです。たとえば、コントローラーは、データがスレーブからのものかマスターからのものかを処理する必要のないビジネスロジックを実装する必要があります。
これは過去に対処されたと確信しています。たぶんDoctrinePHPではなく、Hibernateまたは他のORMソリューションを使用しますか?
共有できる一般的なグッドプラクティスや推奨事項はありますか?
redis - スレーブからのマスター読み取りへのRedis書き込み
Redisを使用してデータをリモートサーバーに配布したいと考えています。
HQには1つのマスターインスタンスがあり、子会社にはマスターに接続されている多くのリモートスレーブがあります。
私たちのアプリケーションは私たちの子会社で実行されています。99%の時間で、スレーブインスタンスに対して読み取り専用の要求が行われます。
ただし、データを変更する場合もあります。そのような要求はマスターに対して発行されます。
マスターに加えられた変更が次の読み取り要求の前にスレーブに複製されることを保証する方法はありますか?
mysql - クエリで「不明なテーブル エンジン 'InnoDB''」というエラーが発生しました。mysqlを再起動した後
サーバー S1 (mysql バージョン 5.1.41-3ubuntu12.7-log) に mysql DB があり、サーバー S2 (mysql バージョン 5.1.54-1ubuntu4-log) にこの DB のマスタースレーブを作成しました。
S1 の DB は 1 つのデータ ファイル (ibdata) を使用していました。DBをS2にダンプした後、innodb_file_per_table = 1を設定しました。これにより、すべてのテーブルに独自の ibd ファイルが作成されました。今ではすべてがうまくスムーズに進みました。
しかし、S2 で mysql を再起動した後、このエラーが発生するという問題に直面しました:
Error 'Unknown table engine 'InnoDB'' on query. Default database: MyDB
エンジンを表示しようとすると
innodb はリストされていません。
エラーログで私はこれを見ることができます:
ib_logfiles を削除しようとしましたが、これもうまくいきませんでした。
誰も前にそのような問題に直面しました?? どんなアイデアでも大歓迎です
ありがとう
mysql - MySQLマスター-マスターレプリケーションと自動インクリメント列の問題
私はマスターマスターレプリケーションでいくつかのテストを行っていますが、奇妙な問題が発生しました。誰かが問題を再現できるように、実行した手順を説明します。
2つのVMとそれぞれの構成ファイルでレプリケーションを設定しました。
これらの設定により、自動インクリメント列の等差数列が生成されます。
Master1は奇数を取得し、Master2は偶数を取得します。次に、テストデータベースを作成し、次の定義を持つテーブルを追加します。
もちろん、データベースは両方のサーバーで作成されます。その後、実行します
レプリケーションが開始されるように両方のサーバーで。データを生成するために、私は次の手順を使用します。
プロセスを開始するには、単一のレコードを挿入する必要があります
INSERT INTO t1(c1、d1)SELECT LPAD(''、50、MD5(RAND()))、DATE_ADD(CURDATE()、INTERVAL FLOOR(RAND()* 365)DAY);
次に、同じテーブルからINSERT-SELECTを使用します。これにより、2 nの割合で挿入が開始されます。nは、クエリを実行する回数です。
INSERT INTO t1(c1、d1)SELECT LPAD(''、50、MD5(RAND()))、DATE_ADD(CURDATE()、INTERVAL FLOOR(RAND()* 365)DAY)FROM t1;
ヒント:ここで説明するこの方法は、テーブルのランダムデータを生成するのにも非常に便利です。
したがって、両方のサーバーでこれらのクエリを同時に実行し始めると、常に自動インクリメント列のレプリケーション重複キーエラーが発生します。誰かアイデアがあればありがたいです!
PS:もちろん、この種のクエリは本番アプリケーションではめったに発生しませんが、それでもポイントを証明していると思います。
mysql - レプリケーションに使用される EBS ボリュームのスナップショット
EBS ボリュームに MySQL を使用して EC2 インスタンスをセットアップし、レプリケーション用のスレーブとして機能する別のインスタンスをセットアップしました。レプリケーションのセットアップは問題ありませんでした。私の質問は、これらのボリュームのスナップショットの作成についてです。スナップショット プロセスのためにテーブルをロックする必要があることに気付きました。これにより、ユーザーに不便が生じる可能性があります。したがって、私の考えは、マスター インスタンスをそのままにして、スレーブとして機能するインスタンスのスナップショットを作成することです。これは良い考えですか?同様の設定をしていて、正しい方法で私を導くことができる人はいますか?
また、スレーブ インスタンスのスナップショットを作成するには、テーブルをロックする必要があります。それは、レプリケーションが壊れることを意味しますか?
前もって感謝します。
mysql - MySQLスレーブが複製されない
私は以前に2台のサーバーにMySQLマスター/スレーブレプリケーションを問題なくセットアップしました。通常、MySQLWebサイトの優れたドキュメントに従います。ただし、今回は設定しましたが、すべてが機能しているように見えますが、スレーブはマスターからの新しいデータで更新されていません。マスターとサーバーの両方からの出力を表示します。
マスター(IP:10.1.1.21)
'107'、'repl'、 '10.1.1.22:60686'、NULL、'Binlog Dump'、 '523'、'すべてのbinlogをスレーブに送信しました。binlogが更新されるのを待っています'、NULL
'mysql-bin.000280'、 '10494'、'joomla'、'mysql'
スレーブ(IP:10.1.1.22)
'9'、'システムユーザー'、''、NULL、'接続'、 '625'、'マスターがイベントを送信するのを待っています'、NULL
'10'、'システムユーザー'、''、NULL、'接続'、 '10'、'すべてのリレーログを読み取りました。スレーブI/Oスレッドが更新するのを待っています'、NULL
「マスターがイベントを送信するのを待っています」、「10.1.1.21」、「repl」、「3306」、「60」、「mysql-bin.000280」、「14029」、「tim-Dell-DM061-relay-bin」。 000002'、' 14174'、' mysql-bin.000280'、' Yes'、' Yes'、''、''、''、''、''、''、' 0'、''、' 0 '、' 14029'、' 14338'、'なし'、''、' 0'、'いいえ'、''、''、''、''、''、' 0'、'いいえ'、' 0 '、''、' 0'、''
それが機能しているかどうかを確認するためにテストした方法は、マスター上にテーブルを作成することでした。私はこれを行いましたが、この新しいテーブルはスレーブに伝播しませんでした。リレーのバイナリログを確認しましたが、多くの更新が含まれていました。これはウェブサイトのデータベースですが、ヒット数がスレーブに伝播していることを確認したところ、少し動作しているようです。
テーブルの作成は伝播しません。また、スレーブへの初期データ同期を行ったときに存在していたデータをテストテーブルに挿入しようとしましたが、これもスレーブに伝播しません。
これをさらにデバッグする方法についてのアイデアはありますか?
ありがとう!
編集:
はshow global variables like 'replicate%'
2つの列を返します: "Variable_name"、"Value"。データの行はありません。
c# - WPF のマスター詳細コンボ
私はWPFの初心者で、特にそのデータバインディングです。
再帰構造のテーブルがあります。テーブル構造は次のようになります。
フォームに 2 つのコンボがあります。最初のコンボには、次のクエリによって返されるアイテムが入力されます。
このコンボで項目を選択すると、選択した項目 ID と等しい ParentID を持つテーブル内のすべての行が読み込まれます。次のクエリは、2 番目のコンボを満たすアイテムを返します。
この問題に対する私の解決策(それが解決策になる場合):
次のクエリでデータをデータセットに読み込みますが、2 つの異なるデータ テーブルに読み込みます。
次に、子テーブルの TargetID をメイン テーブルの ID に関連付けるビューを作成します。
最後に、このインスタンスの DataContext をデータ ソースに設定します。
this.DataContext = ds;
XAML コードでは、2 つのコンボが次のように定義されています。
しかし、2 番目のコンボボックスにはデータが入力されていません。何か案は?