MySQL的主從復制云棲社區_MySQL-主從復制

前言

前篇說了作為運維在數據庫塊最起碼要會兩大技能,今天來說說第二技能--主從復制

隨著業務的增長,一臺數據庫服務器以滿足不了需求了,負載過重,這時候就需要減壓,實現負載均衡讀寫分離,一主一從或一主多從

主服務器只管寫,從服務器管讀,從而提高效率減輕壓力。

主從復制分類:

主從同步:當用戶寫數據主服務器必須和從服務器同步一致了才告訴用戶寫入成功,等待時間太長

主從異步:只要用戶訪問寫數據主服務器寫入立馬返回給用戶成功

主從半步同步:當用戶訪問寫數據主服務器寫入并同步其中一個從服務器就返回給用戶成功

備注:通常都是使用的主從異步,根據環境需求來選擇,想要數據更安全選擇半步同步

主從復制注意事項

注意:selinux策略、防火墻

1、開啟二進制日志

2、設置二進制記錄格式為ROW(推薦)

3、設置唯一server-id

4、設置datadir中日志名稱(可選)

5、創建有復制權限的用戶賬號

6、如果要啟用級聯復制,需要在從服務器啟用

7、限制從服務器為只讀

8、禁止主機名解析

9、高可用從服務器要加上

10、如何保證主從復制的事務安全(根據需求添加)

1)在master節點啟用參數:

2)如果用到的為InnoDB存儲引擎:

3)在slave節點啟用參數:

主從復制原理

如圖

a483dc5f48c8f1ad7aebc82159a47a23.png

備注:

主從同步有延遲,為什么?因為它時是單線程傳送日志

實戰-實現主從復制+高可用

準備工作

準備4臺主機67、17、37、57,分別充當角色為管理主機、主服務器、2個從服務器

安裝包:和主服務器同版本的mysql數據庫包、和高可用安裝包

mha4mysql-manager

mha4mysql-node

比如主服務器已經運行了1年了,發現滿足不了需求了,需要搭建從服務器,我們先從搭建從服務器開始

備注:首先確保主服務器開啟了二進制日志

確認二進制文件已啟動

MariaDB [(none)]> show variables like '%log_bin%'

確認server-id

MariaDB [(none)]> show variables like 'server%';

主服務器設置

1、創建可用于復制的賬號

2、完全備份數據(用于在從服務器上來還原)

備注:備份時的某表的狀態

51a7adfddc7b0df8dfe47175d9634b80.png

為了下面的實驗測試在這里我們備份玩再增加一條記錄

insert hellodb.students (name,age)values('gaoda001',20);

e1aee6d5a71933b6874a0eb0b885616f.png

3、傳送到從服務器37、57上

scp…

37、57(從)服務器設置

1、配置文件

1)開啟二進制日志

2)設置server-id(要和主服務id區分開)

備注:57設置為3 只要他們不相同就可

3)從服務器設置為只讀

4)禁止主機名解析

5)數據和索引分開存放

6)重啟或啟動服務

備注:以防萬一可以查看下最重要的兩項開啟了沒有

2、實現復制

1)進入數據庫查找同步代碼

13eca81dd4eea295aac5e4d3f9626dd9.png

2)根據情況編輯上圖上的信息

注:起始位置可以在完全備份文件里查看

兩種方式:

① 先還有完全備份數據再拿以上信息編輯下,在數據庫中執行

② 直接把上面的信息添加到完全備份文件里

下面用第二種方式來操作如圖

70171b2ad9b4ad0a1ee216118b9f9dd8.png

3)37主機還原并查看

mysql < all-2018-08-08.sql

6e3abddb449a482f2e3f59743e1d25d4.png

備注:以還原到備份時的狀態

主服務器備份完有用戶新加數據對吧,下面開啟主從復制看看能不能復制過來最新的數據

4)查看復制狀態

MariaDB [(none)]> show slave status\G

*************************** 1. row ***************************

Slave_IO_State:

Master_Host: 192.168.43.17

Master_User: repluser

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000005

Read_Master_Log_Pos: 385 #從主服務器讀取到的位置

Relay_Log_File: centos7_05-relay-bin.000001

Relay_Log_Pos: 4

Relay_Master_Log_File: mysql-bin.000005

Slave_IO_Running: No #表示還沒開啟

Slave_SQL_Running: No #表示還沒開啟

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 385

Relay_Log_Space: 256

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: NULL ##注意這個 表示同步時間差

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 0

Master_SSL_Crl:

Master_SSL_Crlpath:

Using_Gtid: No

Gtid_IO_Pos:

Replicate_Do_Domain_Ids:

Replicate_Ignore_Domain_Ids:

Parallel_Mode: conservative

SQL_Delay: 0

SQL_Remaining_Delay: NULL

Slave_SQL_Running_State:

1 row in set (0.03 sec)

5)開啟主從復制并查看狀態

start slave;

MariaDB [(none)]> show slave status\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.43.17

Master_User: repluser

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000005

Read_Master_Log_Pos: 608

Relay_Log_File: centos7_05-relay-bin.000003

Relay_Log_Pos: 778

Relay_Master_Log_File: mysql-bin.000005

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 608

Relay_Log_Space: 1092

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 1

Master_SSL_Crl:

Master_SSL_Crlpath:

Using_Gtid: No

Gtid_IO_Pos:

Replicate_Do_Domain_Ids:

Replicate_Ignore_Domain_Ids:

Parallel_Mode: conservative

SQL_Delay: 0

SQL_Remaining_Delay: NULL

Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it

1 row in set (0.00 sec)

6)查看表確認有沒有從主服務器同步最新的數據

08af9a31a0173319acd91f2fe77b3632.png

7)57(從服務器同樣的設置)

備注:目前現實了異步同步復制,下面來看半同步設置

半同步設置

主服務器設置

1、首先在主服務器上安裝插件

備注:

show plugins; ##查看當前系統中的插件列表

UNINSTALL PLUGIN rpl_semi_sync_master;##卸載插件

2、查看插件狀態

37d61e81a414f689688ca9d1a8440440.png

3、開啟

備注:最好寫在配置文件中

291170c4156ddcc40e9bd30610bc1fc3.png

4、查看插件變量狀態

SHOW GLOBAL STATUS LIKE '%semi%';

0f0a2b9a4811159210ef6faae674f64e.png

備注:這里記錄有幾個半同步主機

從服務器設置

1、安裝插件

2、啟動插件

備注:同樣建議寫在配置文件中

81dfade2ce01dd7bf4b801f1fe6b1491.png

3、從服務器查看改插件是否開始工作

SHOW GLOBAL STATUS LIKE '%semi%';

cfc1c85b62f5d02530c410bca1816af1.png

為什么沒有開始工作?

因為是先開啟的主從復制再安裝的次插件

所以這種情況下,先停止從服務器的主從復制功能

1)停止:

2)再次開啟主從復制

3)再去查看

d926dd959c05a0175536a08452aa51c3.png

備注:現在就啟用了半同步功能,下面開始搭建高可用,實現主服務器宕機自動提升從服務器當主

MHA高性能

備注:四臺主機之間必須是ssh基于key驗證登陸,所以要先實現ssh互相鏈接

步驟:

ssh-keygen

cd .ssh

ssh-copy-id 192.168.43.67

把.ssh目錄考到其他主機

1、在主服務器上創建管理者賬號

2、在67管理主機上安裝以下包

3、在17、37、57安裝如下包

mha4mysql-node

4、在管理主機創建管理節點

根據上面創建的信息填寫

[

備注:

candidate_master=1:是說主服務器宕機了帶有這項的主機有機會當主

5、測試

1)ssh協議

2、檢查復制

3、啟動(默認前臺執行)

212ae0ff548880046d02d707ba908a4f.png

備注:如果你是編譯安裝在/etc/mastermha/app1.cnf配置文件中指定日志路徑,最好主從服務器數據庫設置的位置都是一致的。

846c1a7d1d1012eb379f85d5664d854e.png

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

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

相關文章

數據存儲(SharedPreferences存儲)

SharedPreferences是通過 鍵值對 的方式存儲數據SharedPreferences是通過鍵值對的方式存儲的 將數據存儲到SharedPreferences中有3種方法&#xff1a;1.Context類中的getSharedPreferences()方法2.Activity類中的getPreferences()方法3.PreferencesManager類中的getDefaultShar…

編程程序的名稱要記住嗎_學習編程時要記住的5件事

編程程序的名稱要記住嗎by Kurt由庫爾特 學習編程時要記住的5件事 (5 Things to Remember When You’re Learning to Program) Learning to program is challenging. Aside from choosing a language or setting up a development environment that you know nothing about, t…

mysql 數據分析的步驟_數據分析8個主要步驟

# 在對數據進行分析時&#xff0c;主要細分為明確目標、應用思維和如下8個具體步驟&#xff1a;1、讀取數據2、清洗數據3、操作數據4、轉換數據5、整理數據6、分析數據7、展現數據8、總結報告接下來將介紹使用python來具體處理數據&#xff0c;包括上面幾個步驟的實現&#xff…

python學習的一個定位_python學習之——selenium元素定位

web自動化測試按步驟拆分&#xff0c;可以分為四步操作&#xff1a;定位元素&#xff0c;操作元素&#xff0c;獲取返回結果&#xff0c;斷言(返回結果與期望結果是否一致)&#xff0c;最后自動出測試報告。其中定位元素尤為關鍵&#xff0c;此篇是使用webdriver通過頁面各個元…

Invoker

Invoker 是實體&#xff0c;dubbo外其他對象的轉化。轉載于:https://www.cnblogs.com/gtaxmjld/p/9786894.html

如何在開源社區貢獻代碼_如何在15分鐘內從瀏覽器獲得您的第一個開源貢獻

如何在開源社區貢獻代碼Matt Mullenweg, founder of Automattic, recently offered this advice to aspiring developers: “Contribute to open source.”Automattic的創始人Matt Mullenweg最近向有抱負的開發人員提供了以下建議 &#xff1a;“ 致力于開源。 ” Mullenweg —…

小心情。

從一開始學習html到現在的nodejs&#xff0c;也有段時間了&#xff0c;那個時候什么都不知道&#xff0c;記得一兩年之前還沉迷在一些網絡技術的圈子里面&#xff0c;每天看著那些大牛&#xff0c;感覺都很是厲害&#xff0c;每一項技術總是那樣的讓我著迷&#xff0c;從易語言…

一、win7下安裝yii2

作者&#xff1a;PHP學習網 出處&#xff1a;http://www.viphper.com/?p1159 本文版權歸作者&#xff0c;歡迎轉載&#xff0c;但未經作者同意必須保留此段聲明&#xff0c;且在文章頁面明顯位置給出原文連接&#xff0c;否則保留追究法律責任的權利。 之前在liunx上安裝過yii…

js獲取瀏覽器滾動條距離頂端的距離

js獲取瀏覽器滾動條距離頂端的距離 一、jQuery獲取的相關方法 jquery 獲取滾動條高度獲取瀏覽器顯示區域的高度 &#xff1a;$(window).height(); 獲取瀏覽器顯示區域的寬度 &#xff1a;$(window).width(); 獲取頁面的文檔高度 &#xff1a;$(document).height(); 獲取頁面的文…

vs dll必須和exe在同一個目錄_Win10系統丟失 .dll 文件的三種解決方案教程

有時候開機或打開一個軟件時&#xff0c;系統會提示無法啟動程序&#xff0c;這是怎么回事呢&#xff1f;這是因為計算機丟失某個或某些dll文件&#xff0c;由于系統本身不存在這些運行庫文件&#xff0c;需要進行添加才能使用該軟件。方法一&#xff1a;下載丟失的.dll文件&am…

datagrid頁面獲取表單一條數據的例子

【問題背景】 最近在做ITOO考評的時候想從頁面獲取表單選中的數據&#xff1a; 【代碼】 在數據網格&#xff08;datagrid&#xff09;組件包含兩種方法來檢索選中行數據&#xff1a; getSelected&#xff1a;取得第一個選中行數據&#xff0c;如果沒有選中行&#xff0c;則返回…

utf-8轉換gbk代碼_將代碼轉換為現金-如何以Web開發人員的身份賺錢并講述故事。...

utf-8轉換gbk代碼by Kurt由庫爾特 將代碼轉換為現金-如何以Web開發人員的身份賺錢并講述故事。 (Turning code to cash — How to make money as a Web Developer and live to tell the tale.) So you just learnt to code. You’re eager and anyone who can’t code thinks …

Spring+SpringMVC+MyBatis+easyUI整合基礎篇(十)SVN搭建

前言 前面一篇文章講了一下版本控制&#xff0c;但其實這一篇并沒有打算講細節的&#xff0c;感覺應該自己去動手弄一下&#xff0c;后來考慮了一下&#xff0c;版本控制真的挺重要的&#xff0c;如果自己實在搭建不好反而不去使用的話&#xff0c;真的有點可惜&#xff0c;當然…

AHK-UMSS框架 (AHK通用修飾鍵解決方案,任何鍵都是修飾鍵)

AHK-UMSS框架 (AHK通用修飾鍵解決方案,任何鍵都是修飾鍵) 1 #Warn2 #NoEnv ; # 禁用環境變量檢查:不檢查空變量是否為"環境變量"&#xff0c;可以極大地提高效率3 #Hotstring EndChars ◎ ; # 熱字串終止符號設置:只把空格作為終止符,(文檔上所說是不能單獨用空格的…

flask-sqlalchemy mysql_Flask SQLAlchemy連接到MySQL數據庫

設置代碼&#xff1a;我正在構建一個帶有AngularJS前端的基本Flask應用程序&#xff0c;目前我需要連接到我用Godaddy phpmyadmin托管的MySQL數據庫。這是我的一部分__init__.pyfrom flask import Flaskfrom flask.ext.sqlalchemy import SQLAlchemy# Create instnace called a…

有沒有編碼的知識圖譜_沒有人告訴您關于學習編碼的知識-以及為什么如此困難...

有沒有編碼的知識圖譜by Joyce Akiko通過喬伊斯明子 沒有人告訴您關于學習編碼的知識-以及為什么如此困難 (What Nobody Tells You About Learning To Code — And Why That Makes It So Hard) Are you familiar with the article Why Learning to Code is So Damn Hard?您是…

Node.js之HTPP URL

幾乎每門編程語言都會包括網絡這塊,Node.js也不例外。今天主要是熟悉下Node.js中HTTP服務。其實HTTP模塊是相當低層次的&#xff0c;它不提供路由、cookie、緩存等,像Web開發中不會直接使用,但還是要熟悉下&#xff0c;這樣也方便以后的學習。 一、統一資源標識符URL 這個是非常…

串口數據波形顯示_【專題教程第6期】SEGGER的J-Scope波形上位機軟件,RTT模式波形上傳可飆到500KB/S...

【專題教程第6期】SEGGER的J-Scope波形上位機軟件&#xff0c;RTT模式波形上傳速度可狂飆到500KB/S左右說明&#xff1a;1、在實際項目中&#xff0c;很多時候&#xff0c;我們需要將傳感器或者ADC的數值以波形的形式顯示。通常的解決辦法是用串口上位機&#xff0c;USB接口上位…

JavaScript-基礎入門.0014.JavaScript內置對象

2019獨角獸企業重金招聘Python工程師標準>>> 簡單介紹: 說明: 內置對象就是不依賴宿主環境在程序執行之前已經存在的對象,不必顯式的實例化內置對象,前面已經介紹了大部分內置對象,而Global和Math兩個單體內置對象比較特殊,所以單獨講. Global對象: 說明: Js中不屬于…

Java中字符串連接符(+)和append的區別

參考鏈接&#xff1a;https://www.jianshu.com/p/849f1d443b3a 文章結構&#xff1a; 第一部分&#xff1a;對的原理進行分析 第二部分&#xff1a; 和 append 循環對比&#xff08;貼出代碼&#xff0c;以及分別循環后的反編譯字節碼&#xff0c;來對兩者進行對比&#xff09;…