2

MySQLサーバーAがあり、サーバーBにあるテーブルの「コピー」を作成する必要があるとします。

フェデレーションは有効になっていません。サーバーAをリセットすると多くの問題が発生するため、リセットせずにフェデレーションを有効にすることはできないと思います。また、Bサーバーで有効にするだけでは不十分だと思います(何か間違っている場合は訂正してください)

他にどのような解決策がありますか?mysqlサーバーでデフォルトで有効になっているものはありますか?何か案は?

4

3 に答える 3

2
  • サーバーBでのみフェデレーションを有効にする必要があります
  • Bでフェデレーションテーブルを作成すると、Aのビューにアクセスできます。
  • フェデレーション表でINSERTUPDATEDELETEを実行できます
  • 読み取り専用アクセスが必要な場合は、ユーザー権限を制限できます

しかし!集約関数を実行することはできません。フェデレーションされるビュー(例:COUNT()、MAX()、UNION ...)(できますが、遅れます)

  • 作成するフェデレーションテーブルにKEYを設定することを忘れないでください。(またはそれは恐怖に遅れるでしょう。)
  • ビューでALGORITHM=MERGEを使用することを忘れないでください
  • サーバーAのUSERNAME(接続文字列から)にアクセスを許可することを忘れないでください

サーバーBのフェデレーションテーブルの例:

delimiter $$
CREATE TABLE `schemaName`.`tableName`(
    `keyName` VARCHAR(10) NOT NULL,
    `key2Name` DATE DEFAULT '2012-01-01',
    KEY `keyName` (`keyName`) 
)
ENGINE=FEDERATED
DEFAULT CHARSET=utf8
CONNECTION='mysql://USERNAME:PASSWORD@IPADDRESS:PORTNUMBER/baseSchema/baseTable'
$$

そしてサーバーAの見方:

CREATE
    ALGORITHM = MERGE
    DEFINER = `ANOTHERUSERNAME`@`%`
    SQL SECURITY DEFINER
VIEW `baseSchema`.`baseTable` AS
    SELECT
        ... AS `keyName`,
        ... AS `key2Name`
    FROM
        ...
于 2012-09-11T11:34:38.747 に答える
2

いかなる状況でも、FEDERATEDテーブル期間に書き込むことはできません。FEDERATEDテーブル接続を作成したデータベースを実行しているサーバーに直接DB接続する必要があります。

今、FEDERATEDテーブルに書き込むことができれば、私はかなり腹を立てます。それは何年もの間それを決して許しませんでした。それが本当なら、それはまた、私が書いた10年分のコードを私の時間の完全な無駄にするでしょう。

100のWebサイトの集中ユーザーデータベースを作成する場合に使用すると非常に便利です。すなわち、私がそれを使用するものであるソーシャルネットワーク...

誰もがエンジンが存在することを知る前から、私はそれを使用しました。私がそれを使い始めたとき、それはドキュメントなしでそこにありました、そして私はそれが何のために使われることができるかを理解するためにさえ実験しなければなりませんでした。エンジンは常にそこにあり、何年もの間ほとんどまたはまったくドキュメントがありませんでした。

私が使用または所有している唯一の連合DBテーブルは、ネットワークユーザー情報を共有しています。私のすべての外部Webサイトは、誰かが新しいユーザーとしてサインアップしたときに、メインサーバーへのデータベース接続を確立する必要があります。

FEDERATEDを正しく使用するには、2つのデータベースコネクタが必要です。1つはUPDATEやINSERTなど用で、もう1つのDBはすべてのローカルクエリやJOINSなど用です。

私のネットワークは、Webサイトごとに2つの外部データベースと1つのローカルデータベースを使用しています。私は3つのデータベースコネクタを使用しています。

ローカルは、すべてのUPDATEとINSERTに個別のコネクタを使用してミュージックハブとネットワークハブに接続し、その他すべてのJOINなどはローカルDBコネクタを使用します。

これがあなたがそれをもう少しよく理解するのに役立つことを願っています:)

MySQL5.6とPHP5を使用しています。

あなたはほぼ5年間自分自身に問いかけなければなりません、なぜそれが何のために使われたかについての文書がほとんどまたはまったくなかったのですか?ほとんどの人はそれが存在することさえ知りませんでした...

これは主に、クエリ結果をローカルデータベースにインポートするために使用されます。完全な書き込みアクセス権があっても、FEDERATEDテーブルに書き込むことはできません。セキュリティ上の理由から許可されておらず、あなたが言ったように非常に遅くなります。

私が間違っていればあなたは私を訂正するかもしれませんが、彼らが誰かにそれが存在することを告げる前から私がFEDERATEDを使用していることを知ってください。

FEDERATEDを有効にするのに約30秒かかり、サーバーを再起動するのに約30秒かかります。VPSを使用している場合、FEDERATEDを有効にできない場合があります。

my.cnfファイルを編集して、サーバーを再起動します...

ちなみに、FEDERATEDはもう遅くはありません...今説明した方法で使用されたときは決してありませんでした...

FEDERATED Tableに書き込むことができたとしても、それは行いません。ローカルWebサイトにフェデレーションテーブルを追加して、2台のサーバーをフェデレーションしています。

これは、リモートMySQLサーバーからHOPSがいくつ離れているかに応じて遅くなります。また、必ずcPanelの下のリモートサーバーにIPを追加してください。

Webサイトがすべて同じサーバー上にあり、別々のユーザーアカウントであり、別々のIPを持つWebサイトである場合は、ゼロラグが必要です。

McLeodとHeimbignerは、1980年代半ばに連合データベースシステムを最初に定義した企業の1つです。

于 2017-09-03T10:18:01.210 に答える
0

更新:mariaDBにアップグレードする場合は、プラグインとしてfederatedXをロードする必要があります。古い連合プロジェクトは存続しますが、新しい目と新鮮な魂がそれに取り組んでいます。Oracleにはもう関与していません...現在はfederatedXと呼ばれています

于 2017-10-17T23:12:30.597 に答える