1. 程式人生 > >mysql主從複製學習記錄

mysql主從複製學習記錄

什麼是主從複製

 對MySQL-A資料庫的操作,在資料庫執行後,都會寫入本地的日誌系統A中。

 假設,實時的將變化了的日誌系統中的資料庫事件操作,在MYSQL-A的3306埠,通過網路發給MYSQL-B。

 MYSQL-B收到後,寫入本地日誌系統B,然後一條條的將資料庫事件在資料庫中完成。

 那麼,MYSQL-A的變化,MYSQL-B也會變化,這樣就是所謂的MYSQL的複製,即MYSQL replication。

簡單一句話概括:主資料庫變化將生成日誌檔案放在本地,從資料庫通過網路請求拿到資料庫日誌檔案寫到自己的庫中,保證資料一致

主從複製問題:即便不考慮網路的因素,MYSQL-A的資料庫操作是可以併發的執行的,但是MYSQL-B只能從日誌中讀一條一條執行下。因此MYSQL-A的寫操作很頻繁,MYSQL-B很可能跟不上。

解決辦法:清除所有資料,重新同步

主從複製的作用:1資料防丟失2備份3讀寫分離4資料庫負載均衡5高可用

主從複製用法

1,伺服器準備

192.168.200.141  主伺服器 master

192.168.200.142  從伺服器slave

2,修改主伺服器配置檔案

2.1編輯檔案

vi /etc/my.cnf  新增以下內容
server_id=141  ###伺服器id
log-bin=mysql-bin   ###開啟日誌檔案

2.2重啟資料庫

service mysqld stop
service mysqld start

2.3主伺服器給從伺服器賬號授權

GRANT REPLICATION SLAVE ON *.* to 'mysync'@'%' identified by 'q123456';
//一般不用root帳號,“%”表示所有客戶端都可能連,只要帳號,密碼正確,此處可用具體客戶端IP代替,如192.168.145.226,加強安全。

2.4登入主伺服器的mysql,查詢master的狀態

2.5檢視ID是否生效

3,修改從伺服器配置檔案

server_id=142
log-bin=mysql-bin
binlog_do_db=pboss

剩下步驟效驗和主伺服器不變,不過多截圖

3.1啟動同步

stop slave
change master to master_host='192.168.200.141',master_user='mysync',master_password='q123456',
         master_log_file='mysql-bin.000002',master_log_pos=521;
start slave

host為主資料庫IP,user和pass為主資料庫授權賬號密碼,下面兩個引數為主伺服器執行

show master status;

所得到的引數

4檢查從伺服器複製功能狀態

SHOW SLAVE STATUS

從伺服器執行這個命令

若這兩個引數均為yes,則成功,此時更改主資料庫,從資料庫資料相應變化,但更改從資料庫,主資料庫不變

遇到問題:

1..若是報錯Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work

原因:資料庫為copy的,所以資料庫的UUID為一樣的

解決辦法:將/usr/local/mysql/auto.cnf檔案刪除,按上面重啟資料庫方法重啟資料庫即可

2..給賬號分配許可權

grant all privileges on *.* to 'root'@'172.27.185.1' identified by 'root';

一般不建議用root許可權賬號,這個是需要IP地址的授權,安全性更高