在資料庫集群架構中,讓主庫負責處理事務性查詢,而從庫只負責處理select查詢,讓兩者分工明確達到提高資料庫整體讀寫效能。當然,主資料庫另外乙個功能就是負責將事務性查詢導致的資料變更同步到從庫中,也就是寫操作。即主從複製和讀寫分離是離不開的
1)分攤伺服器壓力,提高機器的系統處理效率
讀寫分離適用於讀遠比寫的場景,如果有一台伺服器,當select很多時,update和delete會被這些select訪問中的資料堵塞,等待select結束,併發效能並不高,而主從只負責各自的寫和讀,極大程度的緩解x鎖和s鎖爭用;
假如我們有1主3從,不考慮上述1中提到的從庫單方面設定,假設現在1分鐘內有10條寫入,150條讀取。那麼,1主3從相當於共計40條寫入,而讀取總數沒變,因此平均下來每台伺服器承擔了10條寫入和50條讀取(主庫不承擔讀取操作)。因此,雖然寫入沒變,但是讀取大大分攤了,提高了系統效能。另外,當讀取被分攤後,又間接提高了寫入的效能。所以,總體效能提高了,說白了就是拿機器和頻寬換效能;
2)增加冗餘,提高服務可用性,當一台資料庫伺服器宕機後可以調整另外一台從庫以最快速度恢復服務
是乙個開源的分布式資料庫系統,但是因為資料庫一般都有自己的資料庫引擎,而mycat並沒有屬於自己的獨有資料庫引擎,所有嚴格意義上說並不能算是乙個完整的資料庫系統,只能說是乙個在應用和資料庫之間起橋梁作用的中介軟體。
在mycat中介軟體出現之前,mysql主從複製集群,如果要實現讀寫分離,一般是在程式段實現,這樣就帶來了乙個問題,即資料段和程式的耦合度太高,如果資料庫的位址發生了改變,那麼我的程式也要進行相應的修改,如果資料庫不小心掛掉了,則同時也意味著程式的不可用,而對於很多應用來說,並不能接受;
引入mycat中介軟體能很好地對程式和資料庫進行解耦,這樣,程式只需關注資料庫中介軟體的位址,而無需知曉底層資料庫是如何提供服務的,大量的通用資料聚合、事務、資料來源切換等工作都由中介軟體來處理;
mycat中介軟體的原理是對資料進行分片處理,從原有的乙個庫,被切分為多個分片資料庫,所有的分片資料庫集群構成完成的資料庫儲存,有點類似磁碟陣列中的raid0.
一句話概括,是乙個分布式資料系統,做到讀寫分離,解耦和,能隱藏真實ip位址,更加安全
下面表結構為測試結構,為的是更好講解配置檔案
create database if not exists `weibo_******`;
-- ------------------------------------
-- 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 '發布時間',
`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;
在mycat/conf中修改
mycat
mycat
mycat_red
mycat
true
解說:這個為mycat的使用者密碼,上面為主資料庫,下面為從資料庫(從資料庫只能做讀的操作)
其他不需要更改(若測試我的案例可直接覆蓋)
<?xml version="1.0" encoding="utf-8"?>
user_id
func1
autopartition-long.txt
為了更好地定位錯誤,修改log4j.xml
雙擊startup_nowrap.bat開始啟動看到此標誌說明啟動成功
問題:只要關於xml**utf-8的錯誤提示,一律為編碼錯誤,請用軟體將編碼改為utf-8
mysql讀寫分離
5.讀寫分離適用與讀遠大於寫的場景,如果只有一台伺服器,當select很多時,update和delete會被這些select訪問中的資料堵塞,等待select結束,併發效能不高。對於寫和讀比例相近的應用,應該部署雙主相互複製。6.可以在從庫啟動是增加一些引數來提高其讀的效能,例如 skip inno...
讀寫分離 MySQL
1 what 讀寫分離 讀寫分離,基本的原理是讓主資料庫處理事務性增 改 刪操作 insert update delete 而從資料庫處理select查詢操作。資料庫複製被用來把事務性操作導致的變更同步到集群中的從資料庫。2 why 那麼為什麼要讀寫分離呢?因為資料庫的 寫 寫10000條資料到or...
mysql 讀寫分離
mysql proxy 簡稱mysql讀寫分離 主要目的是為了提高web站點的訪問速度。首先搭建mysql主從,參考 cd usr local src wget tar zxvf mysql proxy 0.8.5 linux glibc2.3 x86 64bit.tar.gz cp r mysql...