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地址的授權,安全性更高