MySQL 主從熱備份(讀寫分離)


讀寫分離的作用

  寫會鎖表,而且比較耗時。如果一個表經常寫入,那么無疑會影響到查詢的效率。所以將經常寫入的數據庫進行讀寫分離之后,會大幅提升讀取效率。

  (實際上,面試時,只會問你知不知道原理,底層是怎么實現的,其實你會不會配不重要。簡單來說,就是主數據庫的binLog二進制日志,記錄了所有對主數據庫的操作,從數據庫就是把主數據庫把這些操作的日志拷貝過去,再執行一次,這樣數據就相同了)。

MySQL讀寫分離的原理

  這個可以了解一下,開發時作用不大。但面試時比問到也不至於啞口無言。

  1、master將改變記錄到二進制日志(binary log)中(這些記錄叫做二進制日志事件,binary log events);  

  2、  slave將master的binary log events拷貝到它的中繼日志(relay log);

  3、 slave重做中繼日志中的事件,將改變反映它自己的數據。

MySQL的主從備份,聽個名詞很高大上,其實都是MySQL原本就實現的了,你只需要簡單配置一下就可以實現。

第一步:保持主從兩個數據庫是同步的,最好事先手動同步一下

第二步:停止兩個數據庫,分別更改配置文件;

  下面我使用如下兩個地址來說明配置過程。

  • 主數據庫:192.168.0.244
  • 從數據庫:192.168.0.8

主服務器數據庫,增加如下配置:

server-id = 244    #這個唯一就OK,一般取IP地址后面的幾位
log-bin = E:\mysql\data\mysql-bin  #日志所在目錄
binlog-do-db = test    #這個是要同步的數據庫

從服務器數據庫,增加如下配置:

server-id = 8    #這個唯一就OK,一般取IP地址后面的幾位
replicate-do-db = test  #這個是要同步的數據庫

第三步,分別重啟兩個服務器的MySQL服務;

  • net stop mysql;
  • net start mysql;

兩個服務器的MySQL服務都要啟動起來;

第四步,主服務器授權Slave權限賬號

GRANT REPLICATION SLAVE ON *.* to 'bu'@'%' identified by '123456';

第五步,登錄主服務器,查詢master狀態;

show master status;

注意結果,結果里面的東西,在下一步會用到。

第六步:登錄從服務器,配置從服務器的Slave

change master to master_host='192.168.0.244',master_user='bu',master_password='123456',
master_log_file='mysql-bin.000004',master_log_pos=516;

master_log_pos是上面查詢出來的Position 516。

第七步、啟動從服務器的Slave

start slave;

第八步、驗證從服務器的Slave服務狀態

show slave status\G

以下兩個狀態必須為Yes。

Slave_IO_Running: Yes    //此狀態必須YES
Slave_SQL_Running: Yes     //此狀態必須YES

如果有一項為No都不會同步成功。

我碰到過Slave_IO_Running為Connecting的。那可能是上面的連接change master to master_host...寫錯了。

第九步、隨意修改下主數據庫的數據,從服務器數據庫立即會更新


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM