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