Mysql主從分離

一、前言

? ? ? ? 某個應用場景中,在操作數據庫這部分,往往是數據庫的讀取往往大于數據庫的寫入,當讀取數據達到數據庫的瓶頸時,性能下滑,影響數據的寫入,導致整個應用的不可用。為了解決這個問題,這時,引入了 讀寫分離的數據庫架構,多個從庫分攤了讀數據的壓力。

二、什么是讀寫分離?

? ? ? ? 讀寫分離其實就是將數據庫分為主從庫,主庫負責寫入數據,從庫負責讀取數據,主庫與從庫通過 mysql 的 Slave機制進行主從復制。主數據庫只有一個,從數據庫有多個,這是一種常見的數據庫架構。

三、讀寫分離的結構圖

????????

? ? ? ? ?上圖,客戶端訪問服務器,服務器通過 數據庫中間件 或者其他的邏輯,使得[寫入、修改、刪除] 操作 主庫 , 而查詢讀取從庫。

? ? ? ? 主庫生產 binary log 的二進制日志文件,通過 slave 機制,通過連接主庫,讀取 binarylog 生成 中級文件,從數據同步 中級文件,寫入從數據庫,從而實現了 主從數據的同步。

四、前提條件

?????????1、搭建讀寫分離數據庫結構前,讀庫 slave 需要跟寫庫 master 的數據一致。

? ? ? ? ?2、寫數據必須操作主庫

? ? ? ? 3、讀去數據不一定是從庫,因為從庫同步主庫的數據,會有一定的延遲,在延遲內,主從數據可能不一致,因此,在某些特殊的情況下,需要讀取主庫來保證數據的即使型。

????????讀寫分離降低主數據庫的讀壓力,但是并不代表主庫就不允許讀數據了。在一些特殊場景允許讀取主數據庫的數據。

五、環境準備

? ? ? ? ?為了實驗,我這里準備了3臺機器,一臺? window , 2臺 centos 7 的虛擬機。

避免一些不必要問題,推薦主從mysql 版本一致。

主機角色系統mysql版本
192.168.83.1win115.7.26注意開放3306端口
192.168.23.148centos78.0.34

主數據庫:

?從數據庫:

?

?六、配置主數據庫

????????我們配置主數據庫時,只需要生成 binary log 的二進制日志文件? 和創建一個擁有訪問權限的 mysql 用戶 即可,其他的操作不會影響到從數據庫的配置。

? ? ? ? 1、看看一下主數據庫的狀態

? ? ? ? 查看 主庫的狀態。

show master status;

?輸出結果:?

? ? ? ? 從上圖可以看出, 暫時沒有主從的設置。?

? ? ? ? 2、配置文件的設置

????????找到 win 11 下面的 mysql 配置文件? my.ini 。在 配置文件的?[mysqld] 下面增加配置,如下:

#  這里填1 ,可以任意填寫,但是不允許數據庫之間同
server-id=1
# 只備份的數據庫
binlog-do-db=demo_slave
# binlog_ignore_db 表述忽略備份的數據庫
binlog_ignore_db=mysqld
# binary log 二進制日志文件的格式,有三種(statement , row , mixed),可以根據場景選用,mysql默認采用statement,建議使用mixed
binlog_format=mixed
# 二進制文件記錄
log-bin=master-bin
# 生成二進制文件的名稱格式
log-bin-index=master-bin.index

????????把上面的配置復制到 mysql 的配置文件,然后重啟 mysql 服務,在使用 show master status; 查看主庫的配置情況。

主從配置還有很多配置,請自行配置百度。

?重啟之后,你會發現在 mysql 存放數據庫的文件里面出現了 對應的 binary log 文件。

?登錄 MySQL, 查看狀態:

?如果出現上訴結果,則主庫的配置部分已完成。

3、創建主從訪問的用戶

? ? ? ? 1、查看一下用戶

? ? ? ? 2、創建復制用戶?[repl]

-- 創建用戶
create user repl;

?????????3、給[repl]用戶權限

# 給 repl 用戶授權,并設置密碼為  replpwd
# 允許 % 所有服務器訪問
grant replication slave on *.* to 'repl'@'%' identified by'replpwd';

輸出結果:

?七、配置從數據庫

?1、查看從數據庫的slave狀態

# 查看 slave 的狀態
show slave status \G;

?2、查看從數據庫的配置

?

?3、配置文件的設置

?在配置文件 【mysqld】 下面增加配置如下:

#  這里填2 ,可以任意填寫,但是不允許數據庫之間同
server-id=2
# 中繼日志文件的命名格式
relay-log-index=slave-relay-bin.index
# 中繼日志文件的匯總文件
relay-log=slave-relay-bin# 只復制數據庫 , 多個數據庫寫多條
#只復制db1和db2數據庫
; replicate-do-db=db1
; replicate-do-db=db2
replicate-do-db=demo_slave# 忽略復制數據庫 , 多個數據庫寫多條
replicate-ignore-db=mysql

?配置完成后,重啟 mysql 服務,然后查看

?????????配置完成后, mysql 的數據 目錄下 自動生產了? 4個數據文件。

4、鏈接主數據庫

-- 連接數據庫
CHANGE MASTER TOMASTER_HOST='192.168.83.1',MASTER_USER='repl',MASTER_PASSWORD='replpwd',MASTER_PORT=3306,MASTER_LOG_FILE='master-bin.000001',MASTER_LOG_POS=154;-- MASTER_HOST 主數據庫的IP
-- MASTER_USER 主數據庫的用戶
-- MASTER_PASSWORD 主數據庫的用戶密碼
-- MASTER_PORT  主數據庫的端口,必須查看主數據庫服務器是否有開放端口
-- MASTER_LOG_FILE   主數據庫的  binarylog 二進制日志文件
-- MASTER_LOG_POS    主數據庫的  binarylog 二進制日志 的偏移量(主數據庫是多少則填多少)

?啟動 slave

start slave

如果報錯:

ERROR 1872 (HY000): Replica failed to initialize applier metadata structure from the repository

?????????因為從數據庫可能以前配置過,生成過 中繼日志文件,導致 從數據庫 slave 中還記錄著舊數據,這時可以使用 命令

reset slave

重新設置即可。

?查看狀態:

查看數據庫:?

?

?5、檢查從數據庫是否運作正常

?在主數據庫創建 demo_master 數據庫,看看 從數據庫是否同步過來。

?有上圖可知,沒有同步上來。

?

?

?

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

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

相關文章

單片機直驅兩相四線步進電機研究

【本文發布于https://blog.csdn.net/Stack_/article/details/132236329,未經允許不得轉載,轉載須注明出處】 雙極性步進電機(兩相四線步進電機),原理的東西就先不講太多了,還沒搞清楚,邊查資料邊…

jsoup解析html之table表格

jsoup解析html之table表格 jsoup說明 一款Java 的HTML解析器 jsoup 是一款Java 的HTML解析器,可直接解析某個URL地址、HTML文本內容。它提供了一套非常省力的API,可通過DOM,CSS以及類似于jQuery的操作方法來取出和操作數據。 主要功能 從一…

Python Opencv實踐 - 圖像旋轉

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR)#圖像旋轉 #Opencv中的旋轉,首先通過cv.getRotationMatrix2D獲得旋轉矩陣 #cv.getRotationMatrix2D(center,ang…

Mr. Cappuccino的第62杯咖啡——Spring之Bean的生命周期

Spring之Bean的生命周期 Aware接口項目結構項目代碼運行結果源代碼使用場景 InitializingBean接口項目結構項目代碼運行結果源代碼 BeanFactoryPostProcessor接口項目結構項目代碼運行結果源代碼 Bean的生命周期項目結構項目代碼運行結果源代碼 Aware接口 實現Aware接口是為了…

微信小程序實現圖片多點裁剪

話不多說&#xff0c;直接上代碼 1、頁面布局 <view class"buttons" style"height: 50px;"><view class"upload btn" style"background-color: #d18118;"bindtap"uploadImage"> 上傳圖片 </view><vie…

機器視覺項目流程和學習方法

機器視覺項目流程&#xff1a; 00001. 需求分析和方案建立 00002. 算法流程規劃和業務邏輯設計 00003. 模塊化編程和集成化實現 00004. 調試和優化&#xff0c;交付客戶及文檔 學習機器視覺的方法&#xff1a; 00001. 實戰學習&#xff0c;結合項目經驗教訓 00002. 學習…

c++參數傳遞

函數的參數傳遞 指的是形參與實參結合的過程&#xff0c;其基本方式包括值傳遞和引用傳遞兩種。 值傳遞 該方法把參數的實際值復制給函數的形式參數。在這種情況下&#xff0c;修改函數內的形式參數對實際參數沒有影響 #include<iostream> using namespace std;void swap…

NAS搭建指南二——影視資源中心

1. 刮削 這一部分是利用 tinyMediaManager 進行影視資源的評分、簡介以及圖片的搜集工作tinyMediaManager 官方網站地址下載及安裝過程&#xff1a;略我的主要修改的設置項如下所示&#xff1a; 使用方法&#xff1a; a. 點擊更新媒體庫 b. 選擇影片–>右鍵單擊–>…

時序預測 | MATLAB實現基于BiLSTM雙向長短期記憶神經網絡的時間序列預測-遞歸預測未來(多指標評價)

時序預測 | MATLAB實現基于BiLSTM雙向長短期記憶神經網絡的時間序列預測-遞歸預測未來(多指標評價) 目錄 時序預測 | MATLAB實現基于BiLSTM雙向長短期記憶神經網絡的時間序列預測-遞歸預測未來(多指標評價)預測結果基本介紹程序設計參考資料 預測結果 基本介紹 Matlab實現BiLST…

C++中的回調函數

1.普通函數作為回調函數 #include <iostream>void programA_FunA1() { printf("Iam ProgramA_FunA1 and be called..\n"); }void programA_FunA2() { printf("Iam ProgramA_FunA2 and be called..\n"); }void programB_FunB1(void (*callback)()) {…

年之年的選擇,組裝版

組件&#xff1a;<!--* Author: liuyu liuyuxizhengtech.com* Date: 2023-02-01 16:57:27* LastEditors: wangping wangpingxizhengtech.com* LastEditTime: 2023-06-30 17:25:14* Description: 時間選擇年 - 年 --> <template><div class"year-range-pick…

04.利用Redis國邏輯過期實現緩存功能---解決緩存擊穿

學習目標&#xff1a; 提示&#xff1a;學習如何利用Redis邏輯過期實現添加緩存功能解決緩存擊穿 學習產出&#xff1a; 緩存擊穿講解圖&#xff1a; 解決方案&#xff1a; 采用互斥鎖采用邏輯過期 1. 準備pom環境 <dependency><groupId>org.springframework…

⑤ Axios網絡請求

Axios安裝 cnpm install --save axios post請求需要用到的&#xff1a; cnpm install --save querystring(用來轉換格式的) 引入 一般是全局引入&#xff0c;在main.js中引入 全局引入后的get和post方式使用 get請求方式 post請求方式 先引入&#xff1a; axios封裝…

STM32 定時器自動重裝載寄存器ARR帶來的影響,ARPE0和1區別

ARR是啥 自動重載寄存器是預裝載的。對自動重載寄存器執行寫入或讀取操作時會訪問預裝載寄存器。預裝載寄存器的內容既可以直接傳送到影子寄存器&#xff0c;也可以在每次發生更新事件 (UEV) 時傳送到影子寄存器&#xff0c;這取決于 TIMx_CR1 寄存器中的自動重載預裝載使能位 …

Go和Java實現中介者模式

Go和Java實現中介者模式 下面通過一個同事之間相互通信的例子來說明中介者模式的使用。 1、中介者模式 中介者模式是用來降低多個對象和類之間的通信復雜性。這種模式提供了一個中介類&#xff0c;該類通常處理不同類之間的 通信&#xff0c;并支持松耦合&#xff0c;使代碼…

1.作用域

1.1局部作用域 局部作用域分為函數作用域和塊作用域。 1.函數作用域: 在函數內部聲明的變量只能在函數內部被訪問&#xff0c;外部無法直接訪問。 總結&#xff1a; (1)函數內部聲明的變量&#xff0c;在函數外部無法被訪問 (2)函數的參數也是函數內部的局部變量 (3)不同函數…

Redis——三個特殊的數據類型+事務

概述 全稱為遠程字典服務。 Redis——基礎篇(包含redis在云服務上的docker化安裝和連接以及常用命令)_連接docker中的redis_北嶺山腳鼠鼠的博客-CSDN博客 Redis能干什么&#xff1f; 1.內存存儲、持久化&#xff0c;內存中是斷電即失&#xff0c;因此持久化很重要&#xff…

【LVS-NAT配置】

配置 node1&#xff1a;128&#xff08;客戶端&#xff09; node2&#xff1a;135&#xff08;調度器&#xff09; RS&#xff1a; node3&#xff1a;130 node4&#xff1a;132 node2添加網絡適配器&#xff08;僅主機模式&#xff09; [rootnode2 ~]# nmtui[rootnode2 ~]#…

ETLCloud+MaxCompute實現云數據倉庫的高效實時同步

MaxCompute介紹 MaxCompute是適用于數據分析場景的企業級SaaS&#xff08;Software as a Service&#xff09;模式云數據倉庫&#xff0c;以Serverless架構提供快速、全托管的在線數據倉庫服務&#xff0c;消除了傳統數據平臺在資源擴展性和彈性方面的限制&#xff0c;最小化用…

歐拉公式之證明

首先&#xff0c;我們考慮復數函數的泰勒級數展開式。對于任意一個復數函數f(z)&#xff0c;我們可以將其在za處進行泰勒級數展開&#xff1a; f(z) f(a) f(a)(z-a) f(a)(z-a)^2/2! f(a)(z-a)^3/3! ... 其中f(a)表示f(z)在za處的導數&#xff0c;f(a)表示f(z)在…