一、在業務複雜的系統中,有這麼一個情景,有一句sql語句須要鎖表,致使暫時不能使用讀的服務,那麼就很影響運行中的業務,使用主從複製,讓主庫負責寫,從庫負責讀,這樣,即便主庫出現了鎖表的情景,經過讀從庫也能夠保證業務的正常運做。mysql
二、作數據的熱備。sql
三、架構的擴展。業務量愈來愈大,I/O訪問頻率太高,單機沒法知足,此時作多庫的存儲,下降磁盤I/O訪問的頻率,提升單個機器的I/O性能。數據庫
以下架構圖:安全
能夠看到這個架構圖的MYSQL若是隨着業務量愈來愈大,I/O訪問頻率太高,單機是沒法知足的。所以這時候就要進行MYSQL的主從複製,讀寫分離了,這樣作分擔了單個數據庫的壓力,數據備份,高可用和容錯。服務器
1.數據分佈 (Data distribution )
2.負載平衡(load balancing)
3.備份(Backups)
4.高可用性和容錯行 High availability and failover架構
MySQL主從複製的基本交互過程,以下:異步
binary logs是主庫中保存全部更新事件日誌的二進制文件。性能
主從複製的基礎是主庫記錄數據庫的全部變動記錄到binlog二進制文件中。binlog是數據庫服務器啓動的那一刻起,保存全部修改數據庫結構或內容的一個文件。spa
mysql主從複製是一個異步的複製過程,主庫發送更新事件到從庫,從庫讀取更新記錄,並執行更新記錄,使得從庫的內容與主庫保持一致。線程
在主庫裏,只要有更新事件出現,就會被依次地寫入到binlog裏面,以後會推到從庫中做爲從庫進行復制的數據源。
具體細節以下:
1.每當有從庫鏈接到主庫的時候,主庫都會建立一個線程(binlog輸出線程)而後發送binlog內容到從庫。
對於每個即將發送給從庫的sql事件,binlog輸出線程會將其鎖住。一旦該事件被線程讀取完以後,該鎖會被釋放,即便在該事件徹底發送到從庫的時候,該鎖也會被釋放。
在從庫裏,當複製開始的時候,從庫就會建立兩個線程進行處理:
.當START SLAVE語句在從庫開始執行以後,從庫建立一個I/O線程(從庫I/O線程),該線程鏈接到主庫並請求主庫發送binlog裏面的更新記錄到從庫上。
從庫I/O線程讀取主庫的binlog輸出線程發送的更新並拷貝這些更新到本地文件,其中包括relay log文件。從庫建立一個SQL線程,這個線程讀取從庫I/O線程寫到relay log(mysql-relay-bin.xxxxxx)的更新事件並執行。
對於每個主從複製的鏈接,都有三個線程。擁有多個從庫的主庫爲每個鏈接到主庫的從庫建立一個binlog輸出線程,每個從庫都有它本身的I/O線程和SQL線程。
從庫經過建立兩個獨立的線程,使得在進行復制時,從庫的讀和寫進行了分離。所以,即便負責執行的線程運行較慢,負責讀取更新語句的線程並不會所以變得緩慢。
好比說,若是從庫有一段時間沒運行了,當它在此啓動的時候,儘管它的SQL線程執行比較慢,它的I/O線程能夠快速地從主庫裏讀取全部的binlog內容。
這樣一來,即便從庫在SQL線程執行完全部讀取到的語句前中止運行了,I/O線程也至少徹底讀取了全部的內容,並將其安全地備份在從庫本地的relay log,隨時準備在從庫下一次啓動的時候執行語句。
總結起來就是:
一、master在執行sql以後,記錄二進制log文件(bin-log)。
二、slave鏈接master,並從master獲取binlog,存於本地relay-log中,而後從上次記住的位置起執行SQL語句,一旦遇到錯誤則中止同步。
配置主從複製以下步驟:
1.用本身MSQL安裝目錄拷貝下來放到別的目錄中,以下:
接着複製兩份,進行從命名,以下:
接着修改這兩個從庫的配置文件,而且將my-default.ini配置文件激活,更名成my.ini便可激活,以下圖:
接着修改my.ini中的配置,該端口,和基本目錄和數據目錄,以下圖:
而後在分別在兩個從數據庫目錄中新建一個data文件,以下圖:
接着把主庫中的如下幾個文件夾複製到兩個從庫的data文件中,順便把等下進行主從賦值的數據也賦值到兩個從庫中,以下mama@002dbike:
接着進行兩個從庫的服務安裝:
完成後開啓服務,以下:
而後進行鏈接,以下:
鏈接進去,會打開不了要進行主從複製的數據庫的,由於兩個從庫中ibdata1文件缺失數據,所以把主庫中的ibdata1文件複製過來:
而後再開啓服務便可。
接着在回去 修改主庫和從庫中的my.ini文件,將主庫ID命名爲1,兩個從庫分別命名爲2,3 配置以下:
接着,還要指定主數據庫要進行主從複製的數據庫,以下:
指定從數據庫要同步的數據庫以下:
接着在主數據庫鏈接中進行以下查詢:
而後從數據庫執行要給腳本,以下圖:
而後從數據庫鏈接中再查詢一下成功沒有以下,若是出現以下信息即主從複製配置成功,以下: