資料庫主從

来源:https://www.cnblogs.com/forever662436/archive/2018/11/05/9910982.html
-Advertisement-
Play Games

1. 主從複製1.1. mysql主從的原理1.1.1. Replication 線程Mysql的 Replication 是一個非同步的複製過程(mysql5.1.7以上版本分為非同步複製和半同步兩種模式),從一個 Mysql instace(我們稱之為 Master)複製到另一個 Mysql ins ...


1. 主從複製
1.1. mysql主從的原理
1.1.1. Replication 線程
Mysql的 Replication 是一個非同步的複製過程(mysql5.1.7以上版本分為非同步複製和半同步兩種模式),從一個 Mysql instace(我們稱之為 Master)複製到另一個 Mysql instance(我們稱之 Slave)。在 Master 與 Slave 之間的實現整個複製過程主要由三個線程來完成,其中兩個線程(Sql線程和IO線程)在 Slave 端,另外一個線程(IO線程)在 Master 端。

要實現 MySQL 的 Replication ,首先必須打開 Master 端的Binary Log(mysql-bin.xxxxxx)功能,否則無法實現。因為整個複製過程實際上就是Slave從Master端獲取該日誌然後再在自己身上完全 順序的執行日誌中所記錄的各種操作。打開 MySQL 的 Binary Log 可以通過在啟動 MySQL Server 的過程中使用 “—log-bin” 參數選項,或者在 my.cnf 配置文件中的 mysqld 參數組([mysqld]標識後的參數部分)增加 “log-bin” 參數項。

1.1.2. MySQL 複製的基本過程:
1.Slave 上面的IO線程連接上 Master,並請求從指定日誌文件的指定位置(或者從最開始的日誌)之後的日誌內容;

Master 接收到來自 Slave 的 IO 線程的請求後,通過負責複製的 IO 線程根據請求信息讀取指定日誌指定位置之後的日誌信息,返回給 Slave 端的 IO 線程。返回信息中除了日誌所包含的信息之外,還包括本次返回的信息在 Master 端的 Binary Log 文件的名稱以及在 Binary Log 中的位置;

Slave 的 IO 線程接收到信息後,將接收到的日誌內容依次寫入到 Slave 端的Relay Log文件(mysql-relay-bin.xxxxxx)的最末端,並將讀取到的Master端的bin-log的文件名和位置記錄到master- info文件中,以便在下一次讀取的時候能夠清楚的高速Master“我需要從某個bin-log的哪個位置開始往後的日誌內容,請發給我”

Slave 的 SQL 線程檢測到 Relay Log 中新增加了內容後,會馬上解析該 Log 文件中的內容成為在 Master 端真實執行時候的那些可執行的 Query 語句,併在自身執行這些 Query。這樣,實際上就是在 Master 端和 Slave 端執行了同樣的 Query,所以兩端的數據是完全一樣的。

1.2. db01
1.2.1. 在主庫上開啟的binlog日誌
[root@db01 ~]# cat /etc/my.cnf
[mysqld]
log-bin
server-id=160
1.2.2. 重啟資料庫
[root@db01 ~]# systemctl restart mysqld
1.2.3. 授權,允許能夠遠程連接的主機(replicaiton)
mysql> grant replication slave, replication client on *.* to 'repl'@'172.16.1.52' identified by 'All123.com';
1.2.4. 導出主庫當前數據
[root@db01 ~]# mysqldump -uroot -pBgx123.com \
--all-databases \
--single-transaction \
--master-data=1 \
--flush-logs > /root/db-$(date +%F)-all.sql
1.2.5. 拷貝備份的數據至從庫
[root@db01 ~]# scp db-2018-10-23-all.sql [email protected]:/tmp
1.3. db02
在從庫上啟動資料庫,然後倒入數據

1.3.1. 檢查是否能使用遠程賬戶登錄
[root@slave ~]# mysql -h 172.16.1.51 -urep -pRep123.com
1.3.2. 修改配置文件/etc/my.cnf,從需開啟binlog
server-id=161
1.3.3. 重啟MySQL的資料庫服務
systemctl restart mysqld
1.3.4. 登陸的MySQL資料庫[密碼中填寫上一步過濾的密碼]
[root@web02 ~]# mysql -uroot -p$(awk '/temporary password/{print $NF}' /var/log/mysqld.log)
1.3.5. 重新修改資料庫密碼
mysql> ALTER USER 'root'@'localhos``t' IDENTIFIED BY 'Bgx123.com';
1.3.6. 導入數據,追主的bin_log
[root@db02 ~]# mysql -uroot -pBgx123.com < /tmp/db-2018-10-23-all.sql
1.3.7. 指向主,無需指定binlogfile和POS
mysql> change master to
master_host='172.16.1.51',
master_user='repl',
master_password='All123.com';
1.3.8. 啟動slave線程
mysql> start slave;
1.3.9. 查看MySQL的主從狀態
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.16.1.51
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: db01-bin.000002
Read_Master_Log_Pos: 6671
Relay_Log_File: db02-relay-bin.000004
Relay_Log_Pos: 6882
Relay_Master_Log_File: db01-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、線程開銷 操作系統創建線程是有代價的,其主要開銷在下麵列舉出來了。 記憶體開銷 1. 線程內核對象 擁有線程描述屬性與線程上下文,線程上下文占用的記憶體空間為 x86 架構 占用 700 位元組、x64 架構 1240 位元組 、ARM 架構 350 位元組。 2. 線程環境塊(TEB) TEB 消耗一個 ...
  • 一、什麼是運行時序列化 序列化的作用就是將對象圖(特定時間點的對象連接圖)轉換為位元組流,這樣這些對象圖就可以在文件系統/網路進行傳輸。 二、序列化/反序列化快速入門 一般來說我們通過 FCL 提供的 對象就可以將一個對象序列化為位元組流進行存儲,或者通過該 Formatter 將一個位元組流反序列化為一 ...
  • 在上一篇緒中,已經介紹了整個項目的情況下了,接下來就是開始一步步做起來了。 首先:先整個我們的Job任務表,以及Job執行日誌表。SQL如下: 1 drop table if exists job_info; 2 create table job_info 3 ( 4 id int not null ...
  • more命令,功能類似 cat ,cat命令是整個文件的內容從上到下顯示在屏幕上。 more會以一頁一頁的顯示方便使用者逐頁閱讀,而最基本的指令就是按空白鍵(space)就往下一頁顯示,按 b 鍵就會往回(back)一頁顯示,而且還有搜尋字串的功能 。more命令從前向後讀取文件,因此在啟動時就載入 ...
  • findfs 查找指定捲標或者UUID的文件系統對應的設備文件。findfs將搜索系統中的磁碟,尋找具有標簽匹配標簽或與UUID相等的文件系統。如果找到文件系統,文件系統的設備名稱將列印在stdout上。 此命令的適用範圍:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUS ...
  • 昨晚更新了一下內核,今晚開機就無法進系統了...提示如下圖: 解決方案:開機啟動時按Esc,然後選擇下麵的舊版本的內核啟動即可。 (成功進入系統後,你可以選擇改變開機預設選擇的內核)。 uname -r 查看當前內核版本 rpm -qa|grep kernel 查看系統已安裝的內核 vim /boo ...
  • 什麼是Shell     簡單來說Shell其實就是一個 命令解釋器 ,而它的作用就是解釋並執行用戶輸入的命令及程式。用戶每輸入一條命令,Shell就解釋執行一次。這種方式很容易讓大家想起在Windows環境中使用的command命令,我們在cmd視窗輸入一條命令,按下Enter ...
  • nl命令在linux系統中用來計算文件中行號。nl 可以將輸出的文件內容自動的加上行號!其預設的結果與 cat n 有點不太一樣, nl 可以將行號做比較多的顯示設計,包括位數與是否自動補齊 0 等等的功能。 一.命令格式: nl [參數]... [文件]... 二.命令參數: |參數|描述| | ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...