Linux運用次元のmysqlデータベース(プライマリ・スレーブ・レプリケーション)

4182 ワード

Linux運用次元のmysqlデータベース(プライマリ・スレーブ・レプリケーション)
  • データベースの導入インストール
  • 実験環境準備:rhel 7 2台.3バージョンの仮想マシンserver 1:ipは172.25.1.1 master server 2:ipは172.25.1.2 slaveとして
    mysql圧縮パッケージmysql-5.7.24-1を自分で用意します.el7.x86_64.rpm-bundle.tar
    解凍してインストールする
    tar xf mysql-5.7.24-1.el7.x86_64.rpm-bundle.tar
    yum install -y mysql-community-client-5.7.24-1.el7.x86_64.rpm mysql-community-common-5.7.24-1.el7.x86_64.rpm mysql-community-libs-5.7.24-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.24-1.el7.x86_64.rpm mysql-community-server-5.7.24-1.el7.x86_64.rpm
    

    データベースのプライマリ・スレーブ・レプリケーション(ipベース)
    サーバ1:マスターとしてプロファイルを作成する
    vim /etc/my.cnf
         :
    server-id=1
    log-bin=mysql-bin
    

    サーバ2:slaveとしてプロファイルを作成する
    vim /etc/my.cnf
         :
    server-id=2
    

    server 1とserver 2はmysqlを同時にオンにし、安全に初期化します.
    systemctl start mysqld
    cat /car/log/mysqld.log | grep password  ##  mysql  
    
    mysql_secure_installation 
    

    サーバ1で:
    mysql -uroot
    show databases;
    grant replication slave on *.* to repl@'172.25.11.%' identified by 'Westos+001';
    show master status;  ##        
    

    サーバ2で:
    mysql -uroot
    show databases;
    change master to master_host='172.25.11.1',master_user='repl',master_password='Westos+001',master_log_file='mysql-bin.000002',master_log_pos=690;
    start slave;
    show slave status\G  ##        
    
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes		##      Yes,    
    

    テスト:server 1にライブラリを作成してデータを書き込む
    mysql> create database westos;	## server2       westos 
    mysql> use westos
    mysql> create table usertb (
        -> username varchar(10) not null,
        -> password varchar(15) not null);	##  
    
    mysql> desc usertb;	##     
    
    mysql> insert into usertb values ('user1','123');	##    
    
    mysql> select * from usertb;	##  
    

    サーバ2側:
    show databases: ##   master     
    select * from usertb;
    

    データベースのプライマリ・スレーブ・レプリケーション(gtidベース)
    同じトランザクションのGTIDはすべてのノードで値が一致しているため、GTIDの具体的な値を知る必要はありません.
    従来のレプリケーションでは、障害が発生した場合、プライマリ・セカンダリ・スイッチングが必要になり、binlogとposポイントを見つけ、プライマリ・ノードを新しいプライマリ・ノードに指向する必要があります.相対的に面倒で、エラーも発生しやすいです.MySQL 5.6では、binlogとposポイントを探す必要はありません.メインノードのip、ポート、アカウントのパスワードを知るだけでいいです.コピーは自動的なので、MySQLは内部メカニズムGTIDを通じて自動的に同期を探します.
    サーバからプライマリサーバに接続した後、自分が実行したGTID(Executed_Gtid_Set)、取得したGTID(Retrieved_Gtid_Set)をプライマリサーバに送り、プライマリサーバから欠落したGTIDおよび対応するtransactionsを過去に補完すればよい.プライマリ・サーバが停止した場合、同期に最も成功したセカンダリ・サーバを見つけて、直接プライマリ・サーバに昇格すればいいです.もしある1台が最新のサーバーから主に昇格しないことを指定するならば、先にchangeから同期の最も成功したあのサーバーまで、GTIDをすべて補充して、それを主に昇格することができます
    設定手順:server 1:プロファイルを作成しmysqldを再起動する
    vim /etc/my.cnf		
    
    server-id=1
    log-bin=mysql-b
    gtid_mode=ON
    enforce-gtid-consistency=true
    
    systemctl restart mysqld
    

    Server 2で:プロファイルを作成しmysqldを再起動する
    cat /var/lib/mysql/relay-log.info
    cat auto.cnf 	##  server1 uuid
    vim /etc/my.cnf		
    
    server-id=2
    gtid_mode=ON
    enforce-gtid-consistency=true
    
    systemctl restart mysqld
    

    サーバ2でデータベースにログインする
    cat relay-log.info	#  relay-log
    mysql -uroot -pWestos+001
    mysql> stop slave;  ##         ip     
    mysql> CHANGE MASTER TO		##  master  
        -> MASTER_HOST = '172.25.11.1',
        -> MASTER_USER = 'repl',
        -> MASTER_PASSWORD = 'Westos+001',
        -> MASTER_AUTO_POSITION = 1;	##  gtid,     
    
    mysql> start slave;
    
    mysql> show slave status\G	##    ,             
               Retrieved_Gtid_Set: 
                Executed_Gtid_Set: 
    

    サーバ1側でデータベースにログインしてデータを書き込む
    mysql -uroot -pWestos+001
    mysql> use westos;
    mysql> insert into usertb values ('user2','123');
    mysql> insert into usertb values ('user2','123');
    

    サーバ2側で表示
    mysql> show slave status\G
    			Retrieved_Gtid_Set: f84e8de1-38a2-11e9-b78c-5254009afece:1-2
                Executed_Gtid_Set: f84e8de1-38a2-11e9
                b78c-5254009afece:1-2		##         , 1       
                
    mysql> use mysql  #  gtid            
    
    mysql> select * from gtid_executed;