Linux搭建MySQL主從

来源:https://www.cnblogs.com/wzc6688/archive/2019/10/16/11689357.html
-Advertisement-
Play Games

實現目標 搭建兩台MySQL伺服器(一主一從),一臺作為主伺服器,一臺作為從伺服器,主伺服器進行寫操作,從伺服器進行讀操作。 工作流程概述 主伺服器: 開啟二進位日誌 配置唯一的server id 獲得master二進位日誌文件名及位置 創建一個用於slave和master通信的用戶賬號 從伺服器: ...


實現目標
搭建兩台MySQL伺服器(一主一從),一臺作為主伺服器,一臺作為從伺服器,主伺服器進行寫操作,從伺服器進行讀操作。

工作流程概述

  • 主伺服器:
    • 開啟二進位日誌
    • 配置唯一的server-id
    • 獲得master二進位日誌文件名及位置
    • 創建一個用於slave和master通信的用戶賬號
  • 從伺服器:
    • 配置唯一的server-id
    • 使用master分配的用戶賬號讀取master二進位日誌
    • 啟用slave服務

準備工作

  • 主從資料庫版本最好一樣
  • 主從資料庫內數據保持一致
  • 主資料庫:192.168.244.201 : 3306
  • 從資料庫:192.168.244.202 : 3306

開始配置

  1. 配置 Master 主伺服器
  • 找到主資料庫的配置文件my.cnf(Windows中是my.ini),我的在/etc/my.cnf
    在[mysqld]部分插入如下兩行:
[mysqld]
log-bin=mysql-bin #開啟二進位日誌
server-id=201 #設置server-id,唯一值,標識主機
  • 重啟mysql服務
    systemctl restart mysqld
  • 創建用於主從同步的賬號/密碼
    進入MySQL : mysql -u root -p 回車輸入密碼。
    我創建的用戶名叫“master_root”密碼是“MySql@6688”
    【註意:由於之前把密碼改成支持簡單密碼123456的了,導致這裡新建用戶出現一些問題,說密碼不符合策略等,後來乾脆我重裝mysql,使用預設複雜密碼了,就沒有這麼多問題了。習慣就好其實。】
    下麵我都用的%,沒有寫具體ip,你可以自行決定。
#創建用戶(IP為可訪問該master的IP,任意IP就寫'%')
mysql> CREATE USER 'master_root'@'192.168.244.202' IDENTIFIED BY 'MySql@6688';
#分配許可權(IP為可訪問該 master的IP,任意IP就寫'%')
mysql> GRANT REPLICATION SLAVE ON *.* TO 'master_root'@'192.168.244.202';
 #刷新許可權
mysql>flush privileges;  
  • 查看master狀態,記錄二進位文件名(mysql-bin.000001)和位置(154).後面配從庫要用。
    show master status;
    6de9f850cb46b69fc42785e5a00b3cee.png
  1. 配置 Slave 主伺服器
  • 修改my.cnf 文件。
    vim /etc/my.cnf
[mysqld]
server-id=202 #設置server-id,唯一值,唯一標識從庫
  • 重啟mysql服務 systemctl restart mysqld
  • 登錄進入mysql,執行同步sql語句(主伺服器名,用於主從的用戶名,密碼,二進位文件名,位置)
mysql> CHANGE MASTER TO
    -> MASTER_HOST='192.168.244.201',
    -> MASTER_USER='master_root',
    -> MASTER_PASSWORD='MySql@6688',
    -> MASTER_LOG_FILE='mysql-bin.000001',
    -> MASTER_LOG_POS=154;
  • 啟動slave同步進程
    mysql>start slave;
  • 查看slave狀態 show slave status\G
    註意後面不要分號;否則最後一行顯示報錯如下:
    ERROR: No query specified
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.244.201
                  Master_User: master_root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 154
               Relay_Log_File: localhost-relay-bin.000007
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000002
             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: 154
              Relay_Log_Space: 531
              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: 201
                  Master_UUID: 7dd766bb-f005-11e9-81ba-000c29a69f1b
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.01 sec)

我也不知道為啥我這裡這麼長一段,網上的教程都是好短一段。管他呢,反正到這也對了。
當Slave_IO_Running和Slave_SQL_Running都為YES的時候就表示主從同步設置成功了。
特別註意:

  • 可能遇坑:Slave_IO_Running :no ,並不是yes,為什麼呢??
    打開mysql的錯誤日誌,不出意外在最後幾行(看時間最新的記錄),最後有這麼一行:
    2019-10-16T12:59:09.987976Z 1 [ERROR] Slave I/O for channel '': Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: 1593
    意思master和slave的UUID相同了,應該不同才對的【如果你也是克隆的主機生成從機,就會出現這個問題】
    解決辦法:去mysql的data目錄中,找到auto.cnf文件(不知道data目錄的去my.cnf文件中看‘datadir=/var/lib/mysql’),然後刪除該文件,接著重啟mysql服務,就會自動重新生成一個新的auto.cnf文件(註意,此時操作的都是slaver,不是master。)

接下來就可以進行一些驗證了,比如在主master資料庫的test資料庫的一張表中插入一條數據,在slave的test庫的相同數據表中查看是否有新增的數據即可驗證主從複製功能是否有效,還可以關閉slave(mysql>stop slave;),然後再修改master,看slave是否也相應修改(停止slave後,master的修改不會同步到slave),就可以完成主從複製功能的驗證了。

還可以用到的其他相關參數:

master開啟二進位日誌後預設記錄所有庫所有表的操作,可以通過配置來指定只記錄指定的資料庫甚至指定的表的操作,具體在mysql配置文件的[mysqld]可添加修改如下選項:

不同步哪些資料庫

binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema

只同步哪些資料庫,除此之外,其他不同步

binlog-do-db = game
如之前查看master狀態時就可以看到只記錄了test庫,忽略了manual和mysql庫。


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

-Advertisement-
Play Games
更多相關文章
  • 基於Linux的kfifo移植到STM32(支持os的互斥訪問) 關於kfifo kfifo是內核裡面的一個First In First Out數據結構,它採用環形迴圈隊列的數據結構來實現;它提供一個無邊界的位元組流服務,最重要的一點是,它使用並行無鎖編程技術,即當它用於只有一個入隊線程和一個出隊線程 ...
  • 隊列的概念 在此之前,我們來回顧一下隊列的基本概念: 隊列 (Queue):是一種先進先出(First In First Out ,簡稱 FIFO)的線性表,只允許在一端插入(入隊),在另一端進行刪除(出隊)。 隊列的特點 類似售票排隊視窗,先到的人看到能先買到票,然後先走,後來的人只能後買到票 隊 ...
  • 本文介紹一種Cortex M內核中的精確延時方法 前言 為什麼要學習這種延時的方法? 1. 很多時候我們跑操作系統,就一般會占用一個硬體定時器——SysTick,而我們一般操作系統的時鐘節拍一般是設置100 1000HZ,也就是1ms——10ms產生一次中斷。很多裸機教程使用延時函數又是基於SysT ...
  • STM32之串口DMA接收不定長數據 引言 在使用stm32或者其他單片機的時候,會經常使用到串口通訊,那麼如何有效地接收數據呢?假如這段數據是不定長的有如何高效接收呢? 同學A:數據來了就會進入串口中斷,在中斷中讀取數據就行了! 中斷就是打斷程式正常運行,怎麼能保證高效呢?經常把主程式打斷,主程式 ...
  • 好用的軟體/終端 命令別名 ip切換 imgcat 終端查看圖片 autojump 目錄快捷跳轉 titan 密碼記錄工具 tldr man 的簡單版,線上查詢linux命令示例 ssh 別名/免密碼登錄 ps 行含義 htop awk parallels descktop Jump Desktop ...
  • 一、打開CMD,進入想安裝的目錄,輸入如下圖所示,安裝一個blog的項目: 二、進入指定目錄即可看到生成的blog項目,如下圖: ...
  • 我們使用 linux 文件系統擴展屬性,能夠對linux文件系統進行進一步保護;從而給文件 賦予一些額外的限制;在有些情況下,能夠對我們的系統提供保護; chattr命令用來改變文件屬性。這項指令可改變存放在ext2文件系統上的文件或目錄屬性,這些屬性共有以下8種模式:詳細作用,可以查看man手冊 ...
  • 導讀 第一章:初識Hadoop 第二章:更高效的WordCount 第三章:把別處的數據搞到Hadoop上 第四章:把Hadoop上的數據搞到別處去 第五章:快一點吧,我的SQL 第六章:一夫多妻制 第七章:越來越多的分析任務 第八章:我的數據要實時 第九章:我的數據要對外 第十章:牛逼高大上的機器 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...