马老师 生产环境mysql主从复制、架构优化方案
Binlog日志(主服務(wù)器) => 中繼日志(從服務(wù)器 運行一遍,保持一致)。從服務(wù)器是否要二進制日志取決于架構(gòu)設(shè)計。如果二進制保存足夠穩(wěn)定,從性能上來說,從服務(wù)器不需要二進制日志。默認情況下,mysql主從復(fù)制是異步的。
異步:命令寫操作是在內(nèi)存中完成的。同步:在磁盤完成才認定寫操作是完成的。
異步:主服務(wù)器執(zhí)行10條命令,主服務(wù)器不等待從服務(wù)器,從服務(wù)器才復(fù)制3條命令道中繼日志。這叫做從服務(wù)器的延遲delay。異步延遲是難免的。
Mysql是多用戶的,多個用戶進來并發(fā) 發(fā)起 寫操作,同時進行的,寫到寫到二進制語句是一條一條的,從服務(wù)器一次執(zhí)行一條,是單線程的。比主服務(wù)器慢是難免的。
整個復(fù)制架構(gòu):3個線程,主服務(wù)器dump線程,發(fā)送到從服務(wù)器上。從服務(wù)器上IO線程,接受主服務(wù)器上dump線程發(fā)送過來的數(shù)據(jù),寫入到中繼日志中去。而后一旦中繼日志有心內(nèi)容,SQL線程一句一句執(zhí)行內(nèi)容。
以上,所以配置就是:主服務(wù)器啟用bin log日志,從服務(wù)器啟用relay log,建立身份標示server id,每臺服務(wù)器需要唯一的server id。
負載均衡集群
高可用集群:冗余
高性能集群:完成復(fù)雜運算
AXFR:AXFR請求,是從DNS服務(wù)器請求在主DNS服務(wù)器上更新信息的一類域名系統(tǒng)的請求。AXFR請求經(jīng)常導(dǎo)致全區(qū)域傳輸。如果區(qū)域文件很大的話,它需要花費很多的時間并消耗可觀的帶寬。
IXFR:增量區(qū)域傳輸,增量區(qū)域傳輸協(xié)議。
?
權(quán)限:
主服務(wù)器建立賬戶,從服務(wù)器使用賬戶。mysql有一些特殊的權(quán)限允許復(fù)制進程運行,運行在從服務(wù)器上的I/O線程創(chuàng)建了到master的連接,這就意味著必須在主服務(wù)器上創(chuàng)建一個用戶并且需要授予特殊的權(quán)限。
這樣I/O線程就會一特定的身份連接到主服務(wù)器上并且讀取二進制日志。但是需要說明的一點是,復(fù)制用戶在主服務(wù)器上實際只需要 replication? client 權(quán)限就可以運行的,這里授予replication? slave的原因是用于監(jiān)視和管理復(fù)制賬號需要這個權(quán)限,并且這兩個功能(復(fù)制需要的權(quán)限,監(jiān)視和管理復(fù)制賬號權(quán)限)通常是一個賬號在管理,而不是為了達 到這兩個目標而分別設(shè)置2個賬號。
replication slave
replication client
主服務(wù)器和從服務(wù)器雙雙互相認證,SSL認證。
基于邏輯,Mysql Dump從主服務(wù)器復(fù)制到從服務(wù)器。Mysql有一個選項master data,從什么地方讀取二進制數(shù)據(jù)。主服務(wù)器放在邏輯卷上,從服務(wù)器基于備份也可以放邏輯卷上。
CHANGE MASTER TO master_def[,master_def] ...
可以更改從屬服務(wù)器用于與主服務(wù)器進行連接和通訊的參數(shù)。
mysql>CHANGE MASTER TO->????MASTER_HOST='master2.mycompany.com',->????MASTER_USER='replication',->????MASTER_PASSWORD='bigs3cret',->????MASTER_PORT=3306,->????MASTER_LOG_FILE='master2-bin.001',->????MASTER_LOG_POS=4,->? MASTER_CONNECT_RETRY=10;show slave status,檢查以下兩項是否啟動:
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
如何讓從服務(wù)器的mysql服務(wù)在啟動時候不要自動啟動從服務(wù)線程?
在從服務(wù)器上
[mysqld]
skip-slave-start=1
數(shù)據(jù)庫復(fù)制過濾:
主服務(wù)器:
binlog_do_db
binlog_ignore_db
無論怎么過濾,都不在主服務(wù)器上做過濾。任何不涉及到的數(shù)據(jù)庫相關(guān)的寫操作都不會記錄到二進制中。
從服務(wù)器:
replicate_do_db
replicate_ignore_db
replicate_do_table
replicate_ignore_db
基于通配符的匹配
replicate_wild_ignore_db = mysql.%
replicate_wild_do_db = magedu.%
浪費額外的網(wǎng)絡(luò)帶寬,復(fù)制過來的數(shù)據(jù)沒用。
主服務(wù)器崩潰:事務(wù)已經(jīng)提交-->寫入二進制日志:
在主從架構(gòu)上建議使用的配置:
主服務(wù)器:
sync_binlog=1
innodb_flush_logs_at_trx_commit=1
從服務(wù)器
skip_slave_start=1
read_only=1
使用mysql的sharding,多臺服務(wù)器寫操作。切分主要有兩種方式:水平切分(Horizental Sharding)和垂直切分(Vertical Sharding)。水平切分所指的是通過一系列的切分規(guī)則將數(shù)據(jù)水平分布到不同的DB或table中,在通過相應(yīng)的DB路由 或者table路由規(guī)則找到需要查詢的具體的DB或者table以進行Query操作,比如根據(jù)用戶ID將用戶表切分到多臺數(shù)據(jù)庫上。垂直切分指的是按業(yè)務(wù)、產(chǎn)品切分,將不同類型的數(shù)據(jù)且分到不同的服務(wù)器上,通過數(shù)據(jù)庫代理疏通程序與多個數(shù)據(jù)庫的通訊、降低應(yīng)用的復(fù)雜度。
讀寫分離簡單的說是把對數(shù)據(jù)庫讀和寫的操作分開對應(yīng)不同的數(shù)據(jù)庫服務(wù)器,這樣能有效地減輕數(shù)據(jù)庫壓力,也能減輕io壓力。主數(shù)據(jù)庫提供寫操作,從數(shù)據(jù)庫提供讀操作,這樣既避免了主數(shù)據(jù)庫服務(wù)器(Master)的過載,也有效地利用了從數(shù)據(jù)庫服務(wù)器(Slave)的資源。
主主(互為主從)架構(gòu)
1、雙方都要建立有復(fù)制權(quán)限的用戶;2、不同的server id;3、雙方都要開啟二進制日志和中繼日志;4、在啟動之前必須知道左服務(wù)器的二進制日志文件名和位置、右服務(wù)器的二進制日志文件名和位置。
主從分離(實現(xiàn)分層)
讀寫分離(代理),常用的由mysql官方提供的mysql proxy 和阿里巴巴開源的Amoeba。
?已經(jīng)聽完第八講。。。
轉(zhuǎn)載于:https://www.cnblogs.com/zl0372/p/mssql.html
總結(jié)
以上是生活随笔為你收集整理的马老师 生产环境mysql主从复制、架构优化方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于ORA-01187: cannot
- 下一篇: mySQL教程 第7章 存储过程和函数