一、實現MySQL的主從複製
1、準備兩臺安裝了MySQL服務器的虛擬主機,實現過程如圖所示
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
驗證:
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
驗證:
5、開始構建主從複製架構
5.1、查看主服務器的日誌
mysql> show master status;
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
啓動從服務器
mysql> start slave;
再次查看從服務器狀態,看從服務器是否啓動成功
到此主從複製架構就完成啦
5.3、開始驗證主從複製
在主服務器上創建數據,在從服務器上會不會出現
mysql> create database magedudb;
在從服務器上查看
mysql> create database magedudb;
注意:此時在從服務器創建數據庫,主服務器是不會有的,從服務器不允許有寫操作,但是隻讀功能對具有super權限的用戶不生效
設置從服務器只讀
mysql> show global variables like'read%%'; (查看服務器的只讀是否開啓)
在從服務器的配置文件中修改爲只讀
# vim /etc/my.cnf
read-only = ON
# service mysqld restart 重啓服務
查看複製線程在重啓後能否自動啓動
這裏還需要注意的是:在/mydata/data目錄下有兩個文件是實現mysql開機自動啓動的重要文件master.info ,master.info 這兩個文件的屬性也很特殊
配置主服務器同步二進制日誌,可以減輕主從數據庫不一致,在主服務器上設置,用於事務安全
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%'; 查看設置是否成功
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%'; 查看設置是否成功
3、驗證半同步複製是否生效
在主服務器上執行如下命令
mysql> show global status like 'rpl_semi%';
4、在主服務器上創建數據庫
mysql> use magedudb;
mysql> create table tb1 (id int);
將slave服務器端的IO停掉
mysql> stop slave;
此時再在主服務器上創建表
若第一次連接超時,第二次會自動降級爲異步複製
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