MySQL主從複製

MySQL 支持單向、異步複製,複製過程中一個服務器充當主服務器,而一個或多個其它服務器充當從服務器。主服務器將更新寫入二進制日誌文件,並維護文件的一個索引以跟蹤日誌循環。這些日誌可以記錄發送到從服務器的更新。當一個從服務器連接主服務器時,它通知主服務器從服務器在日誌中讀取的最後一次成功更新的位置。 服務器接收從那時起發生的任何更新,然後封鎖並等待主服務器通知新的更新。請注意當你進行復制時,所有對複製中的表的更新必須在主服務器上進行。否則,你必須要小心,以避免用戶對主服務器上的表進行的更新與對從服務器上的表所進行的更新之間的衝突。

單向複製有利於健壯性、速度和系統管理:

· 主服務器/從服務器設置增加了健壯性。主服務器出現問題時,你可以切換到從服務器作爲份。

· 通 過在主服務器和從服務器之間切分處理客戶查詢的負荷,可以得到更好的客戶響應時間SELECT查詢可以發送到從服務器以降低主服務器的查詢處理負荷。但 修改數據的語句仍然發送到主服務器,以便主服務器和從服務器保持同步。如果非更新查詢爲主,該負載均衡策略很有效,但一般是更新查詢。

· 使用複製的另一個好處是可以使用一個從服務器執行備份,而不會干擾主服務器。在備份過程中主服務器可以繼續處理更新。

MySQL 提供了數據庫的同步功能,這對我們實現數據庫的冗災、備份、恢復、負載均衡等都是有極大幫

實驗環境:

Rhel6.5版本虛擬機:

主服務器:172.25.21.18  server18.example.com

從服務器:172.25.21.19  server19.example.com

從服務器:172.25.21.20  server20.example.com

Selinux iptables disabled

Yum install mysql mysql-server -y

mysql_secure_installation  ## mysql初始化,設置密碼爲westos

Master server配置:

Vim /etc/my.cf

增加這幾行:log-bin=mysql-bin##啓動二進制日誌系統

binlog-do-db=westos##二進制需要同步的數據庫名

server-id=1##必須爲1—2^32之間的一個正整數值

binlog-ignore-db=mysql##避免同步mysql用戶配置,以免不必要的麻煩

/etc/init.d/mysqld start

Mysql -pwestos#進去mysql

Mysql>create database westos;

Mysql> show master status;##查看master狀態

wKiom1ectpey1oXWAABjiY03bXU810.png-wh_50

記錄fileposition的值,後面會用到,這個file文件保存在/var/lib/mysql/目錄下,數據庫所執行的每個動作都會保存到這個文件中,我們可以進行查看

Cd /var/lib/mysql

mysqlbinlog mysql-bin.000003

wKioL1ecuA7wLEiXAAJUgKreXG4262.png-wh_50

grant replication slave on *.* to lzk@’172.25.21.19’ identified by ‘westos’; ##創建同步帳號並給於授權。

Slave server配置:

因爲master server已經給slave server授權

Mysql -h 172.25.21.18 -u lzk -pwestos##查看是否授權成功

Vim /etc/my.cnf

Server-id=2##從服務器ID號,不要和主ID相同,如果設置多個從服務器,每個從服務器必須有一個唯一的server-id值,必須與主服務器的以及其它從服務器的不相同,可以認爲server-id值類似於IP地址,這些ID值能唯一識別複製服務器羣集中的每個服務器實例。

/etc/init.d/mysqld start

Mysql -pwestos

Create database westos;

Use westos;

change master to master_host='172.25.21.18', master_user='lzk', master_password='westos', master_log_file='mysql-bin.000003', master_log_pos=974;

Start slave;

Show slave status\G;

wKiom1ecuO_j7fbrAAGfBdIBebc191.png-wh_50

Slave_IO_Running:yes

Slave_SQL_Running:yes

如果都是yes,表示從庫的I/O,Slave_SQL線程都正確開啓.表明數據庫正在同步。當這個的狀態爲Slave_IO_Running: NO,一般都是用戶訪問和網絡的問題

 

驗證:

master server端上:

Mysql>use westos;

Mysql>create table uses (

->username varchar(25) not null,

->password varchar(25) not null

->);

在從服務器上

Mysql>show tables;

會出現master端新建的table。證明數據同步。

 

 

Mysql雙向複製

因爲我所安裝的mysqlmysql-5.1.71-1.el6.x86_645.1版本的,不支持多線程,5.6以上版本支持多線程,以下我會說到,這個mysql的雙向複製我用三臺主機來做實驗。

主機:rhel6.5版本虛擬機

上面所用到的兩臺:

主服務器:server18.example.com 172.25.21.18

從服務器:server19.example.com 172.25.21.19(這個從服務器作爲server20從服務器的master端,server19從服務器複製server18的數據庫信息,然後保存在自己的文件裏,server20從服務器通過讀取server19進行同步數據。)

從服務器:server20.example.com 172.25.21.20

實驗操作:

server19從服務器上配置:

Vim /etc/my.cnf

增加以下幾行: Server-id=2

Log-bin=mysql-bin

Binlog-do-db=westos

Binlog-ignore-db=mysql

Log-slave-updates

/etc/init.d/mysqld restart

server20從服務器上配置:

Yum install -y mysql mysql-server

mysql_secure_installation  ## mysql初始化,設置密碼爲westos

Mysql -pwestos

Create database westos;

Vi /etc/my.cnf

增加以下內容:server-id=3

/etc/init.d/mysqld start

server19從服務器上:

Mysql -pwestos###進入數據庫

執行以下命令:

grant replication slave on *.* to lzk@’172.25.21.20’ identified by ‘westos’; ##創建同步帳號並給於授權。

server20從服務其執行

Mysql -h 172.25.21.18 -u lzk -pwestos##查看是否授權成功

server18上將/var/lib/mysql/mysql-bin.000003 文件scpserver20從服務器上

server20從服務器上執行:

Mysqlbinlog --start-position=341 --stop-position=1122 mysql-bin.000003 | mysql -pwestos##server18主服務器上的數據庫信息在server20從服務其上再執行一遍,生成數據表,這要才能讓它可以進行數據同步。

server20從服務器上:

Mysql -pwestos##進入數據庫

執行以下操作

Use westos

change master to master_host='172.25.21.19', master_user='lzk', master_password='westos', master_log_file='mysql-bin.000001', master_log_pos=186;

Start slave

Show slave status\G##查看slave狀態。是否都爲YES

如果查看的額狀態沒問題,這樣就配置好了,server18是主服務器,作爲server19的數據備份來源,server19作爲server20master,這樣在server18主服務器上的數據庫信息就會同步到這兩個從服務器。

 

 

如果寫操作較少,而讀操作很多時,可以採取這種結構。你可以將讀操作分佈到其它的 slave,從而減小master 的壓力。但是,slave 增加到一定數量時,slave master 的負載以及網絡帶寬都會成爲一個嚴重的問題。這種結構雖然簡單,但是,它卻非常靈活,足夠滿足大多數應用需求。

wKiom1ecuVvRYL4GAACUW4iBNwo784.png-wh_50

當設置 log_slave_updates ,你可以讓 slave 扮演其它 slave master。此時,slave SQL 線程執行的事件寫進行自己的二進制日誌(binary log),然後,其它的 slave 可以獲取這些事件並執行它,從而有效緩解master 的壓力。

wKiom1ecuYniqzHVAAGbJhl2gfE202.png-wh_50




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章