注:mysqlマスタースレーブレプリケーションは、アクセス後にのみコンテンツを実行します。つまり、メインデータベースとテーブルはアクセス後に作成する必要があります。
1.ホスト構成(master131)
配置文件:vim /etc/my.cnf
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
#设置不要复制的数据库(可设置多个,设置了需要复制的数据库就可以不设置此项)
binlog-ignore-db=mysql
#设置需要复制的数据库
binlog-do-db=需要复制的主数据库名字
#设置logbin格式
binlog_format=STATEMENT
拡張:
binlogログの3つの形式
1.ステートメント:データを変更するすべてのsqlはbinlogに記録されます
2.行:SQLステートメントのコンテキスト関連情報を記録せず、変更されたレコードのみを保存します
3.混合レベル:上記の2つの組み合わせ。一般的なステートメントの変更では、ステートメント形式を使用してbinlogを保存します(一部の関数など)。ステートメントはマスタースレーブレプリケーションの操作を完了できず、binlogを行形式で保存します。
2.スレーブ構成(master135)
配置文件: vim /etc/my.cnf
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay
3つ目は、ホストとスレーブがmysqlサービスを再起動することです。
systemctl restart mysqld
4つ目は、ホストとスレーブの両方がファイアウォールを閉じる
systemctl stopfirewalld
5、ホスト上にアカウントを作成し、スレーブを承認します
*。*のレプリケーションスレーブを「123456」で識別される「スレーブ」@「%」に付与します。
エラー:
エラー1819(HY000):パスワードが現在のポリシー要件を満たしていません
理由:パスワード設定が単純すぎて、mysqlパスワード設定仕様に準拠できません
解決:
1.mysqlの完全なパスワードルールを表示します
'validate_password%'のような変数を表示します。
2.パスワードの長さを変更します
グローバルvalidate_password_length = 4を設定します。
3.パスワード検証戦略を設定します(中[中]、低[低])
グローバルvalidate_password_policy = 0を設定します。
6、マスターステータスのクエリ
マスターステータスを表示します。
注:ファイルの値と位置を記録します。この手順を実行した後、ホストmysqlを操作して、ホスト状態値が変更されないようにします。
7、スレーブにコピーされるようにホストを構成します
#复制主机的命令
change master to master_host='主机ip',
master_user='slave',
master_password='123456',
master_log_file='mysql-bin.具体数字',master_log_pos=具体值;
#启动从机复制功能
start slave;
#查看从机状态
show slave status\G;
エラー:
エラー3021(HY000):この操作は実行中のスレーブIOスレッドでは実行できません。最初にSTOPSLAVE IO_THREAD FOR CHANNEL ''を実行します。
理由:スレーブがマスターに接続されている場合は、リセットする必要があります
解決:
stop slave;
reset master;
8.検証
この時点で、mysqlのマスタースレーブレプリケーションが完了しました。これを確認できます。
1.ホスト上にtestdbデータベースを作成し、データベースが正常に作成されているかどうかを確認します
create database testdb;
show databases;
2.ホスト上で作成が完了しました。コンピューターを見てみましょう。
拡張:
1.サービスからの関数のコピーを停止します
スレーブを停止します。
2.マスターとスレーブを再構成します
スレーブを停止します。
マスターをリセットします。
3.読み取りと書き込みの分離があるかどうかを確認します
#主机写入 @@环境变量
insert into user values (1,@@hostname);
#在mycat里查询
select * from user;
ホストとスレーブに書き込まれた内容が同じであることがわかります。したがって、読み取りと書き込みの分離が達成されていないことがわかります。
分離設定の読み取りと書き込み
vim /usr/local/mycal/conf/schema.xml
#修改<dataHost>的 balance属性为3
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="host1" database="testdb" />
<dataHost name="host1" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.157.133:3306" user="root"
password="root">
<readHost host="hostS1" url="192.168.157.135:3306" user="root" password="root"/>
</writeHost>
</dataHost>
</mycat:schema>
<dataHost>のbalance属性:[負荷分散タイプ]
1)、balance = "0"、読み取り/書き込み分離メカニズムを開かないでください。すべての読み取り操作は、現在使用可能なwriteHostに送信されます。
2)、balance = "1"、すべてのreadHostとstand by writeHostは、簡単に言えば、デュアルマスターデュアルスレーブモード(M1-> S1、M2-> S2、およびM1とM2が互いにある場合)のselectステートメントの負荷分散に参加します。アクティブおよびスタンバイ)、通常の状況では、M2、S1、S2はすべてselectステートメントの負荷分散に参加します。
3)、balance = "2"、すべての読み取り操作は、writeHostとreadhostにランダムに分散されます。
4)、balance = "3"、すべての読み取り要求は実行のためにreadhostにランダムに分散され、writerHostは読み取り圧力に耐えません。
OK、mycatサービスを再起動して確認します
#重启mycat服务
mycat console
#在mycat里的mysql里
use TESTDB;
SELECT * FROM USER;
読み取りと書き込みの分離が達成されたことがわかります