日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

主從復制

Myql主從復制與讀寫分離

 

概念

影響MySQL-A數據庫的操作,在數據庫執行后,都會寫入本地的日志系統A中。

假設,實時的將變化了的日志系統中的數據庫事件操作,在MYSQL-A的3306端口,通過網絡發給MYSQL-B。

MYSQL-B收到后,寫入本地日志系統B,然后一條條的將數據庫事件在數據庫中完成。

那么,MYSQL-A的變化,MYSQL-B也會變化,這樣就是所謂的MYSQL的復制,即MYSQL replication。

在上面的模型中,MYSQL-A就是主服務器,即master,MYSQL-B就是從服務器,即slave。

日志系統A,其實它是MYSQL的日志類型中的二進制日志,也就是專門用來保存修改數據庫表的所有動作,即bin log。【注意MYSQL會在執行語句之后,釋放鎖之前,寫入二進制日志,確保事務安全】

日志系統B,并不是二進制日志,由于它是從MYSQL-A的二進制日志復制過來的,并不是自己的數據庫變化產生的,有點接力的感覺,稱為中繼日志,即relay log。

可以發現,通過上面的機制,可以保證MYSQL-A和MYSQL-B的數據庫數據一致,但是時間上肯定有延遲,即MYSQL-B的數據是滯后的。

【即便不考慮什么網絡的因素,MYSQL-A的數據庫操作是可以并發的執行的,但是MYSQL-B只能從relay log中讀一條,執行下。因此MYSQL-A的寫操作很頻繁,MYSQL-B很可能跟不上。】

解決問題

數據如何不被丟失

備份

讀寫分離

數據庫負載均衡

高可用

環境搭建

1.準備環境

兩臺windows操作系統 ip分別為: 172.27.185.1(主)、172.27.185.2(從)

2.連接到主服務(172.27.185.1)服務器上,給從節點分配賬號權限。

GRANT REPLICATION SLAVE ON . TO ‘root’@‘172.27.185.2’ IDENTIFIED BY ‘root’;

3.在主服務my.ini文件新增

server-id=200
log-bin=mysql-bin
relay-log=relay-bin
relay-log-index=relay-bin-index

重啟mysql服務

4.在從服務my.ini文件新增

server-id = 210
replicate-do-db =itmayiedu #需要同步數據庫

重啟mysql服務

5.從服務同步主數據庫

stop slave;
change
master to master_host='172.27.185.1',master_user='root',master_password='root';
start slave;
show slave status;

注意事項

①一定要在同一個局域網中

②使用360WiFi創建局域網

③最好把防火墻全部關閉掉

什么是讀寫分離

在數據庫集群架構中,讓主庫負責處理事務性查詢,而從庫只負責處理select查詢,讓兩者分工明確達到提高數據庫整體讀寫性能。當然,主數據庫另外一個功能就是負責將事務性查詢導致的數據變更同步到從庫中,也就是寫操作。

讀寫分離的好處

1)分攤服務器壓力,提高機器的系統處理效率

讀寫分離適用于讀遠比寫的場景,如果有一臺服務器,當select很多時,update和delete會被這些select訪問中的數據堵塞,等待select結束,并發性能并不高,而主從只負責各自的寫和讀,極大程度的緩解X鎖和S鎖爭用;

假如我們有1主3從,不考慮上述1中提到的從庫單方面設置,假設現在1分鐘內有10條寫入,150條讀取。那么,1主3從相當于共計40條寫入,而讀取總數沒變,因此平均下來每臺服務器承擔了10條寫入和50條讀取(主庫不承擔讀取操作)。因此,雖然寫入沒變,但是讀取大大分攤了,提高了系統性能。另外,當讀取被分攤后,又間接提高了寫入的性能。所以,總體性能提高了,說白了就是拿機器和帶寬換性能;

2)增加冗余,提高服務可用性,當一臺數據庫服務器宕機后可以調整另外一臺從庫以最快速度恢復服務

主從復制原理

依賴于二進制日志,binary-log.

二進制日志中記錄引起數據庫發生改變的語句

Insert 、delete、update、create table

Scale-up與Scale-out區別

Scale Out是指Application可以在水平方向上擴展。一般對數據中心的應用而言,Scale out指的是當添加更多的機器時,應用仍然可以很好的利用這些機器的資源來提升自己的效率從而達到很好的擴展性。

Scale Up是指Application可以在垂直方向上擴展。一般對單臺機器而言,Scale Up值得是當某個計算節點(機器)添加更多的CPU Cores,存儲設備,使用更大的內存時,應用可以很充分的利用這些資源來提升自己的效率從而達到很好的擴展性。

MyCat

什么是 Mycat

是一個開源的分布式數據庫系統,但是因為數據庫一般都有自己的數據庫引擎,而Mycat并沒有屬于自己的獨有數據庫引擎,所有嚴格意義上說并不能算是一個完整的數據庫系統,只能說是一個在應用和數據庫之間起橋梁作用的中間件。

在Mycat中間件出現之前,MySQL主從復制集群,如果要實現讀寫分離,一般是在程序段實現,這樣就帶來了一個問題,即數據段和程序的耦合度太高,如果數據庫的地址發生了改變,那么我的程序也要進行相應的修改,如果數據庫不小心掛掉了,則同時也意味著程序的不可用,而對于很多應用來說,并不能接受;

引入Mycat中間件能很好地對程序和數據庫進行解耦,這樣,程序只需關注數據庫中間件的地址,而無需知曉底層數據庫是如何提供服務的,大量的通用數據聚合、事務、數據源切換等工作都由中間件來處理;

Mycat中間件的原理是對數據進行分片處理,從原有的一個庫,被切分為多個分片數據庫,所有的分片數據庫集群構成完成的數據庫存儲,有點類似磁盤陣列中的RAID0.

Mycat安裝

創建表結構

CREATE DATABASE IF NOT EXISTS `weibo_simple`;

-- ------------------------------------

-- Table structure for `t_users` 用戶表

-- ------------------------------------

DROP TABLE IF EXISTS `t_users`;

CREATE TABLE `t_users` (

`user_id` varchar(64) NOT NULL COMMENT '注冊用戶ID',

`user_email` varchar(64) NOT NULL COMMENT '注冊用戶郵箱',

`user_password` varchar(64) NOT NULL COMMENT '注冊用戶密碼',

`user_nikename` varchar(64) NOT NULL COMMENT '注冊用戶昵稱',

`user_creatime` datetime NOT NULL COMMENT '注冊時間',

`user_status` tinyint(1) NOT NULL COMMENT '驗證狀態 1:已驗證 0:未驗證',

`user_deleteflag` tinyint(1) NOT NULL COMMENT '刪除標記 1:已刪除 0:未刪除',

PRIMARY KEY (`user_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- -------------------------------------

-- Table structure for `t_message`微博表

-- -------------------------------------

DROP TABLE IF EXISTS `t_message`;

CREATE TABLE `t_message` (

`messages_id` varchar(64) NOT NULL COMMENT '微博ID',

`user_id` varchar(64) NOT NULL COMMENT '發表用戶',

`messages_info` varchar(255) DEFAULT NULL COMMENT '微博內容',

`messages_time` datetime DEFAULT NULL COMMENT '發布時間',

`messages_commentnum` int(12) DEFAULT NULL COMMENT '評論次數',

`message_deleteflag` tinyint(1) NOT NULL COMMENT '刪除標記 1:已刪除 0:未刪除',

`message_viewnum` int(12) DEFAULT NULL COMMENT '被瀏覽量',

PRIMARY KEY (`messages_id`),

KEY `user_id` (`user_id`),

CONSTRAINT `t_message_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `t_users` (`user_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

配置server.xml

	<!-- 添加user -->
 <user name="mycat">
 <property name="password">mycat</property>
 <property name="schemas">mycat</property>
 </user>
	
	<!-- 添加user -->
 <user name="mycat_red">
 <property name="password">mycat_red</property>
 <property name="schemas">mycat</property>
	<property name="readOnly">true</property>
 </user>

配置schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">
 <!-- 與server.xml中user的schemas名一致 -->
 <schema name="mycat" checkSQLschema="true" sqlMaxLimit="100">
 <table name="t_users" primaryKey="user_id" dataNode="dn1" rule="rule1"/>
 
 <table name="t_message" type="global" primaryKey="messages_id" dataNode="dn1" />
 </schema>
<dataNode name="dn1" dataHost="jdbchost" database="weibo_simple
" />
 
 <dataHost name="jdbchost" maxCon="1000" minCon="10" balance="1"
 writeType="0" dbType="mysql" dbDriver="native" switchType="1"
 slaveThreshold="100">
 <heartbeat>select user()</heartbeat> 
 <writeHost host="hostMaster" url="172.27.185.1:3306" user="root" password="root">
 </writeHost>
 <writeHost host="hostSlave" url="172.27.185.2:3306" user="root" password="root"/>
 </dataHost>
 
</mycat:schema>

配置rule.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
	- you may not use this file except in compliance with the License. - You 
	may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 
	- - Unless required by applicable law or agreed to in writing, software - 
	distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
	WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
	License for the specific language governing permissions and - limitations 
	under the License. -->
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://org.opencloudb/">
	 <tableRule name="rule1">
 <rule>
 <columns>user_id</columns>
 <algorithm>func1</algorithm>
 </rule>
 </tableRule>
 <function name="func1" class="org.opencloudb.route.function.AutoPartitionByLong">
 	<property name="mapFile">autopartition-long.txt</property>
 </function>
</mycat:rule>

為了更好地定位錯誤,修改log4j.xml

雙擊startup_nowrap.bat開始啟動

常見問題

SHOW MASTER STATUS 如果為,則在my.ini文件中添加一行

log-bin=mysql-bin

給賬號分配權限

grant all privileges on . to ‘root’@‘172.27.185.1’ identified by ‘root’;

分享到:
標簽:主從 復制 Myql
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定