MySQL 的日志類型
創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站與策劃設(shè)計(jì),硯山網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:硯山等地區(qū)。硯山做網(wǎng)站價(jià)格咨詢:18980820575
二進(jìn)制日志,事務(wù)日志,錯(cuò)誤日志,一般查詢?nèi)罩?,中繼日志,慢查詢?nèi)罩?/p>
二進(jìn)制日志有以下內(nèi)容
數(shù)據(jù)目錄,一般放置在mysql-bin.XXXXX編號(hào))
滾動(dòng):達(dá)到一個(gè)最大上限,flush logs,服務(wù)器重啟
格式:statement
row
mixed
mysql-bin.index:二進(jìn)制日志文件索引文件
mysql > SHOW MASTER STATUS查看主服務(wù)器的狀態(tài)
mysql > SHOW BINARY LOGS 查看二進(jìn)制日志
mysql > SHOW BINLOG EVENTS IN 'file'查看二進(jìn)制日志中的事件
event中比較重要的選項(xiàng):
timestamp時(shí)間戳
position,offset,operation,server-id
MySQL的隔離級(jí)別:
READ-UNCOMMITED
READ-COMMITED
如果使用mixed可能會(huì)發(fā)生數(shù)據(jù)不一致的情況
官方推薦使用row 的方法
REPEATABLE-READ
SERIALIZABLE
復(fù)制實(shí)現(xiàn)的功能
實(shí)現(xiàn)數(shù)據(jù)備份
如果有從服務(wù)器,主服務(wù)器發(fā)生故障之后,開通從服務(wù)器的寫入功能,從而提供高可用的使用功能
異地容災(zāi)
分?jǐn)傌?fù)載(scale out )主服務(wù)器:寫 從服務(wù)器:讀
復(fù)制方法有三種,分別是主從復(fù)制,半同步復(fù)制以及主主復(fù)制
首先介紹主從復(fù)制(使用較頻繁)
在主服務(wù)器上,前端用戶每次執(zhí)行一次數(shù)據(jù)庫(kù)發(fā)生修改或者引起修改的指令,都會(huì)在二進(jìn)制日志中保存為一個(gè)事件,每保存一個(gè)事件,都會(huì)通過MySQL的3306端口發(fā)送給另外一個(gè)服務(wù)器,另外一臺(tái)服務(wù)器將這個(gè)日志接收下來,然后先保存在本地的日志文件中,然后每次讀取一個(gè)操作,然后將每一次修改執(zhí)行到自己服務(wù)器上,這個(gè)過程叫做MySQL 的復(fù)制
master上存在一個(gè)二進(jìn)制文件Binary log
slave 從主服務(wù)器上二進(jìn)制文件復(fù)制而成的文件,叫做中繼日志(relay log)
在主服務(wù)器上當(dāng)有多個(gè)事務(wù)并發(fā)執(zhí)行的時(shí)候,但是在寫入二進(jìn)制文件中的時(shí)候只能一條一條寫,因此就需要一個(gè)暫時(shí)緩存的日志文件進(jìn)行緩存,接著再向二進(jìn)制文件中寫入
其中在復(fù)制方法上同時(shí)又有同步復(fù)制以及異步復(fù)制的區(qū)分:
同步復(fù)制
從服務(wù)器不能比主服務(wù)器慢,前端發(fā)生的修改不能及時(shí)的得到slave 的響應(yīng)
因此基本上是使用半同步復(fù)制的方法
半同步復(fù)制只是將數(shù)據(jù)同步發(fā)送給另一個(gè)節(jié)點(diǎn),只能保證近的節(jié)點(diǎn)能夠及時(shí)的響應(yīng)
異步復(fù)制:一主多從,等待每一個(gè)服務(wù)器都同步完成的時(shí)候,
在多臺(tái)從服務(wù)器進(jìn)行復(fù)制的時(shí)候,可能會(huì)因?yàn)檎?qǐng)求過多,主服務(wù)器難以有效的處理,因此就需要一個(gè)前端代理。
讀寫分離(rw-splitting):找一個(gè)MySQL的前端代理,工作在應(yīng)用層,能夠理解MySQL的語句,能夠完成將不同的操作(讀 寫)定向到不同的服務(wù)器,分別分發(fā)給主服務(wù)器和從服務(wù)器,從而完成讀寫分離
多級(jí)復(fù)制:一個(gè)從服務(wù)器可能是一個(gè)主服務(wù)器的從服務(wù)器,也可能是另一個(gè)從服務(wù)器的從服務(wù)器
如果一個(gè)從服務(wù)器不記錄中繼日志,則不能將內(nèi)容發(fā)送給下一級(jí)服務(wù)器,從服務(wù)器上不能進(jìn)行寫操作
接下來介紹雙主模型:
雙主模型的時(shí)候,配置幾乎一樣,但是要很注意server-id的重要性,防止出現(xiàn)復(fù)制環(huán)路的產(chǎn)生
無法實(shí)現(xiàn)減輕寫操作,很容易出問題
例如
tutors:name,age,gender,tid
tom 10
jerry 30
A主機(jī):UPDATE tutords SET name=jerry
B主機(jī):UPDATE tutors SET age=30 WHERE name=tom
在最終的完成同步的時(shí)候,查詢出來的結(jié)果并不認(rèn)能夠合并,會(huì)產(chǎn)生沖突
所以在生產(chǎn)環(huán)境中,一般不建議使用雙主模型
讀寫分離可以由下面的組件實(shí)現(xiàn):
mysql-proxy
amoeba
數(shù)據(jù)拆分之后實(shí)現(xiàn)路由:
cobar
補(bǔ)充:
master :slave
1-->N
slave :master
1-->N X
一個(gè)從服務(wù)器只能屬于一個(gè)主服務(wù)器
MySQL 5.5之前的復(fù)制實(shí)現(xiàn)非常簡(jiǎn)單,
MySQL 5.6之后引用了 gtid,multi-thread replication(多線程復(fù)制)
配置MySQL復(fù)制基本步驟
主從復(fù)制
一.master
啟用二進(jìn)制日志
log-bin=master-bin
log-bi-index =master-bin.index
選擇一個(gè)唯一的server-id
server-id ={0-2^32}
創(chuàng)建具有復(fù)制權(quán)限的用戶
REPLICATION SLAVE
REPLICATION CLIENT
二.slave
1.啟用中繼日志
relay-log =relay-log
log-bin-index=
2.選擇一個(gè)唯一的server-id
server-id ={0-2^32}
3.連接至主服務(wù)器,并開始復(fù)制數(shù)據(jù)
mysql > CHANGER MASTER TO MASTER_HOST= ' ',MASTER_PORT= ' ',MASTER_LOG_FILE=' ',MASTER_LOG_FILE_POS=' ',MASTER_USER=' ' ,MASTER_PASSWORD=' ';
mysql >START SLAVE
mysql>START SLAVE SQL_Thread 開啟SQL線程
mysql>START SLAVE IO_Thread開啟IO線程
復(fù)制線程:
master:dump
slave :IO_Thread,SQL_Thread
read_only=YES
在從服務(wù)器上設(shè)定,對(duì)具有SUPER權(quán)限的用戶不生效
sync-binlog = ON
在主服務(wù)器上設(shè)定,用于事務(wù)安全
半同步復(fù)制
在master 和slave 上各自安裝一個(gè)google提供的插件
主服務(wù)器上
mysql>INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;
mysql>SET GLOBAL rpl_semi_sync_master_enabled=1;
mysql>SET GLOBAL rpl_semi_syc_master_timeout=1000;
從服務(wù)器上
mysql>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
mysql>SET GLOBAL rpl_semi_sync_slave_enables =1;
mysql_STOP SLAVE IO_Thread;START SLAVE IO_Thread;
雙主復(fù)制
在兩臺(tái)服務(wù)器上各自建立一個(gè)具有復(fù)制權(quán)限的用戶
修改配置文件
主服務(wù)器上
server-id =10
log-bin =mysql-bin
relay -log=relay -mysql
relay-log -index =relay -mysql.index
auto-increment-incremeng =2
auto-increment-offset =1
從服務(wù)器上
server-id=20
log-bin=mysql=bin
relay-log=relay-mysql
relay-log-index=relay-mysql.index
auto-increment-increment=2
auto-increment-offset =2
3.如果此時(shí)兩臺(tái)服務(wù)器均為新建立,且無其他寫入操作,各服務(wù)器之需記錄當(dāng)前自己的二進(jìn)制文件以及事件位置,以之作為另一臺(tái)服務(wù)器復(fù)制起始位置即可
4.各服務(wù)器接下來指定對(duì)另一臺(tái)服務(wù)器為自己的主服務(wù)器即可
A主機(jī)必須查看B的二進(jìn)制文件及位置,并以之作為自己的復(fù)制起點(diǎn)
B主機(jī)必須查看A的二進(jìn)制文件及位置,并以之作為自己的復(fù)制起點(diǎn)
兩個(gè)服務(wù)器都能進(jìn)行讀寫,即為雙主模型