1.理解MySQL主從復制原理。
復制是MySQL提供的一直高可用、高性能的解決方案,一般用來建立大型的應用,總體來說,分為以下三步:
?? ?(1)master將改變記錄到二進制日志(binary log)中(這些記錄叫做二進制日志事件,binary log events);
??? (2)slave將master的binary log events拷貝到它的中繼日志(relay log);
??? (3)slave重做中繼日志中的事件,將改變反映它自己的數據。
2.完成MySQL主從復制。?
=============================================================
1.在主服務器(master)上
啟用二進制日志
選擇一個唯一的server-id
創建具有復制權限的用戶
2.在從服務器(slave)上
啟用中繼日志(二進制日志可開啟,也可不開啟)
選擇一個唯一的server-id
連接至主服務器,并開始復制
==============================================================
1)設置server-id值并開啟binlog參數
[mysqld]
log-bin = mysql-bin
server_id = 1
停止數據庫# systemctl stop mysqld
啟動數據庫#systemctl start mysqld
show variables like '%log_bin%';
可見log-bin 開
2)建立同步賬號
mysql> grant replication slave? on *.* to? rep@'192.168.95.%' identified by'123456';
mysql> show? grants?? for?? rep@'192.168.95.%';
3)鎖表設置只讀
為后面備份準備,注意生產環境要提前申請停機時間;
mysql> flush? tables with read lock;
提示:如果超過設置時間不操作會自動解鎖。
mysql> show variables? like'%timeout%';
測試鎖表后是否可以創建數據庫:
4)查看主庫狀態
查看主庫狀態,即當前日志文件名和二進制日志偏移量
mysql> show? master status;
5)備份數據庫數據
# mysqldump -uroot -p -A -B |gzip >?? /backup/mysql/mysql_bak.$(date +%F).sql.gz
6)解鎖
mysql> unlock? tables;
7)主庫備份數據上傳到從庫
scp mysql_bak.2021-01-26.sql.gz 192.168.83.134:/tmp
從庫上設置
1)設置server-id值并關閉binlog參數
停止數據庫# systemctl stop mysqld
啟動數據庫#systemctl start mysqld
2)還原從主庫備份數據
# cd /server/backup/
# gzip -d mysql_bak.2015-11-18.sql.gz
# mysql -uroot -p < mysql_bak.2015-11-18.
sql檢查還原:
# mysql -uroot -p -e 'show databases;'
3)設定從主庫同步
4)啟動從庫同步開關
mysql> start slave;
檢查狀態:show? slave status\G
3.完成MySQL讀寫分離配置
Mycat實現MySQL主從復制讀寫分離
MyCAT的安裝及部署
鏈接:https://pan.baidu.com/s/16Z7NFKuL2WX8b1ZKpk9AwA
提取碼:yang
1>、部署jdk環境MyCAT用Java開發,需要有JAVA運行環境,mycat依賴jdk1.7的環境
rpm -ivh jdk-8u144-linux-x64.rpm
測試 :? java -version
2>、安裝Mycat
鏈接:https://pan.baidu.com/s/1bkDv1WkwXXr2YzBtvCRY8w
提取碼:yang
tar xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
3)添加環境變量
export PATH=$PATH:/usr/local/mycat/bin
[root@localhost mycat]# source /etc/profile.d/mycat.sh (當前生效)
3>、讀寫分離配置
1)不使用Mycat托管MySQL主從服務器,簡單使用如下配置
#注意:配置前備份下配置文件
先做一個備份吧
打開
vim schema.xml
(1)<schema name="TESTDB"checkSQLschema="false"sqlMaxLimit="100"dataNode="dn1">
這里的TESTDB就是我們所宣稱的數據庫名稱,必須和server.xml中的用戶指定的數據庫名稱一致。添加一個dataNode="dn1",是指定了我們這個庫只有在dn1上,沒有分庫。
(2)<dataNode name="dn1"dataHost="localhost1"database="db1" />
這里只需要改database的名字,就是你真是的數據庫上的數據庫名,可根據自己的數據庫名稱修改。
(3) <dataHostname="localhost1"maxCon="1000"minCon="10"balance="1"writeType="0"dbType="mysql"dbDriver="native"switchType="1"slaveThreshold="100">
balance
1、balance=0不開啟讀寫分離機制,所有讀操作都發送到當前可用的writehostle
.2、balance=1全部的readhost與stand by writeHost 參與select語句的負載均衡。簡單的說,雙主雙從模式(M1->S1,M2->S2,并且M1和M2互為主備),正常情況下,M1,S1,S2都參與select語句的復雜均衡。
3、balance=2所有讀操作都隨機的在readhost和writehost上分發
writeType負載均衡類型,目前的取值有3種:
1、writeType="0", 所有寫操作發送到配置的第一個writeHost。
2、writeType="1",所有寫操作都隨機的發送到配置的writeHost。
3、writeType="2",不執行寫操作。
switchType
1、switchType=-1表示不自動切換
2、switchType=1默認值,自動切換
3、switchType=2基于MySQL 主從同步的狀態決定是否切換
datahost其他配置
<dataHost name="localhost1"maxCon="1000"minCon="10"balance="1"writeType="0"dbType="mysql"dbDriver="native"switchType="1">
maxCon="1000":最大的并發連接數
minCon="10":mycat在啟動之后,會在后端節點上自動開啟的連接線程
tempReadHostAvailable="1"
這個一主一從時(1個writehost,1個readhost時),可以開啟這個參數,如果2個writehost,2個readhost時
<heartbeat>select user()</heartbeat> 監測心跳
(4)寫與讀
4>、創建管理用戶
grant insert,delete,update,select on db1.* to mycat@'192.168.83.%' identified by '123456';
收回權限
revoke INSERT, UPDATE, DELETE ON school.* from 'mycat'@'192.168.83.%';
配置基本完成
?
?