ホームページ  >  記事  >  データベース  >  mysqlクラスターとは何ですか? mysqlクラスターの紹介

mysqlクラスターとは何ですか? mysqlクラスターの紹介

零下一度
零下一度オリジナル
2017-04-27 09:29:473393ブラウズ

以前は、クラスタリング、読み書き分離、xxxx はすべて素晴らしいものだと感じていました。終わってみると、興味さえあれば、実際は非常にシンプルであることがわかりました。

2 つのマシン:

mysql01: 192.168.1.222

mysql02: 192.168.1.223

仮想マシンをコピーしてシミュレートする場合は、mysql/data の auto.cnf と 2 つのマシンの uuid を変更する必要があることに注意してください。マシンが同じであるはずがありません。サーバーの selinux を無効にする必要があります (/etc/selinux/config を変更し、SELINUX を無効に変更します)。

MySQL5.6 には、マスター/スレーブ レプリケーションを開始する 2 つの方法があります。ログ (binlog) に基づく方法と GTID (グローバル トランザクション識別子) に基づく方法です。
マスタースレーブレプリケーション(A/Bレプリケーションとも呼ばれます)の原理
(1) マスターは、設定ファイルlog-binで指定されたファイルであるバイナリログ(バイナリログ)にデータの変更を記録します。バイナリ ログ イベント (バイナリ ログ イベント);
(2) スレーブは I/O スレッドを通じてマスターのバイナリ ログ イベントを読み取り、リレー ログに書き込みます (リレー ログ)。では、中継ログ内のイベント情報をローカルで一つずつ実行し、データのローカル保存を完了させ、自身のデータに変更を反映させます(データ再生)。

mysql01:

vi /etc/my.cnf

## [mysqld] に次の設定項目を追加します

## server_id を設定します (通常は IP に設定されます)
server_id=222
## コピー フィルタリング: 必要なデータベースバックアップされ、binlog が出力されます
#binlog-do-db=roncoo
## コピーフィルタリング: バックアップする必要のないデータベースは出力されません (通常、mysql ライブラリは同期されません)
binlog-ignore-db=mysql
## バイナリ ログ機能を有効にします。やりたいことは何でもできます。できれば意味のあるものを取得してください
log-bin=master-mysql
## 各セッションに割り当てられたメモリ。トランザクション プロセス中にバイナリ ログのキャッシュを保存するために使用されます
binlog_cache_size =1M
## マスター/スレーブ レプリケーションの形式 (混合、ステートメント、行、デフォルトの形式はステートメント)


binlog_format=mixed

## バイナリ ログが自動的に削除/期限切れになる日数。デフォルト値は 0 で、自動削除しないことを意味します。

expire_logs_days=7
## スレーブ側でのレプリケーションの中断を避けるために、マスター/スレーブのレプリケーションで発生したすべてのエラーまたは指定されたタイプのエラーをスキップします。
## たとえば: 1062 エラーは主キーの重複を示し、1032 エラーはマスターとスレーブのデータベース データが矛盾しているためです
slave_skip_errors=1062


##リレーログはリレーログを設定します

relay_log=relay01

## log_slave_updates は次のことを示しますスレーブがレプリケーション イベントを書き込むことを確認します 独自のバイナリ ログを入力します
log_slave_updates=1

マスター データベース サービスを開始/再起動し、データベースにログインし、データ同期ユーザーを作成し、対応する権限を付与します

service mysql restart
mysql -uroot -p

##Createデータ同期ユーザーを指定し、対応する権限を付与します

mysql> grant replication slave, replication client on *.* to 'repl01'@'192.168.1.223' identified by
'123456';
Query OK, 0 rows affected (0.00 sec)

## 認可テーブル情報を更新します

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

## 位置番号を確認し、位置番号を書き留めます (この位置番号と現在のログ ファイルを使用する必要があります)スレーブマシン)

mysql> show master status;
mysql02:

vi /etc/my.cnf

## [mysqld] に次の設定項目を追加します

## server_id を設定します (通常は IP に設定します)
server_id=223
## コピーフィルタリング: 必要なデータベースバックアップする場合はbinlogを出力します
#binlog-do-db=roncoo
## コピーフィルタリング : バックアップする必要がなく出力しないデータベース (mysqlライブラリは通常同期されません)
binlog-ignore-db= mysql
## スレーブが他のスレーブのマスターとして機能するときに使用するバイナリ ログを有効にする
log-bin=slave-mysql
## 各セッションに割り当てられたメモリは、トランザクション プロセス中にバイナリ ログ キャッシュを保存するために使用されます
binlog_cache_size = 1M
## マスター/スレーブ レプリケーションの形式 (混合、ステートメント、行、デフォルトの形式はステートメント)
binlog_format=mixed
## バイナリ ログが自動的に削除/期限切れになるまでの日数。デフォルト値は 0 で、自動削除しないことを意味します。
expire_logs_days=7
## スレーブ側レプリケーションの中断を避けるために、マスター/スレーブ レプリケーションで発生したすべてのエラーまたは指定されたタイプのエラーをスキップします。
## 例: 1062 エラーは主キーの重複を示し、1032 エラーはマスターとスレーブのデータベース データが矛盾しているためです
slave_skip_errors=1062
##lay_log はリレー ログを設定します
relay_log=relay02
## log_slave_updates は、スレーブはレプリケーション イベントを自身に書き込みます バイナリ ログ
log_slave_updates=1

データベース サービスを再起動します mysql restart

関連するパラメータを追加します

mysql> 
change master to master_host='192.168.1.222', master_user='repl01',master_password='123456', master_port=3306, master_log_file='mysql01.000001',master_log_pos=429, master_connect_retry=30;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

上面执行的命令的解释:
master_host='192.168.1.222' ## Master 的 IP 地址
master_user='repl' ## 用于同步数据的用户(在 Master 中授权的用户)
master_password='123456' ## 同步数据用户的密码
master_port=3306 ## Master 数据库服务的端口
master_log_file='master-mysql.000001' ##指定 Slave 从哪个日志文件开始读复制数据(可
在 Master 上使用 show master status 查看到日志文件名)
master_log_pos=429 ## 从哪个 POSITION 号开始读
master_connect_retry=30 ##当重新建立主从连接时,如果连接建立失败,间隔多久后重试。
单位为秒,默认设置为 60 秒,同步延迟调优参数。
## 查看主从同步状态
mysql> show slave status\G;
可看到 Slave_IO_State 为空, Slave_IO_Running 和 Slave_SQL_Running 是 No,表明 Slave 还
没有开始复制过程。
## 开启主从同步
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
## 再查看主从同步状态
mysql> show slave status\G;

主要看以下两个参数,这两个参数如果是 Yes 就表示主从同步正常

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

可查看 master 和 slave 上线程的状态。在 master 上,可以看到 slave 的 I/O 线程创建的连接:

mysql01: mysql> show processlist\G;
mysql02: mysql> show processlist\G;

完成,测试在mysql01上新建数据库db1,查看mysql02。

从mysql02到mysql01是一样的步骤:

切换到mysql02上

##创建数据同步用户,并授予相应的权限

mysql> grant replication slave, replication client on *.* to 'repl02'@'192.168.1.222' identified by
'123456';
Query OK, 0 rows affected (0.00 sec)

## 刷新授权表信息

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

## 查看 position 号,记下 position 号(从机上需要用到这个 position 号和现在的日志文件)

mysql> show master status;
change master to master_host='192.168.1.223', master_user='repl02',master_password='123456', master_port=3306,master_log_file='mysql02.000002',master_log_pos=567,
master_connect_retry=30;
mysql> start slave;Query OK, 0 rows affected (0.00 sec)

## 再查看主从同步状态

mysql> show slave status\G;

在mysql02上创建数据库db2,查看mysql01即可

以上がmysqlクラスターとは何ですか? mysqlクラスターの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。