手把手教你實現MySQL的主從複製及半同步複製

一、實現MySQL的主從複製

1、準備兩臺安裝了MySQL服務器的虛擬主機,實現過程如圖所示173307812.png

2、IP地址劃分:

Master

Slave

172.16.50.20

172.16.50.30

3、Master服務器上的配置

3.1、爲MySQL實現需要做的準備工作

創建數據庫目錄

# mkdir /mydata/data –pv

創建用戶

# useradd -r mysql

修改權限

# chown -R mysql.mysql /mydata/data/

3.2、使用mysql-5.5源碼編譯安裝

解壓軟件包

# tar xf mysql-5.5.28-linux2.6-i686.tar.gz-C /usr/local/

創建連接

# cd /usr/local/

ln –sv mysql-5.5.28-linux2.6-i686.tar.gzmysql

修改屬主屬組

# cd mysql

# chown -R root.mysql ./*

初始化數據庫

# scripts/mysql_install_db –user=mysql--datadir=/mydata/data/

提供配置文件

# cp support-files/my-large.cnf /etc/my.cnf

提供服務腳本

# cp support-files/mysql.server/etc/rc.d/init.d/mysqld

添加至服務列表

# chkconfig --add mysqld

編輯配置文件

# vim /etc/my.cnf

# The MySQL server  修改mysqld定義段的內容

log-bin=master-bin 主服務器日誌文件

log-bin-index=master-bin.index  索引文件

innodb_file_per_table= 1

server-id       = 1

datadir =/mydata/data  PID文件路徑

啓動服務

# servicemysqld start

設置環境變量

# vim/etc/profile.d/mysql.sh

export PATH=$PATH:/usr/local/mysql/bin

執行此腳本(導出環境變量)

# . /etc/profile.d/mysql.sh

驗證:

173322870.png

3.3、建立用戶賬號

mysql> grant replication slave on *.* to'repluser'@'172.16.%.%' identified by 'redhat';

刷新權限

mysql> flush privileges;

4、Slave虛擬主機配置

4.1、爲MySQL實現需要做的準備工作

創建數據庫目錄

# mkdir /mydata/data –pv

創建用戶

# useradd -r mysql

修改權限

# chown -R mysql.mysql /mydata/data/

4.2、使用mysql-5.5源碼編譯安裝

解壓軟件包

# tar xf mysql-5.5.28-linux2.6-i686.tar.gz-C /usr/local/

創建連接

# cd /usr/local/

ln –sv mysql-5.5.28-linux2.6-i686.tar.gzmysql

修改屬主屬組

# cd mysql

# chown -R root.mysql ./*

初始化數據庫

# scripts/mysql_install_db –user=mysql--datadir=/mydata/data/

提供配置文件

# cp support-files/my-large.cnf /etc/my.cnf

提供服務腳本

# cp support-files/mysql.server/etc/rc.d/init.d/mysqld

添加至服務列表

# chkconfig --add mysqld

編輯配置文件

# vim /etc/my.cnf

# The MySQL server  修改mysqld定義段的內容

#log-bin=mysql-bin 從服務器不需要日誌文件

datadir = /mydata/data  PID文件路徑

relay-log = relay-log   從服務器必須要有中繼日誌

relay-log-index = relay-log.index  中繼日誌索引

innodb_file_per_table = 1

server-id       = 11  id不要和主服務器的一樣

啓動服務

# servicemysqld start

設置環境變量

# vim/etc/profile.d/mysql.sh

export PATH=$PATH:/usr/local/mysql/bin

執行此腳本(導出環境變量)

# . /etc/profile.d/mysql.sh

驗證:

173338374.png

5、開始構建主從複製架構

5.1、查看主服務器的日誌

mysql> show master status;

173349162.png

5.2、從服務器連接到主服務器上

mysql> change master tomaster_host='172.16.50.20',master_user='repluser',master_password='redhat',master_log_file='master-bin.000006',master_log_pos=337;

查看從服務器狀態

mysql> show slave status\G

173400576.png

啓動從服務器

mysql> start slave;

再次查看從服務器狀態,看從服務器是否啓動成功

173412296.png

到此主從複製架構就完成啦

5.3、開始驗證主從複製

在主服務器上創建數據,在從服務器上會不會出現

mysql> create database magedudb;

在從服務器上查看

mysql> create database magedudb;

173424354.png

注意:此時在從服務器創建數據庫,主服務器是不會有的,從服務器不允許有寫操作,但是隻讀功能對具有super權限的用戶不生效

設置從服務器只讀

mysql> show global variables like'read%%';   (查看服務器的只讀是否開啓)

173505426.png

在從服務器的配置文件中修改爲只讀

# vim /etc/my.cnf

read-only = ON

# service mysqld restart  重啓服務

173522845.png

查看複製線程在重啓後能否自動啓動

173544866.png

這裏還需要注意的是:在/mydata/data目錄下有兩個文件是實現mysql開機自動啓動的重要文件master.info ,master.info 這兩個文件的屬性也很特殊

173558748.png

配置主服務器同步二進制日誌,可以減輕主從數據庫不一致,在主服務器上設置,用於事務安全

mysql> set global sync-binlog = ON

以上就是mysql的主從複製,需要注意一下三點:

1、MySQL的複製可以基於某個數據庫或庫中的默寫表進行復制,要想實現該功能,只需在其配置文件中添加以下配置:
Master:
binlog-do-db=db_name        只複製db_name數據庫
binlog-ignore-db=db_name       不復制db_name數據庫
2、在Master上定義過濾規則,意味着,任何不涉及到該數據庫相關的寫操作都不會被記錄到二進制日誌中,因此不建議在Master上定義過濾規則,並且不建議binlog-do-db與binlog-ignore-db同時定義。
Slave:
replicate_do_db=db_name      只複製db_name數據庫
replicate_ignore_db=db_name    不復制db_name數據庫
replicate_do_table=tb_name     只複製tb_name表
replicate_ignore_table=tb_name  只複製tb_name表
replicate_wild_do_table=test%     只複製以test爲開頭並且後面跟上任意字符的名字的表
replicate_wild_ignore_table=test_ 只複製以test爲開頭並且後面跟上任意單個字符的名字的表
3、如果需要指定多個db或table時,則只需將命令多次寫入

二、Mysql的半同步複製

由於Mysql的複製都是基於異步進行的,在特殊情況下不能保證數據的成功複製,因此在mysql5.5之後使用了來自google補丁,可以將Mysql的複製實現半同步模式。所以需要爲主服務器加載對應的插件。在Mysql的安裝目錄下的lib/plugin/目錄中具有對應的插件semisync_master.so,semisync_slave.so,其中semisync_master.so是主服務器上的插件,而semisync_slave.so則是從服務器上的插件。

1、在主服務器的mysql服務器上執行如下命令

mysql> install pluginrpl_semi_sync_master soname 'semisync_master.so';  安裝模塊
mysql> set global rpl_semi_sync_master_enabled = 1;  啓用半同步複製主節點
mysql> set global rpl_semi_sync_master_timeout = 1000;  超時時間
mysql> show variables like '%semi%';   查看設置是否成功

173634293.png

2、在從服務器的mysql服務器上執行如下命令

mysql> install pluginrpl_semi_sync_slave soname 'semisync_slave.so';  安裝模塊
mysql> set global rpl_semi_sync_slave_enabled = 1;   啓用半同步複製從節點
mysql> stop slave;
mysql> start slave;
mysql> show variables like '%semi%'; 
查看設置是否成功

174226525.png

3、驗證半同步複製是否生效
在主服務器上執行如下命令
mysql> show global status like 'rpl_semi%';

174241906.png

4、在主服務器上創建數據庫

mysql> use magedudb;

mysql> create table tb1 (id int);  

174256379.png

將slave服務器端的IO停掉

mysql> stop slave;

此時再在主服務器上創建表

174309648.png

若第一次連接超時,第二次會自動降級爲異步複製

5、上面的設置重啓服務後會失效的,爲了可以在開機時它還生效,就需要在主配置文件中修改了,在Master和Slave的my.cnf配置文件中編輯
Master

vim /etc/my.cnf
[mysqld]   rpl_semi_sync_master_enabled=1  
rpl_semi_sync_master_timeout=1000     
Slave

vim /etc/my.cnf
[mysqld]  
rpl_semi_sync_slave_enabled=1  
6
、也可通過設置全局變量的方式來設置是否啓動半同步插件:
Master
mysql> set global rpl_semi_sync_master_enabled=1 
取消加載插件
mysql> uninstall plugin rpl_semi_sync_master;
Slave

mysql> set global rpl_semi_sync_slave_enabled = 1;
mysql> uninstall plugin rpl_semi_sync_slave;

上面就是半同步複製的過程。



本文出自 “麗的博客” 博客,請務必保留此出處http://jilili.blog.51cto.com/6617089/1203805


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