MySQLマスタースレーブ

5633 ワード

一、MySQLマスターライブラリMySQLのマスターコピースキームは、データの転送です.ただし、MySQLはサードパーティ製ツールを使用する必要はありません.また、MySQLのプライマリ・セカンダリ・レプリケーションは、ディスク上で直接同期するのではなく、論理binlogログをローカルに同期して再適用するプロセスです.二、マスタスレーブ原理1)ライブラリ上のIOプロセスからマスタライブラリに要求を絶えず送信し、要求情報にはユーザ名、パスワード、IPアドレス、ポート、および読み出すマスタライブラリのどの位置点のバイナリログファイル2を含む)マスタライブラリ上のIOプロセスはスレーブのIOプロセスからの要求を検査し、権限とその他の関連情報を照合し、そして、ライブラリからのIOプロセスに対して、ライブラリから指定するバイナリファイルと更新位置点3)が返信されると、ライブラリから受信したバイナリファイルが中継ログ(relay-log)に格納、次回更新するバイナリファイル名と位置点がマスターに格納される.infoファイルで、メインライブラリにIOリクエストを送信し続けます.4)ライブラリ上のSQLプロセスからローカルの中継ログ(relay-log)を常時傍受しているため、中継ログに変化がある限り、その変化した部分を読み出し、その変化した部分をライブラリのストレージエンジンに変換して書き込み、データ同期を完了する.三、主従ライブラリの構成1.行くぞcnfプロファイル
[root@master data]# cat /etc/my.cnf         
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.
[mysqld]
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
# These are commonly set, remove the # and set as required.
basedir = /application/mysql-5.6.20 
datadir = /application/mysql-5.6.20/data
port = 3306
server_id = 1
socket = /application/mysql/tmp/mysql.sock
log-bin = /application/mysql/data/mysql-bin
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M 
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
# #safe-updates
#
# [myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
#
# [mysqlhotcopy]
interactive-timeout
[root@master data]#

2.slave上my.cnfプロファイル
[root@slave etc]# cat my.cnf              
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.
[mysqld]
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
# These are commonly set, remove the # and set as required.
basedir = /application/mysql-5.6.20 
datadir = /application/mysql-5.6.20/data
port = 3306
server_id = 3
socket = /application/mysql/tmp/mysql.sock
log-bin = /application/mysql/data/mysql-bin
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M 
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
# #safe-updates
#
# [myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
#
# [mysqlhotcopy]
interactive-timeout
[root@slave etc]#

3.主従プロファイルの違いはserver_idの値が異なり、ここでは主従は2台の異なるサーバに配置されているのでserver-idが異なるだけでよいし、また主サーバ(master)上でバイナリログ記録機能をオンにし、サーバからオンにしてもオンにしなくてもよい
[root@master data]# egrep "log-bin|server_id" /etc/my.cnf
server_id = 1
log-bin = /application/mysql/data/mysql-bin
[root@master data]#

4.注意事項a.server_idとlog-binパラメータの位置は必ず【msyqld】モジュール内のb.server-idの値を置くサーバipアドレスの最後の8ビット、例えば19を使用し、異なる機器やインスタンスIDの重複(マルチインスタンスに適していない)c.を避けるためにmy.cnfプロファイルで関連パラメータを検索し、要求に従って修正し、存在しない場合はパラメータを追加し、パラメータを繰り返してはいけないことを覚えておいてください.cnf構成後、データベースを再起動する必要があります.コマンドは/etc/initです.d/mysqld restart、本当に再起動したことを確認することに注意してください.プライマリ・サーバの認証と同期アカウントの追加
grant replication slave on *.* to 'rep'@'10.0.0.%' identified by 'pwd123';

6.ライブラリスイッチが本当にオンであることを確認する:
show slave status\G;

Slave_IO_Running: Yes Slave_SQL_Running:Yesの2つのパラメータはYesと表示され、ライブラリから正常に動作していることを示します.プライマリ・ライブラリでのテーブルの作成、テーブル構造の変更、フィールド、データの同期を確認します.slaveで同期するかどうかを確認します.四、主従同期管理1.mysql同期の停止
STOP SLAVE IO_THREAD; #  IO  
STOP SLAVE SQL_THREAD; #  SQL  
STOP SLAVE; #  IO SQL  

2.mysql同期の開始
START SLAVE IO_THREAD; #  IO  
START SLAVE SQL_THREAD; #  SQL  
START SLAVE; #  IO SQL  

3.mysql同期のリセット
RESET SLAVE;

4.一時的にMYSQLをスキップ同期エラーmysqlマスターが同期からエラーが発生することがよくあります.例えば、プライマリ・キーの競合などです.その行のデータが一致していることを確認した上で、一時的にこのエラーをスキップし、コマンドを使用する必要があります.
SQL_SLAVE_SKIP_COUNTER = n

nは、後のn個のイベントをスキップすることを表し、例えば、私が1個のイベントをスキップする操作は以下の通りである.
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE;

5.指定された場所から再同期
CHANGE MASTER TO MASTER_HOST='192.168.106.1    ',
MASTER_USER='replication',
 
MASTER_PASSWORD='mysqlpassword',
MASTER_LOG_FILE='mysql-bin.000006',
 
MASTER_LOG_POS=106;
START SLAVE;