MySQL5.6主從復制搭建基于日志(binlog)

什么是MySQL主從復制

簡單來說,就是保證主SQL(Master)和從SQL(Slave)的數據是一致性的,向Master插入數據后,Slave會自動從Master把修改的數據同步過來(有一定的延遲),通過這種方式來保證數據的一致性,就是主從復制。

MySQL主從能解決什么問題

一、高可用

因為數據都是相同的,所以當Master掛掉后,可以指定一臺Slave充當Master繼續保證服務運行,因為數據是一致性的(如果當插入Master就掛掉,可能不一致,因為同步也需要時間),當然這種配置不是簡單的把一臺Slave充當Master,畢竟還要考慮后續的Salve同步Master,當然本文并不是將高可用的配置,所以這里就不多講了。

二、負載均衡

因為讀寫分離也算是負載均衡的一種,所以就不單獨寫了,因為一般都是有多臺Slave的,所以可以將讀操作指定到Slave服務器上(需要代碼控制),然后再用負載均衡來選擇那臺Slave來提供服務,同時也可以吧一些大量計算的查詢指定到某臺Slave,這樣就不會影響Master的寫入以及其他查詢.

三、數據備份

一般我們都會做數據備份,可能是寫定時任務,一些特殊行業可能還需要手動備份,有些行業要求備份和原數據不能在同一個地方,所以主從就能很好的解決這個問題,不僅備份及時,而且還可以多地備份,保證數據的安全

四、業務模塊化

可以一個業務模塊讀取一個Slave,再針對不同的業務場景進行數據庫的索引創建和根據業務選擇MySQL存儲引擎

五、高擴展(硬件擴展)

主從復制支持2種擴展方式

1、scale-up

向上擴展或者縱向擴展,主要是提供比現在服務器更好性能的服務器,比如增加CPU和內存以及磁盤陣列等,因為有多臺服務器,所以可擴展性比單臺更大

2、scale-out

向外擴展或者橫向擴展,是指增加服務器數量的擴展,這樣主要能分散各個服務器的壓力

主從復制的缺點

一、成本增加

無可厚非的是搭建主從肯定會增加成本,畢竟一臺服務器和兩臺服務器的成本完全不同,另外由于主從必須要開啟二進制日志,所以也會造成額外的性能消耗

二、數據延遲

Slave從Master復制過來肯定是會有一定的數據延遲的,所以當剛插入就出現查詢的情況,可能查詢不出來,當然如果是插入者自己查詢,那么可以直接從Master中查詢出來,當然這個也是需要用代碼來控制的

三、寫入更慢

主從復制主要是針對讀遠大于寫或者對數據備份實時性要求較高的系統中,因為Master在寫中需要更多操作,而且只有一臺寫入的Master(因為我目前只會配置一臺寫入Master,最多就是有從Master的Slave,用來在Master掛掉后替換成Master,平時不對外進行服務),所以寫入的壓力并不能被分散,當然如果直接怎么解決這個問題的話,歡迎留言指教

復制方式

MySQL5.6開始主從復制有兩種方式:基于日志(binlog)、基于GTID(全局事務標示符)。

本文只涉及基于日志binlog的主從配置

復制原理

1、Master將數據改變記錄到二進制日志(binary log)中,也就是配置文件log-bin指定的文件,這些記錄叫做二進制日志事件(binary log events)

2、Slave通過I/O線程讀取Master中的binary log events并寫入到它的中繼日志(relay log)

3、Slave重做中繼日志中的事件,把中繼日志中的事件信息一條一條的在本地執行一次,完成數據在本地的存儲,從而實現將改變反映到它自己的數據(數據重放)

要求

1、主從服務器操作系統版本和位數一致

2、Master和Slave數據庫的版本要一致

3、Master和Slave數據庫中的數據要一致

4、Master開啟二進制日志,Master和Slave的server_id在局域網內必須唯一

具體配置

硬件需求

臺或兩臺以上安裝了相同版本的MySQL

master 192.168.100.70

salve ? ?192.168.100.71

配置Master

一、安裝數據庫

二、配置my.cnf

不同的系統my.cnf路徑不同,所以我們只講解牽扯修改的地方。添加配置

[mysqld]
#設置server_id,一般設置為IP,注意要唯一
server_id=100  
#復制過濾:也就是指定哪個數據庫不用同步(mysql庫一般不同步)
binlog-ignore-db=mysql  
#開啟二進制日志功能,可以隨便取,最好有含義(關鍵就是這里了)
log-bin=edu-mysql-bin  
#為每個session 分配的內存,在事務過程中用來存儲二進制日志的緩存
binlog_cache_size=1M  
#從復制的格式(mixed,statement,row,默認格式是statement)
binlog_format=mixed  
#二進制日志自動刪除/過期的天數。默認值為0,表示不自動刪除。
expire_logs_days=7  
#跳過主從復制中遇到的所有錯誤或指定類型的錯誤,避免slave端復制中斷。
#如:1062錯誤是指一些主鍵重復,1032錯誤是因為主從數據庫數據不一致
slave_skip_errors=1062

配置完成后重啟mysql

關于復制過濾:
復制過濾可以讓你只復制服務器中的一部分數據,有兩種復制過濾:
1、在Master上過濾二進制日志中的事件
2、在Slave上過濾中繼日志中的事件。
復制類型:
1、基于語句的復制
在Master上執行的SQL語句,在Slave上執行同樣的語句。MySQL默認采用基于語句的復制,效率比較高。一旦發現沒法精確復制時,會自動選著基于行的復制
2、基于行的復制
把改變的內容復制到Slave,而不是把命令在Slave上執行一遍。從MySQL5.0開始支持
3、混合類型的復制
默認采用基于語句的復制,一旦發現基于語句的無法精確的復制時,就會采用基于行的復制

三、創建數據同步用戶

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

這里主要是要授予用戶REPLICATION SLAVE權限和REPLICATION CLIENT權限

配置Slave

一、安裝數據庫

二、配置my.cnf

[mysqld]
#設置server_id,一般設置為IP,注意要唯一
server_id=101  
#復制過濾:也就是指定哪個數據庫不用同步(mysql庫一般不同步)
binlog-ignore-db=mysql  
#開啟二進制日志功能,以備Slave作為其它Slave的Master時使用
log-bin=edu-mysql-slave1-bin  
#為每個session 分配的內存,在事務過程中用來存儲二進制日志的緩存
binlog_cache_size=1M  
#主從復制的格式(mixed,statement,row,默認格式是statement)
binlog_format=mixed  
#二進制日志自動刪除/過期的天數。默認值為0,表示不自動刪除。
expire_logs_days=7  
#跳過主從復制中遇到的所有錯誤或指定類型的錯誤,避免slave端復制中斷。
#如:1062錯誤是指一些主鍵重復,1032錯誤是因為主從數據庫數據不一致
slave_skip_errors=1062  
#relay_log配置中繼日志
relay_log=edu-mysql-relay-bin  
#log_slave_updates表示slave將復制事件寫進自己的二進制日志
log_slave_updates=1  
#防止改變數據(除了特殊的線程)
read_only=1

如果Slave為其它Slave的Master時,必須設置bin_log.配置完成后重啟mysql.

完成Master和Slave鏈接

一、初始化數據
保證Master和Slave除不同步的數據庫,其他庫的數據一致
二、查詢Master狀態
在Master中執行

mysql> show master status\G
*************************** 1. row ***************************File: edu-mysql-bin.000001Position: 120Binlog_Do_DB: Binlog_Ignore_DB: mysql
Executed_Gtid_Set: 
1 row in set (0.00 sec)

記錄下返回結果的File列和Position列的值

三、Slave中設置Master信息

在Slave中執行

change master to master_host='192.168.100.70', master_user='slave', master_password='123456', master_port=3306, \
master_log_file='edu-mysql-bin.000001', master_log_pos=120, master_connect_retry=30;#命令解釋:
#Master的IP地址
master_host=’192.168.100.70′ #用于同步數據的用戶(在Master中授權的用戶)
master_user=’slave’ #同步數據用戶的密碼
master_password=’123456′ #Master數據庫服務的端口
master_port=3306 #指定Slave從哪個日志文件開始讀復制數據(Master上執行命令的結果的File字段)
master_log_file=’edu-mysql-bin.000001′ #從哪個POSITION號開始讀(Master上執行命令的結果的Position字段)
master_log_pos=120#當重新建立主從連接時,如果連接建立失敗,間隔多久后重試。單位為秒,默認設置為60秒,同步延遲調優參數。
master_connect_retry=30 

四、查看主從同步狀態

在Slave中執行命令

show slave status;  

可看到SlaveIOState為空, SlaveIORunning和SlaveSQLRunning是No,表明Slave還沒有開始復制過程。相反SlaveIORunning和SlaveSQLRunning是Yes表明已經開始工作了.

五、開啟主從同步

在Slave中執行命令

start slave;  

查詢查看主從同步狀態,會發現SlaveIORunning和SlaveSQLRunning是Yes了,表明開啟成功。

參考文檔:

? ? ? ? ? ? ?http://mp.weixin.qq.com/s/yuVNWcs8xeGqDRrFnIyugQ

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259123.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259123.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259123.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

opengl 如何加陰影_動漫嘴唇厚涂如何繪制?厚涂嘴唇正確畫法

動漫嘴唇厚涂如何繪制?厚涂嘴唇正確畫法!嘴巴怎么畫?畫嘴巴真的很考驗一個畫師功力,好看的嘴巴生動而豐滿,可以給整幅畫作添上亮點,而畫的不好的嘴巴呢,就容易把畫面整體的風格打破。那么零基礎…

位運算

我們復習一下位運算,這里介紹一下(& ,|, ^)的用途。 按位與 ------------& 規則: 0&00 0&10 1&0 0 1&11 ( 兩位為1,才是1)作用: 清零與保位。通常用來將特定的位清零&…

詳解JMeter函數和變量

詳解JMeter函數和變量(1) JMeter函數可以被認為是某種特殊的變量,它們可以被采樣器或者其他測試元件所引用。函數調用的語法如下: ${__functionName(var1,var2,var3)} 其中,__functionName匹配被調用的函數名稱。用圓括…

信號反射

突然想起來前幾天調試CAN通訊的時候出現的BUG,那就是傳說中的“信號反射”,也有稱“振鈴”的。錯誤剛出現的時候沒有意識過來,還說怎么出現重復出現這么多條消息呢?光在書本上看到過這個概念,沒有“實物”與之對應起來…

hdu 5199 map或二分或哈希

題目描述:給出n棵樹的高度,每棵樹上都站著一只鳥,槍手Jack站在最左邊那棵樹的左邊對鳥進行射擊,當Jack在高度為H的地方向右發射一顆子彈的時候,高度為H的樹上的鳥兒就會掉落(注:其他樹上的鳥兒不…

數字電路實驗怎么接線視頻講解_家庭影院中音箱、功放、投影機、4K播放機不知道怎么連接?手把手教你...

家庭影院中音箱、功放、投影機、4K播放機不知道怎么連接?手把手教你有不少用戶收到從家庭影院器材之后,表示完全不會連接。翻看說明書也覺得頭大,知識太多,然而卻很難找到要點。今天主要跟大家講講如何連接音箱、功放、投影機和影…

.NET開發過程中的全文索引使用技巧之Solr

前言:相信許多人都聽說過.net開發過程中基于Lucene.net實現的全文索引,而Solr是一個高性能,基于Lucene的全文搜索服務器。同時對其進行了擴展,提供了比Lucene更為豐富的查詢語言,同時實現了可配置、可擴展并對查詢性能…

關于字符的讀入與輸出

在筆試中,經常見到字符的讀入與輸出的題目。逆序打印輸入時最常見、最基本的考題,復雜點的就是統計單詞、逆序打印單詞之類的。難點是如何判斷輸入的結束,如果用getchar函數,其輸入結束符為EOF(其打印值為-1&#xff0…

修正discuz發帖首次換行無效的問題

找遍了百度和google都沒有解決方案,連discuz官方都沒有出來解決,至今其官網仍有這個問題。 那就自己動手解決吧,順手打個補丁。雖然走了小路,但是能解決問題。 解決方案:修改static/js/bbcode.js 找到 html2bbcode()方…

auto.js停止所有線程_Java線程與并發編程實踐:深入理解volatile和final變量

同步有兩種屬性:互斥性和可見性。synchronized關鍵字與兩者都有關系。Java同時也提供了一種更弱的、僅僅包含可見性的同步形式,并且只以volatile關鍵字關聯。假設你自己設計了一個停止線程的機制(因為無法使用Thread不安全的stop()方法))。清單1中Thread…

項目實例改編:利用structs2的action 實時顯示圖片、pdf和其他內容的框架抽取。(轉)...

轉自:http://www.verydemo.com/demo_c167_i1382.html 針對:預覽文件(圖片,PDF)文件來源為action中的inputStream 重點: structs2的action的配置 action的寫法和結果類型 resulttype的寫法 網頁上實…

零碎的小知識點 ----------C# ToString()函數注意事項

C#中存在著大量的字符串操作,有專門的string類,各種各種的方法,其中使用最為頻繁的方法為ToString(),用起來很是順手,但是這里存在一個很大的問題,空字符是不能用ToString方法轉換的,不然就會報…

ios越獄系統UIGestureRecognizer事件截獲問題

越獄的機器給self.view設置一個UITapGestureRecognizer,這貨就把所有的點擊事件全截獲了,比如某個按鈕,點擊就沒效果.普通系統是沒有問題的. 因此要給UIGestureRecognizer設置delegate并且在其中對touch的view進行分別處理 比如要讓按鈕功能正常使用: 1 #pragma mark - UIGestu…

開始Go開發之旅-Golang架構師之路系列實戰

2019獨角獸企業重金招聘Python工程師標準>>> 作者: gomaster.me(馮琪超) 系列:Golang架構師之路 巧婦難做無米之炊,golang sdk就是gopher的大米 下載golang 點擊 官網下載golang sdk 根據不同系統,官網下載鏈接會選擇相應的平臺進行鏈接跳轉&…

delete與delete[]的區別

一直對C中的delete和delete[]的區別不甚了解,今天遇到了,上網查了一下,得出了結論。做個備份,以免丟失。 C告訴我們在回收用 new 分配的單個對象的內存空間的時候用 delete,回收用 new[] 分配的一組對象的內存空間的時…

event對應的各種坐標

IE8不支持的PageXY 相對于整個頁面鼠標的位置 包括溢出的部分 event.pageX; event.pageY; 所有瀏覽器支持的: 相對于當前瀏覽器窗口可視區域的坐標event.clientX;event.clientY; 相對于當前屏幕(和瀏覽器窗口大小無關)的坐標event.screenX;…

安卓9.0官方系統升級包_華為、榮耀公布可升級安卓10.0機型,你的手機在名單之內嗎?...

在近兩個月以前,美方將華為關進了小黑屋,隨后谷歌也將華為旗下的機型移出了安卓10.0升級名單,這一波操作之后,引起了不小的“恐慌”,許多華為用戶也在擔心是否還能正常使用安卓系統服務,不過,讓…

2. Mysql數據庫的入門知識

2. Mysql數據庫的入門知識 (1)打開Windows系統提供的服務查看相應的服務。 (2)在Windows任務管理器的進程中查看 (3)使用命令行管理windows的Mysql數據庫服務。 Net start 服務名 Net stop 服務名 mysql -h…

十月讀書心得

1.sizeof與strlen的區別。 #include <iostream> using namespace std; void main() {cout << sizeof("hello") << endl;}答案&#xff1a; 6原因&#xff1a; “hello”{‘h’,e,l,l,o,\0};共六個字節。 那么sizeof與strlen有什么區別呢&#xff…

nginx php-fpm 輸出php錯誤日志(轉)

nginx是一個web服務器&#xff0c;因此nginx的access日志只有對訪問頁面的記錄&#xff0c;不會有php 的 error log信息。 nginx把對php的請求發給php-fpm fastcgi進程來處理&#xff0c;默認的php-fpm只會輸出php-fpm的錯誤信息&#xff0c;在php-fpm的errors log里也看不到ph…