mysqlマルチプライマリマルチスレーブ構成、自己増加idソリューション

43995 ワード

MySQL 2マスター(マルチマスター)マルチスレーブアーキテクチャ構成
一、役割区分
1、MySQLデータベース計画
私の今の環境は:zhdy 04とzhdy 05はすでにマスターアーキテクチャの配置ができて、今必要なのは2台以上のサーバーをマスターと1つ1つ同期することです.
 
ホスト名
IPアドレス
ロール#ロール#
Mysql_server_id
zhdy04
192.168.230.145
masterA
145
zhdy05
192.168.230.146
masterB
146
zhdy06
192.168.230.147
slaveA
147
zhdy07
192.168.230.148
slaveB
148
二、MySQLデータ同期設定
1、私たちがテストしたマシンデータベースはすべて初期値なので、データベースをインポートする必要はありません.(書き込みの理由は、構成された環境が現在と一致していない場合です.データのバックアップとインポートが必要です)
2、データ同期アカウントの追加
本来ならば、以前はホスト、すなわちzhdy 04とzhdy 05が互いに授権されていた.次に設定する必要があるのは、
  • は、zhdy 04上でzhdy 06が同期できることを許可する.
  • は、zhdy 05上でzhdy 07が同期できることを許可する.

  • zhdy 04 masterAサーバ:
    mysql> grant replication slave on *.* to 'repl'@'192.168.230.147' identified by 'zhangduanya'; Query OK, 0 rows affected (0.03 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)

    zhdy 05 masterBサーバ:
    mysql> grant replication slave on *.* to 'repl'@'192.168.230.148' identified by 'zhangduanya'; Query OK, 0 rows affected (0.03 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)

    3、データベースプロファイルの変更
  • zhdy 04 masterAサーバ:
  • server-id=145
    log-bin=mysql-bin auto-increment-increment=2 auto-increment-offset=1 log-slave-updates
  • zhdy 05 masterBサーバ:
  • server-id=146
    log-bin=mysql-bin auto-increment-increment=2 auto-increment-offset=2 log-slave-updates
  • zhdy 06 slaveAサーバ:
  • server-id=147
  • zhdy 07 slaveBサーバ:
  • server-id=148

    ここでは、私が行った構成をより理解しやすくするために、次のような追加のサービスは追加されていません.
    log-bin = mysql-bin                                                     #       ,MASTER          
    binlog-format=ROW binlog-row-p_w_picpath=minimal log-slave-updates=true gtid-mode=on enforce-gtid-consistency=true master-info-repository=TABLE relay-log-info-repository=TABLE sync-master-info=1 slave-parallel-workers=0 sync_binlog=0 binlog-checksum=CRC32 master-verify-checksum=1 slave-sql-verify-checksum=1 binlog-rows-query-log_events=1 #expire_logs_days=5 max_binlog_size=1024M #binlog       replicate-ignore-db = mysql #            replicate-ignore-db = information_schema replicate-ignore-db = performance_schema replicate-ignore-db = test replicate-ignore-db = zabbix max_connections = 3000 max_connect_errors = 30 skip-character-set-client-handshake #                 init-connect='SET NAMES utf8' #      SQL character-set-server=utf8 #         wait_timeout=1800 #          interactive_timeout=1800 #              sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES #sql   skip-name-resolve slow_query_log=1 long_query_time = 6 slow_query_log_file=slow-query.log innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 16M binlog-do-db=openfire binlog-ignore-db=mysql,information_schema replicate-do-db=openfire replicate-ignore-db=mysql,information_schema read_only = 1 #       read_only=0; #    ,    

    4、4台のDBを再起動する:
    /etc/init.d/mysqld restart

    5、同期設定:
  • zhdy 04 masterAサーバ:
  • mysql> show master status;
           master_log_file、master_log_pos 
    
    +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000004 | 120 | | | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.01 sec)
  • zhdy 05 masterBサーバ:
  • mysql> show master status;
    +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000004 | 120 | | | | +------------------+----------+--------------+------------------+-------------------+ 1 row in set (0.00 sec)
  • zhdy 06 slaveAサーバ:
  • mysql> change master to master_host='192.168.230.145', master_user='repl', master_password='zhangduanya', master_log_file='mysql-bin.000004', master_log_pos=120; Query OK, 0 rows affected, 2 warnings (0.04 sec)
  • zhdy 07 slaveBサーバ:
  • mysql> change master to master_host='192.168.230.146', master_user='repl', master_password='zhangduanya', master_log_file='mysql-bin.000004', master_log_pos=120; Query OK, 0 rows affected, 2 warnings (0.08 sec)

    6、構成の確認
    まずは必ず4台のfirewalldを全てクローズ!
    # systemctl stop firewalld 
    # systemctl disable firewalld

    4台のサーバの
    Slave_IO_Running: Yes Slave_SQL_Running: Yes
    状況を開けろ!
  • zhdy 06 slaveAサーバ:
  • mysql> start slave;
    Query OK, 0 rows affected (0.02 sec) mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.230.145 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000004 Read_Master_Log_Pos: 120 Relay_Log_File: zhdy06-relay-bin.000002 Relay_Log_Pos: 283 Relay_Master_Log_File: mysql-bin.000004 Slave_IO_Running: Yes Slave_SQL_Running: Yes
  • zhdy 04 masterAサーバ:
  • mysql> start slave;
    Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.230.146 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000004 Read_Master_Log_Pos: 120 Relay_Log_File: zhdy04-relay-bin.000012 Relay_Log_Pos: 283 Relay_Master_Log_File: mysql-bin.000004 Slave_IO_Running: Yes Slave_SQL_Running: Yes
  • zhdy 07 slaveBサーバ:
  • mysql> start slave;
    Query OK, 0 rows affected (0.02 sec) mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.230.146 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000004 Read_Master_Log_Pos: 120 Relay_Log_File: zhdy07-relay-bin.000002 Relay_Log_Pos: 283 Relay_Master_Log_File: mysql-bin.000004 Slave_IO_Running: Yes Slave_SQL_Running: Yes
  • zhdy 05 masterBサーバ:
  • mysql> start slave;
    Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.230.145 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000004 Read_Master_Log_Pos: 120 Relay_Log_File: zhdy05-relay-bin.000011 Relay_Log_Pos: 283 Relay_Master_Log_File: mysql-bin.000004 Slave_IO_Running: Yes Slave_SQL_Running: Yes

    これですべて同期に成功しました!
    7、最後のステップは、プライマリサーバzhdy 04 masterAにデータベースを作成します.つまり、この4つのサーバにはこのデータベースがあります.
    mysql> show databases;
    +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | qqq | | test | +--------------------+ 5 rows in set (0.06 sec)

    私はいちいちスクリーンを切らないで、それからすべてのデータベースはqqqというデータベースがあります!
    8、まとめ
    つまり、将来、私たちはマルチマスターを構築して、この配置を見終わってから考えているのではないでしょうか.ルータを構成するように、互いに接続する相互許可でいいのではないでしょうか.
    次のように設定します.
    auto-increment-increment = 10
    auto-increment-offset = 1
    auto-increment-increment = 10
    auto-increment-offset = 2
    auto-increment-increment = 10
    auto-increment-offset = 3

    これでメインmysqlを10台設置できるのではないでしょうか.
    しかし、いったん20台を超えると?それとも100台ですか?
    20台
    auto-increment-increment = 20
    auto-increment-offset = 1
    auto-increment-increment = 20
    auto-increment-offset = 2

    …..
    auto-increment-increment = 20
    auto-increment-offset = 20

    100台
    auto-increment-increment = 100
    auto-increment-offset = 1
    auto-increment-increment = 100
    auto-increment-offset = 2

    …..
    auto-increment-increment = 100
    auto-increment-offset = 100

    繰り返さないの?自己成長値はホストの数値に設定すればよいが,拡張性,すなわちできるだけ大きく設定することを考慮しなければならない.
     
     
    転載先:https://www.cnblogs.com/cocoliu/p/9020845.html