MySQL(9)主從復制和讀寫分離

1.理解MySQL主從復制原理。

復制是MySQL提供的一直高可用、高性能的解決方案,一般用來建立大型的應用,總體來說,分為以下三步:
?? ?(1)master將改變記錄到二進制日志(binary log)中(這些記錄叫做二進制日志事件,binary log events);
??? (2)slave將master的binary log events拷貝到它的中繼日志(relay log);
??? (3)slave重做中繼日志中的事件,將改變反映它自己的數據。

2.完成MySQL主從復制。?

=============================================================

1.在主服務器(master)上

啟用二進制日志

選擇一個唯一的server-id

創建具有復制權限的用戶

2.在從服務器(slave)上

啟用中繼日志(二進制日志可開啟,也可不開啟)

選擇一個唯一的server-id

連接至主服務器,并開始復制

==============================================================

1)設置server-id值并開啟binlog參數

[mysqld]

log-bin = mysql-bin

server_id = 1

停止數據庫# systemctl stop mysqld

啟動數據庫#systemctl start mysqld

show variables like '%log_bin%';

可見log-bin 開

2)建立同步賬號

mysql> grant replication slave? on *.* to? rep@'192.168.95.%' identified by'123456';

mysql> show? grants?? for?? rep@'192.168.95.%';

3)鎖表設置只讀

為后面備份準備,注意生產環境要提前申請停機時間;

mysql> flush? tables with read lock;

提示:如果超過設置時間不操作會自動解鎖。

mysql> show variables? like'%timeout%';

測試鎖表后是否可以創建數據庫:

4)查看主庫狀態

查看主庫狀態,即當前日志文件名和二進制日志偏移量

mysql> show? master status;

5)備份數據庫數據

# mysqldump -uroot -p -A -B |gzip >?? /backup/mysql/mysql_bak.$(date +%F).sql.gz

6)解鎖

mysql> unlock? tables;

7)主庫備份數據上傳到從庫

scp mysql_bak.2021-01-26.sql.gz 192.168.83.134:/tmp

從庫上設置

1)設置server-id值并關閉binlog參數

停止數據庫# systemctl stop mysqld

啟動數據庫#systemctl start mysqld

2)還原從主庫備份數據

# cd /server/backup/

# gzip -d mysql_bak.2015-11-18.sql.gz

# mysql -uroot -p < mysql_bak.2015-11-18.

sql檢查還原:

# mysql -uroot -p -e 'show databases;'

3)設定從主庫同步

4)啟動從庫同步開關

mysql> start slave;

檢查狀態:show? slave status\G

3.完成MySQL讀寫分離配置

Mycat實現MySQL主從復制讀寫分離

MyCAT的安裝及部署

鏈接:https://pan.baidu.com/s/16Z7NFKuL2WX8b1ZKpk9AwA
提取碼:yang

1>、部署jdk環境MyCAT用Java開發,需要有JAVA運行環境,mycat依賴jdk1.7的環境

rpm -ivh jdk-8u144-linux-x64.rpm

測試 :? java -version

2>、安裝Mycat

鏈接:https://pan.baidu.com/s/1bkDv1WkwXXr2YzBtvCRY8w
提取碼:yang

tar xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/

3)添加環境變量

export PATH=$PATH:/usr/local/mycat/bin

[root@localhost mycat]# source /etc/profile.d/mycat.sh (當前生效)

3>、讀寫分離配置

1)不使用Mycat托管MySQL主從服務器,簡單使用如下配置

#注意:配置前備份下配置文件

先做一個備份吧

打開

vim schema.xml

(1)<schema name="TESTDB"checkSQLschema="false"sqlMaxLimit="100"dataNode="dn1">

這里的TESTDB就是我們所宣稱的數據庫名稱,必須和server.xml中的用戶指定的數據庫名稱一致。添加一個dataNode="dn1",是指定了我們這個庫只有在dn1上,沒有分庫。

(2)<dataNode name="dn1"dataHost="localhost1"database="db1" />

這里只需要改database的名字,就是你真是的數據庫上的數據庫名,可根據自己的數據庫名稱修改。

(3) <dataHostname="localhost1"maxCon="1000"minCon="10"balance="1"writeType="0"dbType="mysql"dbDriver="native"switchType="1"slaveThreshold="100">

balance

1、balance=0不開啟讀寫分離機制,所有讀操作都發送到當前可用的writehostle

.2、balance=1全部的readhost與stand by writeHost 參與select語句的負載均衡。簡單的說,雙主雙從模式(M1->S1,M2->S2,并且M1和M2互為主備),正常情況下,M1,S1,S2都參與select語句的復雜均衡。

3、balance=2所有讀操作都隨機的在readhost和writehost上分發

writeType負載均衡類型,目前的取值有3種:

1、writeType="0", 所有寫操作發送到配置的第一個writeHost。

2、writeType="1",所有寫操作都隨機的發送到配置的writeHost。

3、writeType="2",不執行寫操作。

switchType

1、switchType=-1表示不自動切換

2、switchType=1默認值,自動切換

3、switchType=2基于MySQL 主從同步的狀態決定是否切換

datahost其他配置

<dataHost name="localhost1"maxCon="1000"minCon="10"balance="1"writeType="0"dbType="mysql"dbDriver="native"switchType="1">

maxCon="1000":最大的并發連接數

minCon="10":mycat在啟動之后,會在后端節點上自動開啟的連接線程

tempReadHostAvailable="1"

這個一主一從時(1個writehost,1個readhost時),可以開啟這個參數,如果2個writehost,2個readhost時

<heartbeat>select user()</heartbeat> 監測心跳

(4)寫與讀

4>、創建管理用戶

grant insert,delete,update,select on db1.* to mycat@'192.168.83.%' identified by '123456';

收回權限

revoke INSERT, UPDATE, DELETE ON school.* from 'mycat'@'192.168.83.%';

配置基本完成

?

?

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

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

相關文章

NoSQL(1)

1、簡述redis應用場景。 Redis 概念&#xff1a;Redis&#xff08;Remote Dictionary Server&#xff09;&#xff0c;即遠程字典服務&#xff0c;是用C語言開發的一個開源的高性能鍵值對&#xff08;key-value&#xff09;數據庫。特征&#xff1a; 數據間沒有必然的聯系內部…

NoSQL(2)

1、string list hash結構中&#xff0c;每個至少完成5個命令&#xff0c;包含插入 修改 刪除 查詢&#xff0c;list 和hash還需要增加遍歷的操作命令 1、 Keys相關的命令操作&#xff1a; &#xff08;1&#xff09; 查看key是否存在&#xff1a; EXISTS name #判斷該鍵是…

NoSQL(3)

1、什么是MongoDB ? MongoDB 是由C語言編寫的&#xff0c;是一個基于分布式文件存儲的開源數據庫系統。 在高負載的情況下&#xff0c;添加更多的節點&#xff0c;可以保證服務器性能。 MongoDB 旨在為WEB應用提供可擴展的高性能數據存儲解決方案。 MongoDB 將數據存儲為…

Python二級筆記(1)

操作題 1&#xff0c;寬度為30字符&#xff0c;星號字符填充&#xff0c;居中對齊。如果輸入字符串超30位&#xff0c;則全部輸出。 例如:鍵盤輸入字符串q為‘abcd’&#xff0c;屏幕輸出abcd 代碼&#xff1a; s input(請輸入一個字符串&#xff1a;) print({:*^30}.form…

Python二級筆記(2)

知識點&#xff1a; 1&#xff0c;鏈表可以是線性結構也可以是非線性結構 線性表的鏈式存儲結構稱為線性鏈表&#xff1b;鏈表上一種物理存儲單元上非連續&#xff0c;非順序的存儲結構&#xff0c;數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的&#xff0c;鏈表可以說…

Python二級筆記(3)

知識點&#xff1a; 1&#xff0c;排序可以在不同的存儲結構上實現&#xff0c;但快速排序法適于順序存儲的線性表&#xff0c;不適用于鏈式存儲的線性表。 堆棧序適用于線性結構&#xff0c;不適用于非線性結構 2&#xff0c;基本路徑測試根據軟件過程性描述中的控制流確定程…

軟件工程學簡述

軟件危機 軟件危機是指計算機軟件的開發和維護過程中所遇到的一系列嚴重問題。&#xff08;考試中名詞解釋或者選擇題為主&#xff09; 軟件危機的典型表現 &#xff08;1&#xff09;對軟件開發成本和進度的估計常常很不準確。 &#xff08;2&#xff09;用戶對“已完成的…

Python二級筆記(4)

知識點&#xff1a; 1&#xff0c;冒泡排序、快速排序、簡單插入排序、簡單選擇排序在最壞情況下比較次數均為n(n-1)/2&#xff0c;堆排序在最壞情況下比較次數為nlog(2↓)n,在最壞情況下希爾排序需要比較的次數是n(↑r)&#xff08;1<r<2&#xff09;。 2&#xff0c;…

Python二級筆記(5)

知識點&#xff1a; 1&#xff0c;樹的度&#xff0c;及樹中存在的最大度數&#xff1b;如樹的度為3&#xff0c;即樹中只存在度為0&#xff0c;1&#xff0c;2&#xff0c;3的結點。 2&#xff0c;設循環隊列的存儲空間為Q&#xff08;1:m&#xff09;,初始狀態為空。在循環…

Qt圖形界面編程入門(1)

一、類和對象 1&#xff0c;面向過程程序設計&#xff08;自頂向下設計&#xff09; 分析出解決問題所需的步驟&#xff0c;然后用函數把這些步驟一一實現&#xff0c;使用的時候一個一個調用 過程式設計對于比較復雜的問題&#xff0c;或是在開發中需求變化比較多的時候&am…

Qt圖形界面編程入門(2)

二&#xff0c;指針和引用 共同點&#xff1a;它們都代表其他變量占據的某一塊內存區&#xff0c;通過指針或引用都可以對他們代表的其他變量進行操作。 以下語句利用指針對變量賦值&#xff1a; int m; int *p; //指針定義 p &m; //將m的內存地址賦給p *p 5;…

Qt圖形界面編程入門(3)

公有成員和私有成員 從訪問權限上分&#xff0c;類的成員又分為&#xff1a;公有成員&#xff08;public&#xff09;、私有成員&#xff08;private&#xff09;和保護成員&#xff08;protected&#xff09;三類。 公有成員用public來說明。這部分成員可以在程序中通過“…

Qt圖形界面編程入門(4)

構造函數和析構函數 構造函數是一個與類同名的特殊的公有成員函數。 創建類對象時構造函數會被調用&#xff0c;且只調用一次/ 構造函數無返回類型。 默認構造函數格式&#xff1a; 類名&#xff08;&#xff09;{.......} Account(){ //無返回類型&#xff0c;無參數I…

Qt圖形界面編程入門(5)

三&#xff0c;繼承和多態 繼承是定義新類的一種機制&#xff0c;使用這種機制創建新類時只需要聲明新類和已創建類之間的差別 對應一個繼承關系&#xff0c;創建的新類稱為子類&#xff0c;被繼承的類稱為父類或基類。子類可以使用父類定義的屬性和方法&#xff0c;也可以…

tensorflow安裝教程

https://note.youdao.com/ynoteshare1/index.html?iddddc63e6a2dfb70605ae9753bcc71a60&typenote 如果失效請下載文件查看&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/15FZETB3rzcpH-LOOpmpjTQ 提取碼&#xff1a;6jfm 如果安裝包找不到請點擊鏈接提取&am…

TensorFlow深度學習應用開發實戰(深度學習簡介和開發環境搭建)

一、深度學習的發展及其應用 1.1 深度學習的發展歷程 1956年&#xff0c;John McCarthy&#xff08;約翰麥卡錫&#xff09;等人在美國達特茅斯學院&#xff08;Dartmounth College&#xff09;開會探討如何使用機器模擬人的智能時&#xff0c;提出了“人工智能”這一概念。 …

路由與交換技術(鋪墊內容)

一、OSI參考模型 層次 結構 功能 數據 地址 設備 7 應用層 用戶接口 原始文件 主機名 主機 6 表示層 壓縮&a…

Python二級筆記(6)

一、知識點 1&#xff0c;continue語句用于中斷本次循環的執行&#xff0c;繼續執行下一輪循環的條件&#xff0c;表示跳出當前循環&#xff1b;Python中的for、while循環都有一個可選的else語句&#xff0c;如果break語句終止循環&#xff0c;那么else語句將不會執行。 2&am…

瀑布模型、快速原型模型、增量模型、螺旋模型、噴泉模型

一、瀑布模型 1、按照傳統的瀑布模型開發軟件&#xff0c;有下述幾個特點。 ①階段間具有順序性和依賴性 階段間具有順序性和依賴性&#xff0c;這個特點有兩重含義&#xff1a; 1&#xff0c;必須等前一階段的工作完成之后&#xff0c;才能開始后一階段的工作&#xff1b;…

Linux基礎命令(1)

1.強大好用的Shell Shell是一個命令工具。Shell&#xff08;也稱終端或殼&#xff09;充當的是人與內核&#xff08;硬件&#xff09;之間的翻譯官&#xff0c;用戶把一些命令“告訴”終端&#xff0c;它會調用相應的程序服務去完成某些工作。 現在紅帽系統在內的許多主流Lin…