您好,登錄后才能下訂單哦!
MySQL 的日志類型
二進制日志,事務日志,錯誤日志,一般查詢日志,中繼日志,慢查詢日志
二進制日志有以下內容
數據目錄,一般放置在mysql-bin.XXXXX編號)
滾動:達到一個最大上限,flush logs,服務器重啟
格式:statement
row
mixed
mysql-bin.index:二進制日志文件索引文件
mysql > SHOW MASTER STATUS查看主服務器的狀態
mysql > SHOW BINARY LOGS 查看二進制日志
mysql > SHOW BINLOG EVENTS IN 'file'查看二進制日志中的事件
event中比較重要的選項:
timestamp時間戳
position,offset,operation,server-id
MySQL的隔離級別:
READ-UNCOMMITED
READ-COMMITED
如果使用mixed可能會發生數據不一致的情況
官方推薦使用row 的方法
REPEATABLE-READ
SERIALIZABLE
復制實現的功能
實現數據備份
如果有從服務器,主服務器發生故障之后,開通從服務器的寫入功能,從而提供高可用的使用功能
異地容災
分攤負載(scale out )主服務器:寫 從服務器:讀
復制方法有三種,分別是主從復制,半同步復制以及主主復制
首先介紹主從復制(使用較頻繁)
在主服務器上,前端用戶每次執行一次數據庫發生修改或者引起修改的指令,都會在二進制日志中保存為一個事件,每保存一個事件,都會通過MySQL的3306端口發送給另外一個服務器,另外一臺服務器將這個日志接收下來,然后先保存在本地的日志文件中,然后每次讀取一個操作,然后將每一次修改執行到自己服務器上,這個過程叫做MySQL 的復制
master上存在一個二進制文件Binary log
slave 從主服務器上二進制文件復制而成的文件,叫做中繼日志(relay log)
在主服務器上當有多個事務并發執行的時候,但是在寫入二進制文件中的時候只能一條一條寫,因此就需要一個暫時緩存的日志文件進行緩存,接著再向二進制文件中寫入
其中在復制方法上同時又有同步復制以及異步復制的區分:
同步復制
從服務器不能比主服務器慢,前端發生的修改不能及時的得到slave 的響應
因此基本上是使用半同步復制的方法
半同步復制只是將數據同步發送給另一個節點,只能保證近的節點能夠及時的響應
異步復制:一主多從,等待每一個服務器都同步完成的時候,
在多臺從服務器進行復制的時候,可能會因為請求過多,主服務器難以有效的處理,因此就需要一個前端代理。
讀寫分離(rw-splitting):找一個MySQL的前端代理,工作在應用層,能夠理解MySQL的語句,能夠完成將不同的操作(讀 寫)定向到不同的服務器,分別分發給主服務器和從服務器,從而完成讀寫分離
多級復制:一個從服務器可能是一個主服務器的從服務器,也可能是另一個從服務器的從服務器
如果一個從服務器不記錄中繼日志,則不能將內容發送給下一級服務器,從服務器上不能進行寫操作
接下來介紹雙主模型:
雙主模型的時候,配置幾乎一樣,但是要很注意server-id的重要性,防止出現復制環路的產生
無法實現減輕寫操作,很容易出問題
例如
tutors:name,age,gender,tid
tom 10
jerry 30
A主機:UPDATE tutords SET name=jerry
B主機:UPDATE tutors SET age=30 WHERE name=tom
在最終的完成同步的時候,查詢出來的結果并不認能夠合并,會產生沖突
所以在生產環境中,一般不建議使用雙主模型
讀寫分離可以由下面的組件實現:
mysql-proxy
amoeba
數據拆分之后實現路由:
cobar
補充:
master :slave
1-->N
slave :master
1-->N X
一個從服務器只能屬于一個主服務器
MySQL 5.5之前的復制實現非常簡單,
MySQL 5.6之后引用了 gtid,multi-thread replication(多線程復制)
配置MySQL復制基本步驟
主從復制
一.master
啟用二進制日志
log-bin=master-bin
log-bi-index =master-bin.index
選擇一個唯一的server-id
server-id ={0-2^32}
創建具有復制權限的用戶
REPLICATION SLAVE
REPLICATION CLIENT
二.slave
1.啟用中繼日志
relay-log =relay-log
log-bin-index=
2.選擇一個唯一的server-id
server-id ={0-2^32}
3.連接至主服務器,并開始復制數據
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線程
復制線程:
master:dump
slave :IO_Thread,SQL_Thread
read_only=YES
在從服務器上設定,對具有SUPER權限的用戶不生效
sync-binlog = ON
在主服務器上設定,用于事務安全
半同步復制
在master 和slave 上各自安裝一個google提供的插件
主服務器上
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;
從服務器上
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;
雙主復制
在兩臺服務器上各自建立一個具有復制權限的用戶
修改配置文件
主服務器上
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
從服務器上
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.如果此時兩臺服務器均為新建立,且無其他寫入操作,各服務器之需記錄當前自己的二進制文件以及事件位置,以之作為另一臺服務器復制起始位置即可
4.各服務器接下來指定對另一臺服務器為自己的主服務器即可
A主機必須查看B的二進制文件及位置,并以之作為自己的復制起點
B主機必須查看A的二進制文件及位置,并以之作為自己的復制起點
兩個服務器都能進行讀寫,即為雙主模型
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。