簡單實踐實現 MySQL 主從複製

lxzoliver發表於2020-07-01

測試伺服器使用centos7.2進行相關配置

文章內容參考mysql資料庫的主從同步,實現讀寫分離

概敘

大型網站為了軟解大量的併發訪問,除了在網站實現分散式負載均衡,遠遠不夠。到了資料業務層、資料訪問層,如果還是傳統的資料結構,或者只是單單靠一臺伺服器來處理如此多的資料庫連線操作,資料庫必然會崩潰,特別是資料丟失的話,後果更是不堪設想。這時候,我們會考慮如何減少資料庫的連線,下面就進入我們今天的主題。

利用主從資料庫來實現讀寫分離,從而分擔主資料庫的壓力。在多個伺服器上部署mysql,將其中一臺認為主資料庫,而其他為從資料庫,實現主從同步。其中主資料庫負責主動寫的操作,而從資料庫則只負責主動讀的操作(slave從資料庫仍然會被動的進行寫操作,為了保持資料一致性),這樣就可以很大程度上的避免資料丟失的問題,同時也可減少資料庫的連線,減輕主資料庫的負載。

安裝mysql

伺服器安裝mysql我參考了以下兩篇文章

Centos7.2安裝Mysql5.7(阿里雲)

Centos7 遠端無法連線mysql資料庫

在安裝資料庫過程中,由於遠端無法連線踩了一些坑,首先在配置完成資料庫後,需要資料庫授權允許訪問,然後開啟防火牆設定,將3306埠開啟,允許通過資料庫管理工具通過埠訪問資料庫,我就是在沒有設定開啟防火牆這塊一直踩坑。

在測試的兩臺伺服器都分別安裝了mysql,並同時匯入測試資料庫

主從複製配置

主伺服器配置

修改主伺服器mysql配置,檔案位於/etc/my.cnf


#在[mysqld]中新增:
server-id=1
log_bin=master-bin
log_bin_index=master-bin.index
binlog_do_db=master

#server-id 伺服器唯一標識。
#log_bin 啟動MySQL二進位制日誌,即資料同步語句,從資料庫會一條一條的執行這些語句。
#binlog_do_db 指定記錄二進位制日誌的資料庫,即需要複製的資料庫名,如果複製多個資料庫,重複設定這個選項即可。
#binlog_ignore_db 指定不記錄二進位制日誌的資料庫,即不需要複製的資料庫名,如果有多個資料庫,重複設定這個選項即可。
#其中需要注意的是,binlog_do_db和binlog_ignore_db為互斥選項,一般只需要一個即可。

建立使用者和許可權

grant replication slave on . to masterbackup@’%’ identified by ‘123456’;

%萬用字元,表示任意IP都可訪問主伺服器,正式環境請配置指定從伺服器IP

建立完成後,通過命令重啟mysql服務

service mysql restart

通過命令show master status檢視狀態

實踐實現MySQL主從複製

slave從伺服器的配置

同樣修改位於/etc/my.cnf目錄下的配置


#在[mysqld]中新增:
server-id=2
relay-log=slave-relay-bin
relay-log-index=slave-relay-bin.index
#replicate-do-db=master


#server-id 伺服器唯一標識,如果有多個從伺服器,每個伺服器的server-id不能重複,跟IP一樣是唯一標識,如果你沒設定server-id或者設定為0,則從伺服器不會連線到主伺服器。
#relay-log 啟動MySQL二進位制日誌,可以用來做資料備份和崩潰恢復,或主伺服器掛掉了,將此從伺服器作為其他從伺服器的主伺服器。
#replicate-do-db 指定同步的資料庫,如果複製多個資料庫,重複設定這個選項即可。若在master端不指定binlog-do-db,則在slave端可用replication-do-db來過濾。
#replicate-ignore-db 不需要同步的資料庫,如果有多個資料庫,重複設定這個選項即可。
#其中需要注意的是,replicate-do-db和replicate-ignore-db為互斥選項,一般只需要一個即可。

通過命令重啟mysql服務

service mysql restart

連線主資料庫


#連線master主伺服器
mysql> change master to master_host='103.246.246.225',master_port=3306,master_user='masterbackup',master_password='123456',master_log_file='master-bin.000001',master_log_pos=120;

#master_host對應主伺服器的IP地址。
#master_port對應主伺服器的埠。
#master_log_file對應show master status顯示的File列:master-bin.000001。
#master_log_pos對應show master status顯示的Position列:120

啟用slave同步資料

#啟動slave資料同步
mysql> start slave;

#停止slave資料同步(若有需要)
mysql> stop slave;

檢視slave資訊

通過命令show slave status\G;檢視slave資訊

實踐實現MySQL主從複製

Slave_IO_Running和Slave_SQL_Running都為yes,則表示同步成功。

測試

實踐實現MySQL主從複製

在隨便一張資料表中插入一筆資料

實踐實現MySQL主從複製

檢視從資料庫相應表

實踐實現MySQL主從複製

可以檢視到,從資料庫已成功同步相應資料!!

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章