Mysqlオンラインで新規作成または再作成


1.はじめに
以前はMysqlデータベースをマスターしていましたが、プライマリサーバが停止した場合に行いました.しかし、最近、いくつかのプロジェクトがオンラインになって、データベースも単一のサーバーで何日も走って、やっとMysqlサーバーに主従アーキテクチャを作ることを確定して、簡単な主従アーキテクチャです.
プロジェクトは、Mysqlの主従構築を継続的に完了することが望ましい.その後、いくつかの資料をめくって、本当にオンラインで新築したり、主従したりする方法を見つけました.
実は私たちが以前服を止めて主従した主な目的は時計をロックしたいので、masterを見つけたいです.log_fileとmaster_log_posの2つのパラメータ.この2つのパラメータを決定する方法があれば、オンラインでプライマリ・スレーブ・アーキテクチャの機能を確立することで実現できます.
2.サーバ環境およびバージョン
  : CentOS7.5
Mysql: 5.6.x
  : 172.188.26.221
  : 172.188.26.229

3.構成準備
注意:メインエンドが止まらない前提は、bin-logログを開いていることです!!
以前にプライマリ・ライブラリでbin-logログが開いていなかった場合は、bin-logログを構成した後、プライマリ・ライブラリが有効になるには再起動しなければならないため、新しい作成はできません.ただし、現在の状況がREDOプライマリ・ライブラリであれば、以前はプライマリ・スレーブをしたことが証明されますが、プライマリ・スレーブが失効した場合はREDOが必要になる可能性があります.この場合、プライマリ・ライブラリも再起動する必要はありません.データベースを再バックアップすれば、セカンダリ・ライブラリを再構築できます.
次に、具体的な主従の新規作成プロセスについて説明します.
マスターライブラリでプロファイルmyを変更します.cnf、bin-logログを開くことを追加して、フォーマットはrowで、server-idに注意して、それは主端と備端の数値が異なって、一般的にipの最後のセグメントを使います.
server-id=221
log-bin=/data/mysqldata/mysql-bin
binlog-format=ROW

前にbin-log機能がオンになっていれば、変更する必要はありません.
次に、プライマリ・ライブラリでバックアップ・ユーザーの承認操作を行います.
mysql>grant replication slave on *.* to 'repel'@'172.188.26.229' identified by 'password';

ライブラリからのipアドレスに許可され、バックアップのユーザー名はrepelであり、'repel'@'%'という方法で許可操作を行わないことをお勧めします.主にセキュリティの問題のため、許可されたipホワイトリストを制限します.
次に、プライマリ・ライブラリでバックアップが必要なデータベースをエクスポートします.
  • mysqldumpでは、データベース全体をエクスポートします.
  • mysqldump -uroot -p  --single-transaction --no-autocommit --master-data=2 -A >test2.sql
  • mysqldump方式で、メインエンドMysqlに1つ以上のプロジェクトのトラフィックライブラリがある場合、feitianデータベース:
    mysqldump -uroot -p  --single-transaction --no-autocommit --master-data=2  feitian > feitian_dump.sql
  • と仮定して、トラフィックライブラリの1つだけをエクスポートします.
    ここには、オンラインでプライマリ・スレーブ・データベースを再構築するのに役立つ重要なパラメータ「--master-data=2」があります.
    データベースをエクスポートした後、ライブラリのサーバに転送し、どのように転送するか、各人は勝手にしました.scpを使用します.
    scp  feitian_dump.sql  [email protected]:/usr/local/src/

    次はライブラリから構成します.
    ライブラリから完全に「クリア」された状態にするか、再インストールすることが望ましい.Mysql、Nginx、phpなどの一般的な操作は、普段からスクリプトを書いて、インストールパッケージ、自分でよく使うプロファイルを用意したほうがいいです.使うときは、そのままスクリプトを走ってインストールします.
    私はansible playbookを使ってこのようなスクリプト化された操作をするのに慣れています.
    Mysqlを再インストールする操作は書かないか、別の文章を書いて、自分のスクリプトを共有します.
    Mysqlの再インストールが完了したら、データベースを初期化し、rootパスワードを変更するのが一般的です.
    新しいMysqlがインストールされ、正常に起動すると、ライブラリ機能を構成できます.
    ライブラリから変更my.cnfは、feitianビジネスライブラリをバックアップしたいだけなので、追加しただけです.
    server-id=229
    replicate_wild_do_table=feitian.%
    
  • 実際にフルライブラリバックアップが行われている場合は、server-idがプライマリライブラリと異なる構成であればよく、その他は追加する必要はありません.
  • ただし、特定のビジネス・ライブラリのみをバックアップするにはreplicate_を使用する必要があります.wild_do_tableというパラメータです.ライブラリから特定のライブラリをバックアップするだけで、複数のライブラリがある場合はカンマで区切って追加し続けるという役割を果たします.
  • には、逆のパラメータreplicate_があります.wild_ignore_tableは、無視されたデータベースを構成する、すなわちバックアップしないデータベースであり、このパラメータは使用が制限されており、熟知していない場合は使用しないほうがよい.

  • 次に、データベースをインポートします.データベースをインポートする前に、ライブラリbinlogからリセットする必要があります.
    
    mysql -uroot -p   -e 'reset master'
    mysql -uroot -p   feitian < feitian_dump.sql

    メインイベントでは、次はプライマリ・スレーブの同期を構成します.
    前述のように、データベースのバックアップには、master-data=2という重要なパラメータが使用されている.このパラメータはなぜ重要ですか?バックアップファイルに必要なmasterが表示されるのでlog_fileとmaster_log_posの2つのパラメータ.この2つのパラメータがあれば、従来のようにロックテーブルを止める必要はありません.
    具体的には、この2つのパラメータをどのように検索しますか?ファイルの最初の30行以内にあるので、headコマンドで見つけることができます.
    
    [root@ND-BACKUP mysql]# head -n 30 feitian_dump.sql 
    -- MySQL dump 10.13  Distrib 5.6.39, for linux-glibc2.12 (x86_64)
    --
    -- Host: localhost    Database: feitian
    -- ------------------------------------------------------
    -- Server version   5.6.39-log
    
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;
    /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
    /*!40103 SET TIME_ZONE='+00:00' */;
    /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
    /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
    
    --
    -- Position to start replication or point-in-time recovery from
    --
    
    -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000063', MASTER_LOG_POS=144333309;
    
    --
    -- Table structure for table `ft_access`
    --
    

    上の出力ではbinlogがmysql-binであることがわかります.000063,positionは144333309.この2つのパラメータがあれば、ライブラリから同期を構成できます.
    普通はライブラリからマスターtoを変更すればいいです.
    したがって、ライブラリから以下の構成を行います.
    #       slave 
    mysql>reset slave all;
    
    #       
    mysql>change master to  master_host='172.188.26.221', master_user='repel', master_password='*****', master_port=3306,master_log_file='mysql-bin.000063',
    master_log_pos=144333309;
    

    その後、ライブラリからのコピーを開始できます.
    mysql>start slave;

    スレーブ・ライブラリのステータスを確認します.
    mysql> show slave status\G
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 172.188.26.221
                      Master_User: repel
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000063
              Read_Master_Log_Pos: 146576160
                   Relay_Log_File: nd-feitian-relay-bin.000002
                    Relay_Log_Pos: 2243134
            Relay_Master_Log_File: mysql-bin.000063
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    
          Replicate_Wild_Do_Table: feitian.%
      Replicate_Wild_Ignore_Table: 
                       Last_Errno: 0
                       Last_Error: 
                     Skip_Counter: 0
              Exec_Master_Log_Pos: 146576160
                  Relay_Log_Space: 2243311
                  Until_Condition: None
                   Until_Log_File: 
                    Until_Log_Pos: 0
               Master_SSL_Allowed: No
    
            Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 0
                    Last_IO_Error: 
                   Last_SQL_Errno: 0
                   Last_SQL_Error: 
      Replicate_Ignore_Server_Ids: 
                 Master_Server_Id: 221
                      Master_UUID: a986c930-214a-11e8-b69c-00163e0cee42
                 Master_Info_File: /usr/local/mysql/mysqldata/master.info
                        SQL_Delay: 0
              SQL_Remaining_Delay: NULL
          Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
               Master_Retry_Count: 86400
    
                    Auto_Position: 0
    
  • 見たSlave_IO_Running:YesとSlave_SQL_Running:Yes,2つのyesは主従同期にほとんど問題がないことを示している.
  • プライマリ・スレーブが同じコンテンツに同期しているかどうかを確認します.
  • Master_Log_File: mysql-bin.000063とRelay_Master_Log_File: mysql-bin.000063は、プライマリ・スレーブが同じbinlogログに同期されていることを示します.

  • 上記の2つのパラメータが同じであれば、Read_を比較する必要があります.Master_Log_PosとExec_Master_Log_Posの2つのパラメータ.差異の有無を見て、差異がなければ主従同期の状況を説明したほうがいいです.

  • マスター・スレーブの同期のステータスも、マスター・ライブラリで確認できます.
    msyql> show processlist;