兩臺 mysql 服務器:主(master)從(slave),寫進主服務器的數據,從服務器也有一份
其實還有,主主複製之類的別的方案
原理:主執行一條語句,記錄在 binlog,從讀取 binlog(需要把binlog轉換成relaylog) 也執行一遍。
根據原理分析:
- 主服務器要配置binlog?
- 從服務器要配置relaylog?
- 從服務器如何有權讀取master的binlog?
答:授權,master要授予slave賬號
編輯mysql配置文件
一般yum安裝的,路徑爲 /etc/my.conf
我們vim /etc/my.conf
主服務器配置:
# 一般會用 server-id 來區分不同服務(是習慣不是規定)
server-id=201
# 聲明二級制日誌文件爲mysql-bin.xxxx
log-bin=mysql-bin
# 二級制日誌的格式 mixed/row/statement
## statement:二進制記錄執行語句,如update....
## row:二進制記錄的是磁盤變化
## mixed:自動判斷
binlog-format=mixed
二級制日誌的格式哪個好?
// 語句長而磁盤變化少,宜用row
update age=age+1 where id=3
// 語句短而磁盤變化多,宜用statement,所有的工資都加100影響上萬行數據
update salary=salary+100
// 拿不定用mixed混合,會自動判斷
從服務器配置:
server-id=202
log-bin=mysql-bin
binlog-format=mixed
relay-log=mysql-relay
啓動兩臺服務器:
service mysqld start
查看master,slave狀態:
show master status
show slave status
這時slave是不行的,我們需要授予權限:
grant replication client,replication slave on *.* to rep@"192.168.1.%" identified by 'repl'
然後slave拿着賬號來連接:
change master to
master_host="102.168.1.201",
master_user="repl",
master_password="repl",
master_log_filee="mysql-bin.000001",
master_log_pos=348
再查看狀態:
show slave status
發現兩者打通了。
關閉防火牆:
service iptables stop
重啓:
restart slave
這時就完成了,你可以在第一個服務器創建一個數據庫,會發現第二個服務器也有創建