注:mysql主從復制只執行接入后的內容,即主資料庫和表要在接入后創建,
一、主機配置(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日志三種格式
1、Statement:每一潭訓修改資料的sql都會記錄在binlog中
2、Row:不記錄sql陳述句背景關系相關資訊,僅保存哪條記錄被修改
3、Mixedlevel:以上兩種的混合使用,一般的陳述句修改使用statment格式保存binlog,如一些函式,statement無法完成主從復制的操作,則采用row格式保存binlog
二、從機配置(master135)
組態檔: vim /etc/my.cnf
#從服務器唯一ID
server-id=2
#啟用中繼日志
relay-log=mysql-relay
三、主機、從機重啟mysql服務
systemctl restart mysqld
四、主機、從機都關閉防火墻
systemctl stop firewalld
五、在主機上建立賬戶并授權slave
grant replication slave on *.* to 'slave'@'%'identified by '123456';
報錯:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
原因:密碼設定的太簡單,不符合mysql密碼設定規范
解決方法:
1、查看mysql完整的密碼規則
show variables like 'validate_password%';
2、更改密碼長度
set global validate_password_length=4;
3、設定密碼驗證策略(medium【中】,low【低】)
set global validate_password_policy=0;

六、查詢master狀態
show master status;

注:記錄下file和position的值,執行完此步驟后不再操作主機mysql,防止主機狀態值變化,
七、在從機上配置需要復制的主機
#復制主機的命令
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;


報錯:
ERROR 3021(HY000): This operation cannot be performed with a running slave io thread; run STOP SLAVE IO_THREAD FOR CHANNEL ' ' first.
原因:如果從機連過主機,需要重置一下
解決方法:
stop slave;
reset master;

八、驗證
到此mysql的主從復制就做好了,我們可以進行驗證一下
1、主機上創建一下testdb資料庫,并查看資料庫是否創建成功
create database testdb;
show databases;

2、主機上創建完成,我們去從機上看一下吧

擴展:
1、停止從服務復制功能
stop slave;
2、重新配置主從
stop slave;
reset master;
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 參與 select 陳述句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->S2,并且 M1 與 M2 互為主備),正常情況下,M2,S1,S2 都參與 select 陳述句的負載均衡,
3)、balance="2",所有讀操作都隨機的在 writeHost、readhost 上分發,
4)、balance="3",所有讀請求隨機的分發到 readhost 執行,writerHost 不負擔讀壓力,
好了重啟一下mycat服務,進行驗證一下吧
#重啟mycat服務
mycat console
#在mycat里的mysql里
use TESTDB;
SELECT * FROM USER;

我們看到已經實作讀寫分離了
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/224101.html
標籤:其他
下一篇:Spring框架概述與IoC思想
