LinuxでのMysqlマスタースレーブレプリケーション(1つのマスターと1つのスレーブ)

注: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;

読み取りと書き込みの分離が達成されたことがわかります

 

 

おすすめ

転載: blog.csdn.net/u013227399/article/details/109737486