本篇文章主要講解數(shù)據(jù)庫(kù)的優(yōu)化方案以及如何配置主從復(fù)制茂蚓,讀寫分離等。
數(shù)據(jù)庫(kù)性能瓶頸的主要原因
- 數(shù)據(jù)庫(kù)連接量
2.表數(shù)據(jù)量
命中索引
未命中則會(huì)全表掃描
硬盤級(jí)索引雅宾,存儲(chǔ)在硬盤中唆迁。
3.硬盤資源限制(QPS/TPS)
數(shù)據(jù)庫(kù)優(yōu)化的方案
- sql優(yōu)化
- 緩存
- 設(shè)計(jì)好的索引
- 讀寫分離
- 分庫(kù)分表
水平拆分(數(shù)據(jù)量按照一定規(guī)則拆分,同一張表)
能夠解決數(shù)據(jù)庫(kù)連接量問(wèn)題后频,數(shù)據(jù)表量大的問(wèn)題梳庆,提高QPS與TPS
垂直拆分(按照業(yè)務(wù)規(guī)則拆分,分拆不同的庫(kù))
解決數(shù)據(jù)庫(kù)連接問(wèn)題卑惜,硬件資源限制膏执。
讀寫分離與分庫(kù)分表
1、讀寫分離
區(qū)別讀露久、寫多數(shù)據(jù)源方式進(jìn)行數(shù)據(jù)的存儲(chǔ)和加載更米。
數(shù)據(jù)的存儲(chǔ)(增刪改)一般指定寫數(shù)據(jù)源,數(shù)據(jù)的讀取查詢指定
讀數(shù)據(jù)源
(讀寫分離會(huì)基于主從復(fù)制)
2毫痕、分庫(kù)分表
對(duì)數(shù)據(jù)的庫(kù)表進(jìn)行拆分征峦,用分片的方式對(duì)數(shù)據(jù)進(jìn)行管理。
1.垂直拆分
單庫(kù)按照業(yè)務(wù)規(guī)則進(jìn)行拆分消请。
2.水平拆分
單表的數(shù)據(jù)量很大的時(shí)候栏笆,按照一定的規(guī)則進(jìn)行拆分。
主從復(fù)制的原理
如下圖臊泰,左邊是主庫(kù)(Master)蛉加,右邊是從庫(kù)(Slave),從主庫(kù)中每執(zhí)行一次新增缸逃、修改针饥、刪除之外的非查詢語(yǔ)句,就寫入到一個(gè)binlog的日志文件中需频,然后從庫(kù)有一個(gè)線程丁眼,每一段時(shí)間,就從主庫(kù)中的binlog日志中取日志數(shù)據(jù)贺辰,并一個(gè)線程去執(zhí)行sql語(yǔ)句户盯。到達(dá)復(fù)制的效果嵌施。
考慮的問(wèn)題:數(shù)據(jù)會(huì)有延遲,不同步的存在莽鸭。
為什么會(huì)產(chǎn)生吗伤?
1,當(dāng)master tps高于slave的sql線程所能承受的范圍
2硫眨,網(wǎng)絡(luò)原因
3足淆,磁盤讀寫耗時(shí)
怎么判斷延遲?
1礁阁,show slave status \G; sends_behind_master 0(也是mycat的判斷方式)
2, mk-heartbeat timestamp 進(jìn)行主從復(fù)制兩個(gè)表數(shù)據(jù)的時(shí)間搓的判斷
怎么解決延時(shí)問(wèn)題巧号?
1,配置更高的硬件資源
2姥闭,把IOthread 改變成 多線程的方式
? mysql5.6 庫(kù)進(jìn)行多線程的方式
? GTID進(jìn)行多線程的方式
3丹鸿, 應(yīng)用程序自己去判斷(mycat有這么方案)
mysql如何配置主從復(fù)制?
Msater主數(shù)據(jù)庫(kù)設(shè)置:
Master操作:
1.接入mysql并創(chuàng)建主從復(fù)制的用戶
create user m2ssync identified by 'Qq123!@#';
2.給新建的用戶賦權(quán)
GRANT REPLICATION SLAVE ON *.* TO 'm2ssync'@'%' IDENTIFIED BY 'Qq123!@#';
3.指定服務(wù)ID棚品,開啟binlog日志記錄(y因?yàn)槟J(rèn)不開啟的)靠欢,在my.cnf中加入
server-id=137
log-bin=dbstore_binlog //設(shè)置binlog的文件名
binlog-do-db=db_store //做binlog日志記錄的時(shí)候,只做該數(shù)據(jù)庫(kù)的铜跑。要做多個(gè)门怪,在后面加逗號(hào)分隔。
4.通過(guò)SHOW MASTER STATUS;查看Master db狀態(tài).
slave從數(shù)據(jù)庫(kù)配置
Slave操作:
1.指定服務(wù)器ID锅纺,指定同步的binlog存儲(chǔ)位置掷空,在my.cnf中加入
server-id=101
relay-log=slave-relay-bin //指定中期日志文件存儲(chǔ)位置
relay-log-index=slave-relay-bin.index //指定索引的位置
read_only=1 //只讀模式
replicate_do_db=db_store //只做該db相關(guān)的事情
2.接入slave的mysql服務(wù),并配置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服務(wù)器狀態(tài)
判斷是否有配置好囤锉,可以看圖中: Slave_IO_Running以及Slave_SQL_Running是否為yes坦弟。
關(guān)于binlog日志的詳細(xì)使用與介紹:
https://www.cnblogs.com/Presley-lpc/p/9619571.html