實戰(zhàn)講解mysql8主從復制(windows版)
估計大家刷到這篇文章肯定已經(jīng)知道什么是主從復制了, 就不廢話了,直接正題。
操作數(shù)據(jù)庫以及運行數(shù)據(jù)庫語句,目前有2種方式:
一種是使用命令行程序,即cmd

運行 mysql -u root -p, 之后輸入密碼就可進入到mysql了,就可以運行sql語句以及各種數(shù)據(jù)庫命令。如下圖:

但是這種方式不是很方便。
另一種方式是借助可視化工具navicat,如下圖:

這個工具可以創(chuàng)建、修改、刪除等數(shù)據(jù)庫操作,也可以運行sql語句,非常方便。本文就借助這個工具來演示。
正文開始,我會按步驟來演示,跟著步驟肯定沒錯。
1. 準備兩臺電腦,或者在一臺電腦上安裝個虛擬機也可以。一臺是主服務(wù)器(master),一臺是從服務(wù)器(slave)。兩臺服務(wù)器都安裝上mysql8數(shù)據(jù)庫,二者沒有任何區(qū)別。
主服務(wù)器安裝的數(shù)據(jù)庫叫master, 從服務(wù)器上的數(shù)據(jù)庫叫slave。master數(shù)據(jù)庫完成所有更新操作,比如添加、修改、刪除,?slave數(shù)據(jù)庫負責查詢操作。所以兩個數(shù)據(jù)庫要想數(shù)據(jù)保持一致,就需要將master數(shù)據(jù)庫中的所有更改同步到slave數(shù)據(jù)庫,這就是主從復制。(大哭,說好的不講概念的)
下載地址:?https://dev.mysql.com/downloads/windows/installer/8.0.html
2. 兩個服務(wù)器上同時創(chuàng)建名稱為db的數(shù)據(jù)庫,同時創(chuàng)建admin表,如下:

3. 修改master數(shù)據(jù)庫的配置文件my.ini
my.ini一般是在C:\ProgramData\MySQL\MySQL Server 8.0目錄下,如果沒有?ProgramData,應(yīng)該是被隱藏了,顯示即可。


如果上面這兩項都有,那就不用任何修改。log-bin是 binlog日志的文件名,server-id是服務(wù)id,在所有的主從數(shù)據(jù)庫上,這個id不能相同。
什么是binlog日志?
這個日志非常重要,將master數(shù)據(jù)庫的任何修改同步到slave數(shù)據(jù)庫就是靠這個日志的。binlog記錄了所有增加、修改、刪除操作及數(shù)據(jù)。即使表數(shù)據(jù)誤刪除了,或者數(shù)據(jù)庫誤刪除了,通過binlog都能恢復,實際上就是重新執(zhí)行一遍binlog中的操作就可以了。
4.?修改slave數(shù)據(jù)庫的配置文件my.ini

找到server-id,將其修改成別的,只要和master數(shù)據(jù)庫的不一樣就行。
同時添加replicate-do-db,這個是允許復制的數(shù)據(jù)庫名稱。如果沒有該項,則默認復制所有數(shù)據(jù)庫。如果要復制多個,需要重復寫,比如:
所有文件配置就ok了。
5. 在master數(shù)據(jù)庫中創(chuàng)建一個賬號,用于給slave使用,因為slave需要連接到master,然后下載binlog,那么就必須給它分配一個賬號,而且賬號權(quán)限只能用于同步binlog。
運行如下sql語句:

第一行語句是用于創(chuàng)建賬號,賬號名稱為slave,密碼為123456, 實際上就是在名稱為mysql的數(shù)據(jù)庫中的user表中創(chuàng)建一行:

第二行語句是賦予賬號slave同步binlog的權(quán)限,實際就是將Repl_slave_priv字段改為Y:

6. master數(shù)據(jù)庫中運行show master status? :

File和Position這兩個參數(shù)值記錄一下,后面會用。
7. 給slave 數(shù)據(jù)庫配置連接到master的信息:
上面的語句最好一步步運行,先運行stop slave,然后是中間的配置語句,最后是start slave,這樣可以觀察是否都成功。
master_log_file、master_log_pos 是用于說明從哪個binlog文件的哪個位置開始同步。
會存在多個binlog文件的,每次重啟mysql服務(wù),或者運行flush logs語句,都會創(chuàng)建一個新的binlog文件。
stop slave、start slave用于停止、啟動線程,因為slave 數(shù)據(jù)庫完成復制工作是靠單獨的線程來完成的。
需要注意的是get_master_public_key, 這個參數(shù)在低版本的mysql上可以沒有,但是在mysql8.0上必須有,否則報錯。
8. 當運行完start slave后,主從復制就已經(jīng)開始工作。?可以通過show slave status語句查看是否正常工作:

如果上面兩項都是Yes,說明正常工作了,否則就是出錯誤了。
Slave_IO_Running是?I/O線程,用于從master讀取binlog,并存儲到relay log中繼日志文件中。
Slave_SQL_Running是 SQL線程,用于讀取中繼日志,在從庫重放,就是重新運行一遍。
9.測試
在master中的admin表中添加一行記錄:

然后查看slave 數(shù)據(jù)庫中是否有相同的數(shù)據(jù)。