一.主從複製的原理mysql
MySQL複製基於主服務器在二進制日誌中跟蹤全部對數據庫的更改(更新、刪除等等)。每一個從服務器從主服務器接收主服務器已經記錄到其二進制日誌的保存的更新,以便從服務器能夠對其數據拷貝執行相同的更新。
將主服務器的數據拷貝到從服務器的一個途徑是使用LOAD DATA FROM MASTER語句。請注意LOAD DATA FROM MASTER目前只在全部表使用MyISAM存儲引擎的主服務器上工做。而且,該語句將得到全局讀鎖定。
MySQL使用3個線程來執行復制功能,其中1個在主服務器上,另兩個在從服務器上。當發出START SLAVE時,從服務器建立一個I/O線程,以鏈接主服務器並讓它發送記錄在其二進制日誌中的語句。
主服務器建立一個線程將二進制日誌中的內容發送到從服務器。該線程能夠識別爲主服務器上SHOW PROCESSLIST的輸出中的Binlog Dump線程。
從服務器I/O線程讀取主服務器Binlog Dump線程發送的內容並將該數據拷貝到從服務器數據目錄中的本地文件中,即中繼日誌。
第3個線程是SQL線程,是從服務器建立用於讀取中繼日誌並執行日誌中包含的更新。
有多個從服務器的主服務器建立爲每一個當前鏈接的從服務器建立一個線程;每一個從服務器有本身的I/O和 SQL線程。this
其複製過程可用一幅圖說明:spa
二.主從複製過程實現的過程:線程
1.實驗環境:master:IP 192.168.0.13 slave: IP 192.168.0.157
軟件包: mysql-5.1.50-linux-i686-glibc23.tar.gz
2.主服務器Mysql的安裝
1)安裝Mysql:#tar zxvf mysql-5.1.50-linux-i686-glibc23.tar.gz -C /usr/local (直接解壓/usr/local目錄下)
#cd /usr/local
# ln -sv mysql-5.1.50-linux-i686-glibc23/ mysql (建立鏈接)
#cd mysql
2)添加Mysql用戶
#groupadd mysql
#useradd -g mysql mysql
3)裝載原始受權到數據庫:
#chown -R mysql:mysql .
#mkdir /mydata
#chown -R mysql:mysql /mydata
#./scripts/mysql_install_db --datadir=/mydata --user=mysql
#chown -R root .
#cd support-files/
#cp my-large.cnf /etc/my.cnf
4)修改配置文件:vim /etc/my.cnf
在[mysqld]下添加: datadir = /mydata
保存退出
5)#cd .. (回到Mysql目錄下)
#bin/mysqld_safe --user=mysql & (啓動Mysql)
#cp support-files/mysql.server /etc/init.d/mysqld
#chkconfig --add mysqld
#chkconfig mysqld on
6)修改環境變量:
#vim /etc/profile
添加:
#PATH=$PATH:/usr/local/mysql/bin
#source /etc/profile (
7)驗證#mysql
3.從服務器Mysql的安裝與主服務器的安裝過程同樣,此處過程省略,
安裝成功後驗證:
4.主從複製的實現:
1.主服務器:
1)修改配置文件:vim /etc/my.cnf
修改添加:log-bin=master-bin
log-bin-index=master-bin.index (索引文件名字)
server-id = 1
保存退出,重啓服務;
2)爲從服務器添加受權:mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO repl@'192.168.0.%'IDENTIFIED BY '123';
2.從服務器:
1)修改配置文件 vim /etc/my.cnf
server-id = 2 (此處server-id必定不能與主服務器的同樣)
relay-log = relay-bin
relay-log-index = slave-relay-bin.index
2)
OK,主從複製的全部配置過程完成,
三.實驗效果:
在主服務器上新添加一個數據庫:mysql>CREATE DATABASE student;
此時查看從服務器:
在主服務器進行數據庫的添加,表的添加以及數據的查詢等,從服務器均可以進行復制,而且可以進行查詢!