本篇文章主要講解數(shù)據(jù)庫的優(yōu)化方案以及如何配置主從復制,讀寫分離等。
數(shù)據(jù)庫性能瓶頸的主要原因
- 數(shù)據(jù)庫連接量
2.表數(shù)據(jù)量
命中索引
未命中則會全表掃描
硬盤級索引,存儲在硬盤中。
3.硬盤資源限制(QPS/TPS)
數(shù)據(jù)庫優(yōu)化的方案
- sql優(yōu)化
- 緩存
- 設計好的索引
- 讀寫分離
- 分庫分表
水平拆分(數(shù)據(jù)量按照一定規(guī)則拆分,同一張表)
能夠解決數(shù)據(jù)庫連接量問題,數(shù)據(jù)表量大的問題,提高QPS與TPS
垂直拆分(按照業(yè)務規(guī)則拆分,分拆不同的庫)
解決數(shù)據(jù)庫連接問題,硬件資源限制。
讀寫分離與分庫分表
1、讀寫分離
區(qū)別讀、寫多數(shù)據(jù)源方式進行數(shù)據(jù)的存儲和加載。
數(shù)據(jù)的存儲(增刪改)一般指定寫數(shù)據(jù)源,數(shù)據(jù)的讀取查詢指定
讀數(shù)據(jù)源
(讀寫分離會基于主從復制)
2、分庫分表
對數(shù)據(jù)的庫表進行拆分,用分片的方式對數(shù)據(jù)進行管理。
1.垂直拆分

單庫按照業(yè)務規(guī)則進行拆分。
2.水平拆分
單表的數(shù)據(jù)量很大的時候,按照一定的規(guī)則進行拆分。

主從復制的原理
如下圖,左邊是主庫(Master),右邊是從庫(Slave),從主庫中每執(zhí)行一次新增、修改、刪除之外的非查詢語句,就寫入到一個binlog的日志文件中,然后從庫有一個線程,每一段時間,就從主庫中的binlog日志中取日志數(shù)據(jù),并一個線程去執(zhí)行sql語句。到達復制的效果。

考慮的問題:數(shù)據(jù)會有延遲,不同步的存在。
為什么會產(chǎn)生?
1,當master tps高于slave的sql線程所能承受的范圍
2,網(wǎng)絡原因
3,磁盤讀寫耗時
怎么判斷延遲?
1,show slave status \G; sends_behind_master 0(也是mycat的判斷方式)
2, mk-heartbeat timestamp 進行主從復制兩個表數(shù)據(jù)的時間搓的判斷
怎么解決延時問題?
1,配置更高的硬件資源
2,把IOthread 改變成 多線程的方式
? mysql5.6 庫進行多線程的方式
? GTID進行多線程的方式
3, 應用程序自己去判斷(mycat有這么方案)
mysql如何配置主從復制?
Msater主數(shù)據(jù)庫設置:
Master操作:
1.接入mysql并創(chuàng)建主從復制的用戶
create user m2ssync identified by 'Qq123!@#';
2.給新建的用戶賦權
GRANT REPLICATION SLAVE ON *.* TO 'm2ssync'@'%' IDENTIFIED BY 'Qq123!@#';
3.指定服務ID,開啟binlog日志記錄(y因為默認不開啟的),在my.cnf中加入
server-id=137
log-bin=dbstore_binlog //設置binlog的文件名
binlog-do-db=db_store //做binlog日志記錄的時候,只做該數(shù)據(jù)庫的。要做多個,在后面加逗號分隔。
4.通過SHOW MASTER STATUS;查看Master db狀態(tài).
slave從數(shù)據(jù)庫配置
Slave操作:
1.指定服務器ID,指定同步的binlog存儲位置,在my.cnf中加入
server-id=101
relay-log=slave-relay-bin //指定中期日志文件存儲位置
relay-log-index=slave-relay-bin.index //指定索引的位置
read_only=1 //只讀模式
replicate_do_db=db_store //只做該db相關的事情
2.接入slave的mysql服務,并配置change master to
master_host='192.168.8.137',
master_port=3306,master_user='m2ssync',master_p
assword='Qq123!@#',master_log_file='db_stoere_bi
nlog',master_log_pos=0;
3.start slave;
4. show slave status\G ;查看slave服務器狀態(tài)

判斷是否有配置好,可以看圖中: Slave_IO_Running以及Slave_SQL_Running是否為yes。
關于binlog日志的詳細使用與介紹:
https://www.cnblogs.com/Presley-lpc/p/9619571.html