17.1 MySQL主從介紹 17.2 準備工做 17.3 配置主 17.4 配置從 17.5 測試主從同步

17.1 MySQL主從介紹

MySQL主從又叫作Replication、AB複製。簡單講就是A和B兩臺機器作主從後,在A上寫數據,另一臺B也會跟着寫數據,二者數據實時同步的
MySQL主從是基於binlog的,主上須開啓binlog才能進行主從。

主從過程大體有3個步驟
1)主將更改操做記錄到binlog裏
2)從將主的binlog事件(sql語句)同步到從本機上並記錄在relaylog(中繼日誌)裏
3)從根據relaylog裏面的sql語句按順序執行

主上有一個log dump線程,用來和從的I/O線程傳遞binlog
從上有兩個線程,其中I/O線程用來同步主的binlog並生成relaylog,另一個SQL線程用來把relaylog裏面的sql語句落地

使用場景: 
1 數據庫備份 
2 數據庫備份, 客戶端也要到 從數據庫上讀數據, 但不能到 從數據庫上寫數據.  減輕主庫讀的壓力.

17.2 準備工做

主和從上分別安裝mysql, 數據庫版本最好一致.mysql

17.3 配置主

主上操做:

修改my.cnf,增長
server-id=130
log_bin=aminglinux1




修改完配置文件後,啓動或者重啓mysqld服務

mysql數據目錄下會生成相應的文件, 這些文件是實現主從的根本.



把mysql庫和zrlog庫備份, 並把mysql庫恢復成aming庫,做爲測試數據
mysqldump -uroot -p123456 mysql > /tmp/mysql.sql
mysqldump -uroot -p123456 zrlog > /tmp/zrlog.sql


mysql -uroot -p123456 -e 'create database aming'
mysql -uroot aming < /tmp/mysql.sql

建立用做同步數據的用戶
# grant replication slave on *.* to 'repl'@slave_ip identified by '密碼';    //slave_ip 從數據庫服務器的ip

grant replication slave on *.* to 'repl'@192.168.192.135 identified by '123456';    //slave_ip 從數據庫服務器的ip

flush tables with read lock;   // 爲了保持數據一致,  把表鎖一下, 不繼續寫.   一會從要同步,

show master status;    //要記住file 和position , 從數據庫  要動到

17.4 配置從

安裝mysql

從上操做:

查看my.cnf
配置server-id=132,要求和主不同

修改完配置文件後,啓動或者重啓mysqld服務

把主上aming庫同步到從上
能夠先建立aming庫,而後把主上的/tmp/mysql.sql拷貝到從上,而後恢復(導入)aming庫和zrlog庫.
要保證主和從上數據庫和表都一致, 很是關鍵

mysql -uroot -p123456 -e 'create database aming'
scp 192.168.192.134:/tmp/*.sql  /tmp

mysql -uroot -p123456 aming < /tmp/mysql.sql
mysql -uroot -p123456 zrlog  < /tmp/zrlog.sql

開始實現主從

登陸從mysql

stop slave;

#實現主從很是關鍵的一步
#change master to master_host='', master_user='repl', master_password='', master_log_file='', master_log_pos=xx,
端口默認是3306 能夠不寫master_port, master_log_file就是主上 show master status後 File的內容,  master_log_pos就是主上Position


change master to master_host='192.168.192.134', master_port=33060, master_user='repl', master_password='123456', master_log_file='aminglinux1.000002', master_log_pos=1040;

start slave;


看看主從有沒有配置成功, 成功則顯示2個Yes
show slave status\G



其餘關鍵指標:



還要到主上執行 unlock tables;  // 恢復寫操做

17.5 測試主從同步

主服務器上
binlog-do-db=      //僅同步指定的庫, 如 binlog-do-db=blog   多個用逗號分割
binlog-ignore-db= //忽略指定庫, 多個用逗號分割
從服務器上
replicate_do_db=    
replicate_ignore_db= 
replicate_do_table=   
replicate_ignore_table=  
以上4條會忽略某庫某表,好比使用了replicate_ignore_db, 當過濾到use aming 這個語句時,會忽略後面的sql語句, 會致使聯合查詢的數據不完整,最好不用

replicate_wild_do_table=   //如aming.%, 支持通配符%,  (數據庫名).%   %表示所有表
replicate_wild_ignore_table=   //如aming.%, 若是sql語句中用的是aming.tb1,則會忽略這條語句的。


測試
主上 mysql -uroot -p123456 aming 
select count(*) from user;
truncate table user;


到從上 mysql -uroot -p123456 aming
select count(*) from user;

主上繼續
drop table user;
show tables;

從上查看db表 show tables;
相關文章
相關標籤/搜索