華文網

「mysql優化專題」主從複製面試寶典!面試官都沒你懂得多!(11)

有些同學連集群和主從都分不清楚的,這裡我說一下他們最本質的區別,其實也就是data-sharing和nothing-sharing的區別。集群是共用存儲的。主從複製中沒有任何共用。每台機器都是獨立且完整的系統。

堅持到文末,有黃圖喲。

內容較多,可先收藏,目錄如下:一、什麼是主從複製二、主從複製的作用(重點)三、主從複製的原理(重中之重)四、三步輕鬆構建主從五、必問面試題乾貨分析(最最重要的點)一、什麼是主從複製(技術文):

主從複製,是用來建立一個和主要資料庫完全一樣的資料庫環境,稱為從資料庫;主要資料庫一般是准即時的業務資料庫。

二、主從複製的作用(好處,或者說為什麼要做主從)重點!:

1、做資料的熱備,

作為後備資料庫,主要資料庫伺服器故障後,可切換到從資料庫繼續工作,避免資料丟失。

2、架構的擴展。業務量越來越大,I/O訪問頻率過高,單機無法滿足,此時做多庫的存儲,降低磁片I/O訪問的頻率,提高單個機器的I/O性能。

3、讀寫分離,使資料庫能支撐更大的併發。在報表中尤其重要。由於部分報表sql語句非常的慢,導致鎖表,影響前臺服務。如果前臺使用master,

報表使用slave,那麼報表sql將不會造成前臺鎖,保證了前臺速度。

三、主從複製的原理(重中之重,面試必問):

1.資料庫有個bin-log二進位檔案,記錄了所有sql語句。

2.我們的目標就是把主要資料庫的bin-log檔的sql語句複製過來。

3.讓其在從資料的relay-log重做日誌檔中再執行一次這些sql語句即可。

4.下面的主從配置就是圍繞這個原理配置

5.具體需要三個執行緒來操作:

binlog輸出執行緒。每當有從庫連接到主庫的時候,

主庫都會創建一個執行緒然後發送binlog內容到從庫。

在從庫裡,當複製開始的時候,從庫就會創建兩個執行緒進行處理:

從庫I/O執行緒。當START SLAVE語句在從庫開始執行之後,從庫創建一個I/O執行緒,該執行緒連接到主庫並請求主庫發送binlog裡面的更新記錄到從庫上。從庫I/O執行緒讀取主庫的binlog輸出執行緒發送的更新並拷貝這些更新到本地檔,其中包括relay log檔。

從庫的SQL執行緒。從庫創建一個SQL執行緒,

這個執行緒讀取從庫I/O執行緒寫到relay log的更新事件並執行。

可以知道,對於每一個主從複製的連接,都有三個執行緒。擁有多個從庫的主庫為每一個連接到主庫的從庫創建一個binlog輸出執行緒,每一個從庫都有它自己的I/O執行緒和SQL執行緒。(技術文)

主從複製如圖:

原理圖

還不懂?沒關係,這圖也一樣:

步驟一:主庫db的更新事件(update、insert、delete)被寫到binlog

步驟二:從庫發起連接,連接到主庫

步驟三:此時主庫創建一個binlog dump thread,把binlog的內容發送到從庫

步驟四:從庫啟動之後,創建一個I/O執行緒,讀取主庫傳過來的binlog內容並寫入到relay log

步驟五:還會創建一個SQL執行緒,從relay log裡面讀取內容,從Exec_Master_Log_Pos位置開始執行讀取到的更新事件,將更新內容寫入到slave的db(技術文)

再不懂?沒辦法了,留言為你解惑。

真長!中場休息會,一起左三圈右三圈吧。看不下去的可以先收藏關注哈。

需要知道的是,面試過程中原理不會讓你講那麼久,一般的,只要把1234點講出來,然後說簡略說下三個執行緒,這就滿分了!四、三步輕鬆構建主從(技術文):

一、Master主要伺服器上的配置(103.251.237.42)

1.編輯my.cnf (命令查找文件位置:find / -name my.cnf)

在[mysqld]中注釋掉 bind-address = 127.0.0.1 不然mysql無法遠程

server-id = 1 中 1 是可以自己定義的,但是需要保持它的唯一性,是伺服器的唯一標識

1.log_bin 啟動MySQL二進位日誌

2.binlog_do_db 指定記錄二進位日誌的資料庫

3.binlog_ignore_db 指定不記錄二進位日誌的資料庫。

注釋掉 binlog_do_db 和 binlog_ignore_db ,則表示備份全部資料庫

做完這些後,重啟下資料庫

2.登陸主要伺服器mysql 創建從伺服器用到的帳戶和許可權;

@之後IP可訪問主要伺服器,這裡值定從伺服器IP

新建密碼為masterbackup的masterbackup 使用者,並賦予replication slave 許可權

可以看到用戶masterbackup 已經添加

3.查看主要資料庫的狀態

記錄 mysql-bin.000007 以及 276,編寫以下命令待用;

change master to master_host='103.251.237.42',master_port=3306,master_user='masterbackup',master_password='masterbackup',master_log_file='mysql-bin.000007',master_log_pos=276;

二、Slave從伺服器配置上的配置(103.251.237.45)

1.編輯my.cnf(命令查找文件位置:find / -name my.cnf)

在[mysqld]中

relay-log = slave-relay-bin

relay-log-index = slave-relay-bin.index

暫時不清楚這是做什麼的。加入這兩條。

重啟mysql服務

登陸mysql,停止同步命令

執行用上面準備的命令; 登錄Slave從伺服器,連接Master主要伺服器:

重新開機資料同步;

查看Slave信息;如圖兩句都為yes,則狀態正常

三、從主從伺服器測試結果

在主要伺服器創建一個資料庫

在從伺服器上查看剛才創建的資料庫

可以查到,主從伺服器配置完成。(技術文)當然,還有主主複製,如果有感興趣的朋友可以留言。

其實主從複製也存在一些問題:

1. 負載均衡,由於複製的時間差,不能保證同步讀,而且寫仍然單點,沒法多點寫,我對這個理解就是半吊子的讀寫均衡。

2. 容災,基本都是有損容災,因為資料不同步,誰用誰知道,半吊子的容災。

可能只是提供一種成本較低的資料備份方案加不完美的容災和負載均衡吧,這種方案註定是一種過渡方案,個人認為必須更新了。當然,在不是體量巨大的情況下,還是不失為一個優化的解決辦法。

五、面試題乾貨分析(如果問到資料庫主從問題,必問以下問題):

1、主從的好處是?

2、主從的原理是?

3、從資料庫的讀的延遲問題瞭解嗎?如何解決?

4、做主從後主要伺服器掛了怎麼辦?

大家可以思考後留言哈。積極思考,東西才是你的。這才是最後的乾貨。

背景真的很黃

略有收穫,隨手轉發。收藏關注,一個不落。私信你好,驚喜多多。

從relay log裡面讀取內容,從Exec_Master_Log_Pos位置開始執行讀取到的更新事件,將更新內容寫入到slave的db(技術文)

再不懂?沒辦法了,留言為你解惑。

真長!中場休息會,一起左三圈右三圈吧。看不下去的可以先收藏關注哈。

需要知道的是,面試過程中原理不會讓你講那麼久,一般的,只要把1234點講出來,然後說簡略說下三個執行緒,這就滿分了!四、三步輕鬆構建主從(技術文):

一、Master主要伺服器上的配置(103.251.237.42)

1.編輯my.cnf (命令查找文件位置:find / -name my.cnf)

在[mysqld]中注釋掉 bind-address = 127.0.0.1 不然mysql無法遠程

server-id = 1 中 1 是可以自己定義的,但是需要保持它的唯一性,是伺服器的唯一標識

1.log_bin 啟動MySQL二進位日誌

2.binlog_do_db 指定記錄二進位日誌的資料庫

3.binlog_ignore_db 指定不記錄二進位日誌的資料庫。

注釋掉 binlog_do_db 和 binlog_ignore_db ,則表示備份全部資料庫

做完這些後,重啟下資料庫

2.登陸主要伺服器mysql 創建從伺服器用到的帳戶和許可權;

@之後IP可訪問主要伺服器,這裡值定從伺服器IP

新建密碼為masterbackup的masterbackup 使用者,並賦予replication slave 許可權

可以看到用戶masterbackup 已經添加

3.查看主要資料庫的狀態

記錄 mysql-bin.000007 以及 276,編寫以下命令待用;

change master to master_host='103.251.237.42',master_port=3306,master_user='masterbackup',master_password='masterbackup',master_log_file='mysql-bin.000007',master_log_pos=276;

二、Slave從伺服器配置上的配置(103.251.237.45)

1.編輯my.cnf(命令查找文件位置:find / -name my.cnf)

在[mysqld]中

relay-log = slave-relay-bin

relay-log-index = slave-relay-bin.index

暫時不清楚這是做什麼的。加入這兩條。

重啟mysql服務

登陸mysql,停止同步命令

執行用上面準備的命令; 登錄Slave從伺服器,連接Master主要伺服器:

重新開機資料同步;

查看Slave信息;如圖兩句都為yes,則狀態正常

三、從主從伺服器測試結果

在主要伺服器創建一個資料庫

在從伺服器上查看剛才創建的資料庫

可以查到,主從伺服器配置完成。(技術文)當然,還有主主複製,如果有感興趣的朋友可以留言。

其實主從複製也存在一些問題:

1. 負載均衡,由於複製的時間差,不能保證同步讀,而且寫仍然單點,沒法多點寫,我對這個理解就是半吊子的讀寫均衡。

2. 容災,基本都是有損容災,因為資料不同步,誰用誰知道,半吊子的容災。

可能只是提供一種成本較低的資料備份方案加不完美的容災和負載均衡吧,這種方案註定是一種過渡方案,個人認為必須更新了。當然,在不是體量巨大的情況下,還是不失為一個優化的解決辦法。

五、面試題乾貨分析(如果問到資料庫主從問題,必問以下問題):

1、主從的好處是?

2、主從的原理是?

3、從資料庫的讀的延遲問題瞭解嗎?如何解決?

4、做主從後主要伺服器掛了怎麼辦?

大家可以思考後留言哈。積極思考,東西才是你的。這才是最後的乾貨。

背景真的很黃

略有收穫,隨手轉發。收藏關注,一個不落。私信你好,驚喜多多。