MySQLの――主従レプリケーション時に主たるライブラリと予備ライブラリのデータベース名が一致しない場合はどうしますか?


質問:
通常のMySQLマスターレプリケーションアーキテクチャでは、マスターとスタンバイのデータベースはまったく同じですが、マスターとスタンバイのデータベース名が異なる場合はどうすればいいですか?たとえば、プライマリ・ライブラリのデータベース名はbinghe_です.マスター、ライブラリからのデータベース名binghe_slaveでは、従来の方法でプライマリ・セカンダリ・レプリケーションを構成した後、どのように処理しますか?
ソリューション:
MySQLマスターコピーを通常の方法で構成した後、CHANGE REPLICATION FILTER文を使用して、マスターライブラリとスレーブライブラリのデータベースを異なるデータベースにマッピングできます.まず、MySQLコマンドラインで、CHANGE REPLICATION FILTER文のヘルプ情報を表示するコマンドを入力します.
mysql> \h CHANGE REPLICATION FILTER
Name: 'CHANGE REPLICATION FILTER'
Description:
Syntax:
CHANGE REPLICATION FILTER filter[, filter]
        [, ...] [FOR CHANNEL channel]

filter:
    REPLICATE_DO_DB = (db_list)
  | REPLICATE_IGNORE_DB = (db_list)
  | REPLICATE_DO_TABLE = (tbl_list)
  | REPLICATE_IGNORE_TABLE = (tbl_list)
  | REPLICATE_WILD_DO_TABLE = (wild_tbl_list)
  | REPLICATE_WILD_IGNORE_TABLE = (wild_tbl_list)
  | REPLICATE_REWRITE_DB = (db_pair_list)
#################          ########################

ここで、filterオプションのREPLICATE_REWRITE_DB=(db_pair_list)は、プライマリ・スレーブ・レプリケーション中に、プライマリ・ライブラリとスレーブ・ライブラリのデータベースを異なるデータベースにマッピングできることを示します.ヘルプ情報にも使用例が示されており、出力されたヘルプ情報には次のコードが表示されます.
CHANGE REPLICATION FILTER
  REPLICATE_REWRITE_DB = ((dbA, dbB), (dbC, dbD));

これがCHANGE REPLICATION FILTER REPLICATE_REWRITE_DB文の使用例では、等号の後のパラメータはすべてデータベースの名前であり、データベースの名前はすべてペアで表示され、各ペアのデータベースは括弧で囲まれ、前のデータベースはメインライブラリのデータベース名であり、後ろのデータベースはスレーブライブラリのデータベース名であり、複数のデータベースペアを構成することができる.
たとえば、ヘルプ情報の使用例では、dbaはプライマリ・ライブラリのデータベース名であり、dbBはセカンダリ・ライブラリのデータベース名であり、プライマリ・ライブラリのdbaデータベースに対応しています.プライマリ・ライブラリとスレーブ・ライブラリのデータベースを簡単に対応させることもできます.
          
dbA ----> dbB
dbC ----> dbD

以上、プライマリ・ライブラリのデータベース名がbinghe_の場合マスター、ライブラリからのデータベース名binghe_slaveは、通常の方法でマスターコピーを構成した後、MySQLコマンドラインで次のコマンドを実行するだけです.
mysql> CHANGE REPLICATION FILTER  REPLICATE_REWRITE_DB = ((binghe_master, binghe_slave));

構成が完了したら、次のようにプライマリ・スレーブ・レプリケーションを開始します.
mysql> START SLAVE;