亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

分析MySQL復(fù)制以及調(diào)優(yōu)原理和方法

 更新時(shí)間:2018年01月26日 15:27:36   投稿:laozhang  
本篇文章給大家詳細(xì)分析了MySQL復(fù)制以及調(diào)優(yōu)原理和方法,并通過代碼詳細(xì)分析了具體操作,有需要的朋友參考下吧。

一. 簡(jiǎn)介

MySQL自帶復(fù)制方案,帶來好處有:

數(shù)據(jù)備份。

負(fù)載均衡。

分布式數(shù)據(jù)。

概念介紹:

主機(jī)(master):被復(fù)制的數(shù)據(jù)庫。

從機(jī)(slave):復(fù)制主機(jī)數(shù)據(jù)的數(shù)據(jù)庫。

復(fù)制步驟:
(1). master記錄更改的明細(xì),存入到二進(jìn)制日志(binary log)。
(2). master發(fā)送同步消息給slave。
(3). slave收到消息后,將master的二進(jìn)制日志復(fù)制到本地的中繼日志(relay log)。
(4). slave重現(xiàn)中繼日志中的消息,從而改變數(shù)據(jù)庫的數(shù)據(jù)。

下面放一張經(jīng)典的圖片來說明這一過程:

二. 實(shí)現(xiàn)復(fù)制

實(shí)現(xiàn)復(fù)制有以下步驟:

1.設(shè)置MySQL主庫的二進(jìn)制日志以及server-id

MySQL配置文件一般存放在/etc/my.cnf

# 在[mysqld]下面添加配置選項(xiàng)
[mysqld]
server-id=1
log-bin=mysql-bin.log

server-id是數(shù)據(jù)庫在整個(gè)數(shù)據(jù)庫集群中的唯一標(biāo)示,必須保持唯一。
重啟MySQL。

注:如果MySQL配置文件中已經(jīng)配置過此文件,則可以跳過此步。

2.新建復(fù)制賬號(hào)

在主庫里面新建用于從庫復(fù)制主庫數(shù)據(jù)的賬號(hào),并授予復(fù)制權(quán)限。

mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO user_name@'host' IDENTIFIED BY 'password';

3.設(shè)置MySQL主庫server-id

和第二步配置一樣,要注意的地方有兩點(diǎn):

如果不需要從庫作為別的從庫的主庫的話,則不需要配置二進(jìn)制日志。很多時(shí)候復(fù)制并不需要復(fù)制主庫的全部數(shù)據(jù)庫(特別是mysql的信息配置庫)。因此可以配置replicate_do_db來指定復(fù)制的數(shù)據(jù)庫 4.從庫初始化主庫的數(shù)據(jù)

如果數(shù)據(jù)量不算大的情況下,可以使用mysqldump工具導(dǎo)出主庫數(shù)據(jù),然后導(dǎo)入到從庫里面。

mysqldump --single-transaction --triggers --master-data databasename > data.sql

如果數(shù)據(jù)量大的情況下應(yīng)該使用Xtrabackup去進(jìn)行數(shù)據(jù)庫的導(dǎo)出,此處不做介紹。
可能會(huì)有同學(xué)問,為什么不直接使用二進(jìn)制日志進(jìn)行初始化呢?

如果我們主庫運(yùn)行了比較長(zhǎng)的一段時(shí)間,并不太適合使用從庫根據(jù)二進(jìn)制日志進(jìn)行復(fù)制數(shù)據(jù),直接使用二進(jìn)制日志去初始化從庫會(huì)比較耗費(fèi)時(shí)間和性能。更多的情況下,主庫的二進(jìn)制日志的配置項(xiàng)沒有打開,因此也就不存在以前操作的二進(jìn)制日志。 5.開啟復(fù)制

從庫執(zhí)行下面命令

mysql> CHANGE MASTER TO MASTER_HOST='host',
-> MASTER_USER='user',
-> MASTER_PASSWORD='password',
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=0;

注意最后的兩個(gè)命令:MASTER_LOG_FILE和MASTER_LOG_POS,表示從庫的從哪個(gè)二進(jìn)制文件開始讀取,偏移量從那里開始,這兩個(gè)參數(shù)可以從我們導(dǎo)入的SQL里面找到。

開啟復(fù)制

start slave;

這時(shí)候就完成了復(fù)制,在主庫更新一個(gè)數(shù)據(jù)或者新增數(shù)據(jù)在從庫都可以查詢到結(jié)果。


在主庫上也可以查詢的到復(fù)制線程的狀態(tài)。

三. 復(fù)制的日志格式

MySQL復(fù)制的日志格式有三種,根據(jù)主庫存放數(shù)據(jù)的方式不同有以下三種:

復(fù)制方式 特點(diǎn) 優(yōu)點(diǎn) 缺點(diǎn)
row 基于行的格式復(fù)制,記錄需要修改的每行的數(shù)據(jù)信息。 如果一個(gè)SQL修改了2w行的數(shù)據(jù),那么就會(huì)記錄2w行的日志格式 保證了數(shù)據(jù)的強(qiáng)一致性,且由于記錄的是執(zhí)行后的結(jié)果,在從庫上執(zhí)行還原也會(huì)比較快 日志記錄數(shù)量很多,主從之間的傳輸需要更多的時(shí)間。
statement 基于段的日志格式復(fù)制,也就是記錄下更改的SQL記錄,而不是更改的行的記錄。 日志記錄量最小。 對(duì)于一些輸出結(jié)果不確定的函數(shù),在從庫上執(zhí)行一遍很可能會(huì)出現(xiàn)問題,如uuid,從庫根據(jù)日志還原主庫數(shù)據(jù)的時(shí)候需要執(zhí)行一遍SQL,時(shí)間相對(duì)較慢。
mixed 混合上面兩種日志格式記錄記錄日志,至于什么時(shí)候使用哪種日志方式由MySQL本身決定。 可以平衡上面兩種日志格式的優(yōu)缺點(diǎn)。

mysql5.7以前默認(rèn)使用statement格式。

設(shè)置方式,可以在配置文件設(shè)置(首選):

binlog_format=ROW

或臨時(shí)設(shè)置全局變量(當(dāng)前mysql連接有效):

查看日志格式
mysql > show variables like 'binlog_format';
設(shè)置日志格式
mysql > set binlog_format='row';

由于兩個(gè)主從服務(wù)器一般都會(huì)放在同一個(gè)機(jī)房里面,兩者之間同步的速度會(huì)會(huì)比較快,為保證強(qiáng)一致性,應(yīng)該首選行的日志格式記錄(row),保證傳輸素速度可以選擇混合方式(mixed)。
而行的日志格式有下面三種記錄方式:

記錄方式 特點(diǎn)
minimal 只記錄被修改列的數(shù)據(jù)
full 記錄被修改的行的全部列的數(shù)據(jù)
noblob 特點(diǎn)同上,只是如果沒有修改blob和text類型的列的情況下,不會(huì)記錄這些列的數(shù)據(jù)(也就是大數(shù)據(jù)列)

mysql默認(rèn)是full,最好修改成minimal。

binlog_row_image=minimal

四. 主從復(fù)制延遲

由于主庫和從庫之間不在同一個(gè)主機(jī)上,數(shù)據(jù)同步之間不可以避免地具有延遲,解決的方法有添加緩存,業(yè)務(wù)層的跳轉(zhuǎn)等待,如果非得從數(shù)據(jù)庫層面去減緩延遲問題,可以從復(fù)制時(shí)候的三大步驟(主庫產(chǎn)生日志,主從傳輸日志,從庫還原日志內(nèi)容)入手:

1.主庫寫入到日志的速度

控制主庫的事務(wù)大小,分割大事務(wù)為多個(gè)小事務(wù)。

如插入20w的數(shù)據(jù),改成插入多次5000行(可以利用分頁的思路)

2.二進(jìn)制日志在主從之間傳輸時(shí)間

主從之間盡量在同一個(gè)機(jī)房或地域。

日志格式改用MIXED,且設(shè)置行的日志格式未minimal,原理詳見上面的日志格式介紹。

3.減少從庫還原日志的時(shí)間

在MySQL5.7版本后可以利用邏輯時(shí)鐘方式分配SQL多線程。

設(shè)置邏輯時(shí)鐘:slave_parallel_type=‘logical_clock';

設(shè)置復(fù)制線程個(gè)數(shù):slave_parallel_workers=4;

五. 需要注意的地方

重啟MySQL最好切換未MySQL用戶再進(jìn)行操作,不然文件啟動(dòng)后會(huì)有權(quán)限問題。搭建好MySQL的環(huán)境后就設(shè)置好配置里的log-bin選項(xiàng),這樣以后如果數(shù)據(jù)庫需要從庫的復(fù)制,就不需要重啟數(shù)據(jù)庫,打斷業(yè)務(wù)的進(jìn)行。需要打開主庫的防火墻的對(duì)應(yīng)的mysql端口。由于從庫同步主庫的方式,監(jiān)聽主庫發(fā)送的信息,而不是輪詢,因此如果出現(xiàn)通信出現(xiàn)了故障,重新連接后如果主庫沒有進(jìn)行數(shù)據(jù)更改的操作,從庫不會(huì)同步數(shù)據(jù),因此可以通過插入空事務(wù)的方式同步數(shù)據(jù)。

以上就是小編本次整理的全部?jī)?nèi)容,感謝你對(duì)腳本之家的支持。

相關(guān)文章

  • mysql安全啟動(dòng)腳本mysqld_safe詳細(xì)介紹

    mysql安全啟動(dòng)腳本mysqld_safe詳細(xì)介紹

    這篇文章主要介紹了mysql安全啟動(dòng)腳本mysqld_safe詳細(xì)介紹,mysqld_safe增加了一些安全特性,需要的朋友可以參考下
    2014-07-07
  • mysql啟動(dòng)報(bào)錯(cuò)Failed?to?start?LSB:start?and?stop?MySQL的問題解決

    mysql啟動(dòng)報(bào)錯(cuò)Failed?to?start?LSB:start?and?stop?MySQL的問題解決

    本文主要介紹了mysql啟動(dòng)報(bào)錯(cuò)Failed?to?start?LSB:start?and?stop?MySQL的問題解決,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • 使用MySQL唯一索引的注意事項(xiàng)及說明

    使用MySQL唯一索引的注意事項(xiàng)及說明

    這篇文章主要介紹了使用MySQL唯一索引的注意事項(xiàng)及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • mysql中binlog_format模式與配置詳細(xì)分析

    mysql中binlog_format模式與配置詳細(xì)分析

    這篇文章主要介紹了mysql中binlog_format模式與配置的相關(guān)內(nèi)容,詳細(xì)介紹了binlog的三種格式與SBR、 RBR 兩種模式各自的優(yōu)缺點(diǎn),需要的朋友可以參考。
    2017-10-10
  • MySQL使用觸發(fā)器實(shí)現(xiàn)數(shù)據(jù)自動(dòng)更新的應(yīng)用實(shí)例

    MySQL使用觸發(fā)器實(shí)現(xiàn)數(shù)據(jù)自動(dòng)更新的應(yīng)用實(shí)例

    觸發(fā)器是非常常見的自動(dòng)化數(shù)據(jù)庫操作方式,無論是在數(shù)據(jù)更新、刪除還是需要自動(dòng)添加一些內(nèi)容到數(shù)據(jù)表上,觸發(fā)器都可以發(fā)揮作用,熟悉 SQL 的基本語法和一些常見的用例,可以幫助你合理地設(shè)置自己的數(shù)據(jù)庫操作流程,
    2024-01-01
  • 最新評(píng)論