數據庫復制 replication 的實現原理
1:主服務器凡運行語句,都產生一個二進制日志 binlog
2:從服務器不斷讀取主服務器的binlog
3:從主服務讀取到的binlog,轉換為自身可執行的relaylog,
4:執行relaylog
具體實施
本人虛擬機下有兩台linux,IP為199 200
1: 200做從服務器
2: 199mysql,做為主服務器.
3: 保證主從3306端口互通.
4: 配置主服務器,打開binlog
上面就是實現增量備份的思路。下面我具體配置一下
一 、配置二進制日志
server_id = 199
#開啟二進制日志
log-bin=mysql-bin
log-bin-index=master-bin.index
#指定日志格式 位置、語句 和自動選擇(mixed)
binlog_format=mixed
主服務器 配置好,重啟mysql
進入mysql 輸入 show master status; 出現下圖的說明日志文件配好了。
二、授權賬號
二進制文件是數據,也就是獲得了二進制文件就獲得了所以數據,那么問題來了,這么重要的東西要是誰都能訪問,那不壞菜了。。。。。所以主服務器 要給從服務器設置賬號,指定那些才能訪問。
授權給客戶端 那些庫和表 用戶名為root 密碼為root的賬號在ip為192.168.1.200 起作用
grant replication client, replication slave on *.* to 'root'@'192.168.1.200' indentified by 'root' ;
三 從服務器
server_id = 200
relay_log = mysql-relay-bin
log_slave_updates = 1
read_only = 1
server_id是必須的,而且唯一。slave沒有必要開啟二進制日志,但是在一些情況下,必須設置,relay_log配置中繼日志,log_slave_updates表示slave將復制事件寫進自己的二進制日志
有些人開啟了slave的二進制日志,卻沒有設置log_slave_updates,然后查看slave的數據是否改變,這是一種錯誤的配置。所以,盡量使用read_only,它防止改變數據(除了特殊的線程)。
但是,read_only並是很實用,特別是那些需要在slave上創建表的應用。
從服務器 從啟mysql
在mysql 執行 告訴從服務器 從哪個ip 用那個用戶名 密碼 那個日志文件 從什么位置 開始監聽復制
change master to master_host='192.168.1.199',master_user='root',master_password='root',
master_log_file='mysql-bin.000001',master_log_pos=154;
Start slave; 啟動備
show slave status; 查看從服務器狀態
reset slave ; 重置slave狀態.
stop slave; 暫停slave狀態;