Mysqlで詳細解析をコピーします。

6395 ワード

1.mysqlコピーコンセプト
  メインデータベースのDDLとDML操作をバイナリログでコピーサーバに転送し、コピーサーバでこれらのログファイルを再実行して、コピーサーバとホストサーバのデータを同期させること。コピー中のサーバーはメインサーバとして機能し、他のサーバーはスレーブサーバとして機能します。メインサーバは、バイナリログファイルを書き換え、ファイルの索引を維持してログサイクルを追跡します。これらのログはサーバから送信された更新を記録することができます。サーバーからメインサーバに接続すると、メインサーバ、サーバからログで読み取った最後の更新位置を通知します。サーバーからその時から発生した更新を受け付けて、メインサーバから新しい更新を通知するのを待っています。
2.コピーの用途
  主にコピーしたデータを同期させ、読み書き分離によってデータベースの同時負荷能力を向上させたり、主な準備機としての設計を行います。ホストが応答を停止してから、短い時間でアプリケーションを準備機に切り替えることができます。
利点:
(1)データベースクラスタシステムは、複数のデータベースノードを有し、単一のノードに障害がある場合、他の正常ノードはサービスを提供し続けることができる。
(2)メインサーバに問題が発生した場合、サーバーからの切り替えが可能です。
(3)コピーによりサーバからクエリー操作ができ、メインサーバへのアクセス圧力を低減し、データ分布と負荷バランスを実現する。
(4)バックアップ期間中にホストサーバのサービスに影響を与えないようにサーバーからバックアップを取ることができます。
3.コピーの実現(3つの方法)
(1)DRBDは、ソフトウェアで実現され、共有されていない、サーバ間のミラーブロックデバイスコンテンツの格納コピーソリューションである。
(2)Mysql cluster(mysqlクラスタともいう)Mysql replicain自体は比較的簡単な構造であり、サーバーからバイナリログを読み取り、それを解析して自身に適用する。
(3)簡単なコピー環境は2台のmysqlを実行するホストだけでいいです。物理サーバのホストコンピュータでも2つのmysqldのインスタンスを起動できます。もう一つはマスターとしてslaaveとしてコピー環境の取り組みを完成します。しかし、実際の応用環境においては、実際の業務ニーズに応じて、mysql複製の機能を利用して、自分で他の多くのより拡張的な複製アーキテクチャを構築することができます。
  メインアーキテクチャとは、mysqlサーバーをmasterとして、一台または複数のmysqlサーバーをslaaveとして、masterのデータをslavelにコピーすることです。実際の応用の場合、メイン・スレーブ・アーキテクチャはmysqlコピーで最もよく使われています。一般的にこのようなアーキテクチャでは、システムの書き込みはマスターによって行われますが、読み取り操作はそれぞれのslaaveに分散されて行われますので、このアーキテクチャは特に現在のインターネットの高読み書きの問題に適しています。
Mysqlデータベースのコピー操作は大体以下のステップに分けられます。
(1)マスターはバイナリログを有効にします。バイナリログの操作を有効にします。ログ管理に詳しい説明があります。
(2)slaave上のI/Oプロセスはマスターに接続され、ログファイルの指定された位置(または最初のログ)以降のログの内容を要求します。
(3)マスターは、slaaveからI/Oプロセスの要求を受けた後、コピーを担当するI/Oプロセスによって、要求情報に従って指定されたログの位置を指定した後のログ情報を読み出し、slaveeのI/Oに戻る。メッセージにはログに含まれている情報の他に、master端のbin-logファイルの名前とbin-logの位置が含まれています。
(4)SlaveのI/Oプロセスは情報を受信し、受信したログの内容を順次slay-logファイルの最後尾に追加し、読み取ったmaster端のbin-logのファイル名と位置をmaster-infoファイルに記録する。
(5)Slaveのsqlプロセスは、relay-logに追加されたコンテンツを検出した後、直ちにrelay-logの内容を解析し、自身で実行します。
4.mysqlコピーの集中モード
  mysql 5.1以降のバージョンでは、コピーに関しては新たなコピー技術を導入しています。この技術は表の中で変化が発生した記録に注目して、以前の写し取りbinlogsモードではないです。mysql 5.1.12から、以下の3つのモードで実現できます。
(1)sql文によるコピー(statement-base replication、s br)
(2)行ベースのコピー(r br)
(3)ミックスモードコピー(mbr)
対応して、binlogsのフォーマットも3種類あります。statement、row、mixed。Mrモードではs brモードがデフォルトです。実行時には、binlogのフォーマットを動的に変更することができます。メインコピーモードを設定する方法は非常に簡単です。以前にコピー配置を設定した上で、もう一つのパラメータを追加すると、以下のようになります。

binlog_format=”statement”
#binlog_format=”row”
#binlog_format=”mixed”
もちろん、実行時にbinlogのフォーマットを動的に変更することもできます。

Mysql> set session binlog_format=”statement”
5.マスターサーバの操作を制御する
マスター:192.168.11.139
Slave:192.168.11.130
(1)メインサーバ:

mysql> show variables like '%datadir%';
+---------------+--------------------------+
| Variable_name | Value          |
+---------------+--------------------------+
| datadir    | /application/mysql/data/ |
+---------------+--------------------------+
メインサーバでバイナリログを開く:

mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin    | OFF  |
+---------------+-------+
row in set (0.00 sec)
OFFはバイナリログがオフであることを示します。
オープンログ3ステップ:
①mysqlインストールディレクトリを開く/my.cnf
②「mysqld」というラベルを見つけました。このラベルの下の行に、次のような文を追加します。
ロゴbin[filename]
この文では、バイナリファイルを開くという意味です。filenameはバイナリログの名前です。指定がない場合は、デフォルトではホスト名の後と-binをファイル名として、デフォルトではdatadirディレクトリに格納します。ここでbinary_を指定します。ロゴが指定されたデータベースのみにバイナリファイルを生成する場合は、次のような文言を追加する必要があります。

Binlog-do-db=db_name(     )
指定されたデータベースにバイナリファイルログを生成しない場合は、次のステートメントを追加します。

Binlog-ignore-db-db_name(     )
③mysqlサービスを再開します。mysqlインストールカタログ/dataフォルダの下で「binary_」を見ることができます。log.数字番号”ファイルは、binary_のようです。log.0001.以後mysqlサービスを再起動するたびに、バイナリファイルを再生成します。ファイル名の数字番号は一回に増加します。
起動に成功したら、mysqlのプロファイルmy.cnfを修正し、server-indを設定します。コードは以下の通りです。

Server-id=1
Binlog-do-db=xscj
Binlog-ignore-db=mysql
Server-id=1:                  server-id,       1,master slave server-id    。
Binlog-do-db:          ,   xscj  
Binlog-ignore-db:           
マスターにコピーに必要なユーザを作成します。

mysql> grant replication slave on *.* to rep_user@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec

mysql> show master status\G
*************************** 1. row ***************************
      File: binary_log.000001
    Position: 303
  Binlog_Do_DB: 
Binlog_Ignore_DB: 
row in set (0.00 sec)
マスター本体のデータをバックアップして、/data/binaryに保存します。dump.txtファイルの中で、slaaveに導入してマシンから行きます。具体的な実行文は以下の通りです。

[root@localhost bin]# mysqldump -h localhost>/data/binary_dump.txt
(2)サーバからの操作を制御する
サーバからデータベースのプロファイルを変更します。構成は以下の通りです。

Server-id=2 ##      id
Master-host=192.168.11.129
Master-user=rep_user
Master-password=  ##           
Replicate-do-db ##          ,      
Master-port=<port> ##     

  slave, slave   mysql        ,  slave  
Mysql>stop slave;
  slave         ,      
Mysql>change master to
>master_host='',
>master_user='',
>master_password='',
>master_log_file='binary_log.000007',
>master_log_pos=120;

  :show slave status\G                   。
常用命令は以下の通りです
オプション
機能
スラve start
コピースレッドを起動
Slave stop
スレッドのコピーを停止
Reset slaave
コピースレッドをリセット
Show slaave status
コピースレッド状態を表示
Show slaave status\g
コピースレッド状態(支店表示)を表示します。
Show master status\G
メインデータベースの状態(支店表示)を表示します。
ショーマスターのロゴ
メインデータベースログを表示
Change mater to
マスターデータベースの設定に動的に変更します。
Show processlistv
どのスレッドが実行されているかを表示します。
以上がMysqlの詳細な解析内容のコピーについてですが、皆様のご協力をお願いします。mysqlの中でinstrを使ってあいまいな検索方法を紹介します。mysqlクエリ文のユーザー変数の使用コード解析MySQL操作のJSONデータタイプ操作の詳細など、足りないところがあれば、コメントを歓迎します。問題があれば私が改めます。物事は一定不変ではありません。