mysql是現在普遍使用的數據庫,但是如果宕機了必然會造成數據丟失。為了保證mysql數據庫的可靠性。就要會一些提高可靠性的技術。
主從復制原理如下。
slave(從服務器) master(主服務器)
mysql主從是異步復制過程
1 master開啟bin-log功能,日志文件用於記錄數據庫的讀寫增刪; 2 需要開啟3個線程,master IO線程,slave開啟 IO線程 SQL線程;
3 Slave 通過IO線程連接master,並且請求某個bin-log,position之后的內容。 4 MASTER服務器收到slave IO線程發來的日志請求信息,io線程去將bin-log內容,position返回給slave IO線程。 5 slave服務器收到bin-log日志內容,將bin-log日志內容寫入relay-log中繼日志,創建一個master.info的文件,
該文件記錄了master ip 用戶名 密碼 master bin-log名稱,bin-log position。 6 slave端開啟SQL線程,實時監控relay-log日志內容是否有更新,解析文件中的SQL語句,在slave數據庫中去執行。
字有點多 上張圖看看。
應該有一定了解了吧。、
准備兩個mysql,一個做主,一個做從。防火牆,selinux都要關閉,保證可以ping通對方
主服務器配置: vi/etc/ntp.conf
添加:
server 127.127.1.0 fudge 127.127.1.0 stratum 8 service ntpd start #因為同步數據 兩個服務器的時間也要同步。
稍后要在從服務器執行來同步時間
vi/etc/my.cnf
在配置文件49行
其他內容都可以保持默認。
---------------------------------------------------------------------------------------------------------
在主服務器登錄mysql 給從服務器授權。
mysql> grant replication slave on *.* to zs@'192.168.43.%' identified by '123456';
授權用戶zs 密碼為123456 允許192.168.43.0的網絡連接 一會兒要在slave上使用這個賬號
----------------------------------------------------------------------------------------
show master status; #此命令查看主服務器的bin-log日志文件名稱和position點
從服務器就是要指定這個文件maste-bin.000001 (隨着mysql增刪修改日志文件名字也有可能改變) 和 107 (position點 主服務器增刪修改都會改變)所以現在開始就不要再在主服務器創表干啥的了,
mysqldump -uroot -p --opt --all-databases >/all_databases.sql #導出主數據庫的數據
scp -r /all_databases.sql root@192.168.43.2:/ #用scp把數據復制到從服務器。
因為主從復制是從主從關系建立完畢開始同步的。也就是現在 position 107之前的內容復制不了所以要手動復制主之前的數據導入從數據庫。
從服務器配置:
/usr/sbin/ntpdate 192.168.43.22 #和主服務器同步時間。192.168.43.22為主服務器ip
mysql -u root -p </all_databases.sql #導入數據
vi /etc/my.cnf
修改后重啟mysql服務
進入從服務器的mysql
change master to master_host='192.168.43.22',master_user='zs',master_password='123456',master_log_file='maste-bin.000001',master_log_pos=107;
start slave; #開啟SQL線程
show slave status\G; 查看從服務器狀態
注意兩個都要是yes才是正常。
查看效果,在主服務器上創建個庫看看。
從數據庫也會有
同樣刪掉數據庫從數據庫也會復制。
主庫上刪除一個數據庫。
從庫上也沒了。所以還是要備份數據庫的。
完畢。希望對你有所幫助
原文鏈接:https://blog.csdn.net/qq_41772936/article/details/80380950