標籤:
Mysql中主從複製的原理、配置過程以及實際案例
1.什麼是主從複製?
原理:主從分離,什麼意思呢?我們不妨畫個圖看看。1所示:
2.準備工作:預備兩台伺服器,我這裡使用虛擬機器安裝了兩個Centos6.7_64位作業系統,並分別在兩台伺服器上安裝mysql。我的IP地址分別為:192.168.1.15/192.168.1.16,這裡我定義15為主伺服器,16為從伺服器。
首先,我們編輯主伺服器中mysql設定檔。(因我的mysql使用非root使用者安裝,因此設定檔放在/home/formal/mysql/目錄下,非root使用者安裝步驟可參考我的CSDN部落格:http://blog.csdn.net/xushouwei/article/details/52227975)
在編輯mysql設定檔之前你要考慮,在一個機房裡,一主多從,或者是主主複製或者是被動模式的主主複製等多種情況,那麼這多台伺服器之間相互他們日誌複製來binlog,複製來複製去會不會亂了呢?真有可能會亂,那麼碰到這樣情況你怎麼辦?因此,我們要給每一台伺服器起一個獨特的server-id。那麼這個id呢,正常情況下做主從伺服器都會在同一個區域網路內,因同意個區域網路內IP前三段都一樣,只有最後一段不一樣,所以我們一般都是拿ip的末尾一段作為server-id,當然這不是硬性的規定,只是習慣而已。因此我們開始配置my.cnf檔案。
添加如下配置:
log-bin=mysql-bin
binlog_format=mixed
server-id=15
2所示:
對於配置中主binlog-format=row/statement的解釋:
statement:記錄執行語句,例如update...
row:記錄的是磁碟變化
到底哪個好?
update age=age+1 where id=3;//語句長而磁碟變化少,宜用row
update set money=money+1000;//語句短而變化多,宜用statement
如果以上兩個你拿不準,請使用mixed,由系統根據語句來決定。
進入/home/formal/mysql/data目錄並查看以前mysql日誌資訊,刪除以前的log主伺服器日誌資訊
cd /home/formal/mysql/data
ll
rm -rf ./mysql-bin.*
3所示:
至此,我們的主伺服器就配置好了,接下來我們來配置一下從伺服器...
首先我們需要配置/home/formal/mysql/目錄下mysql.cnf檔案。
vi /home/formal/mysql/mysql.cnf
添加如下配置:
log-bin=mysql-bin
binlog_format=mixed
server-id=16
relay-log=mysql-relay
同樣,進入/home/formal/mysql/data目錄並查看以前mysql日誌資訊,刪除以前的log主伺服器日誌資訊
cd /home/formal/mysql/data
ll
rm -rf ./mysql-bin.*
4所示:
以上主從伺服器相關配置已經完成,那麼我們開始正式測試這個功能!
首先登陸主伺服器,進入/home/formal/mysql目錄登陸mysql
cd /home/formal/mysql/bin
./mysql -uroot -pxushouweidb
5所示:
用同樣的方式登陸從伺服器
cd /home/formal/mysql/bin
./mysql -uroot -pxushouweidb
6所示:
在主伺服器上為從伺服器帳號授予讀取許可權
grant replication client,replication slave on *.* to [email protected]‘192.168.1.%‘ identified by ‘xushouweidb‘;
flush privileges;
7所示:
在從伺服器通過語句指定要複製的主伺服器(注意,可以一主多從,不可一叢多主),在使用下面語句之前,我們需要只要當前主伺服器記錄檔走到哪了,使用show master status查看.
show master status;
8所示:
在從伺服器執行下面語句
change master to
master_host=‘192.168.1.15‘,
master_user=‘xushouwei‘,
master_password=‘xushouweidb‘,
master_log_file=‘mysql-bin.000011‘,
master_log_pos=540;
9所示:
在從伺服器上查看兩台伺服器狀態有麼有打通
show slave status \G
10所示:
啟動從伺服器功能,再次查看狀態。
start slave;
show slave status \G
11-1,11-2所示:
發現報錯,這是啥原因呢?
我們不妨看看我們從從伺服器串連主伺服器
ping 192.168.1.15
12所示:
我們發現能ping通,網路是通的,那究竟是什麼原因呢?根據經驗,我們最能懷疑的就是防火牆的問題,由此我們關閉主伺服器的防火牆試試。
service iptables stop
這裡你也可以在主伺服器添加防火牆連接埠的方式處理,為了方便我這裡就直接使用關閉防火牆的形式去處理該問題,一般情況下內部區域網路是不需要使用防火牆的 ,不然會影響效率。
13所示:
因此,我們再次嘗試啟動,再次查看狀態。
start slave;
show slave status \G
14所示:
這時已經不報錯了,說明已經成功!開始進行測試吧!
3.實戰測試
分別查看主從伺服器都有哪些資料庫
主伺服器:
show databases;
15所示:
從伺服器:
show databases;
16所示:
由此,我們先在主伺服器上建立資料庫demo,並再次查看主伺服器有哪些資料庫。
create database demo;
show databases;
17所示:
這時候我們在查看從伺服器有哪些資料庫。
show databases;
18所示:
看見沒有?從伺服器是不是多了一個demo資料庫?
不信咱再測試一下...
我們使用主伺服器的demo,然後建立一張student表,並插入兩條資料,看看從伺服器是不是自動的為我們建立sutent表,表中並包含我們剛從主伺服器中插入的兩條資料。我們測試一下:
use demo;
create table stutent
(
id int primary key AUTO_INCREMENT,
name varchar(20),
age varchar(20)
);
insert into stutent values(1,‘徐守威1‘,‘24‘);
insert into stutent values(2,‘徐守威2‘,‘23‘);
19所示:
處理完後,我們緊接著查看一下從伺服器是不是多了一張表,並且裡面有兩條資料。
20所示:
好了,mysql主從複製的問題我們就先瞭解到這裡!
Mysql中主從複製的原理、配置過程以及實際案例