Mysql 讀寫分離、主從複製

1、mysql主從複製原理
①、mysql的複製類型
基於語句的複製
基於行的複製
混合類型的複製
②、mysql主從複製的工作原理
主服務器 master 記錄數據庫通過 dump 線程將操作記錄到 Binary log
從服務器開啓 I/O 線程向主服務器發送同步日誌請求
主服務器把二進制日誌內容發送給從服務器
從服務器將二進制日誌記錄的操作同步到relay log (中繼日誌) (存在從服務器的緩存中)
從服務器中的sql線程將relay log日誌記錄的操作在從服務器執行後寫入從服務器數據庫。
2、mysql讀寫分離原理
讀寫分離就是隻在主服務器上寫,只在從服務上讀;
主數據庫處理事務性查詢,從數據庫處理 select 查詢;
數據庫複製被用來把事務性查詢導致的變更同步到集羣中的從數據庫
3、部署主從同步
①、主從服務器設置時間同步
 

1、主服務器(192.168.20.10)

yum -y install ntp

vim /etc/ntp.conf
末行添加
server 127.127.20.0					#設置本地是時鐘源,注意修改網段
fudge 127.127.20.0 stratum 8		#設置時間層級爲8(限制在15內)

systemctl start ntpd


2、從服務器(192.168.20.20 ,192.168.20.40)
yum -y install ntp ntpdate

systemctl start ntpd
/usr/sbin/ntpdate 192.168.20.10			
#進行時間同步,指向Master服務器IP


crontab -e
*/30 * * * * /usr/sbin/ntpdate 192.168.20.10

②、服務器安裝mysql

創建 mysql 用戶
useradd -s /sbin/nologin mysql

##安裝依賴包
yum -y install \
gcc \
gcc-c++ \
make \
pcre-devel \
expat-devel \
perl \
ncurses-devel \
autoconf \
cmake

##編譯
cd /opt/mysql-5.6.26
cmake  \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DSYSCONFIDIR=/etc \
-DMYSQL_DATADIR=/home/mysql/ \
-DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock

make && make install


##支持環境變量(mysql命令)
echo export PATH=$PATH:/usr/local/mysql/bin/ >>/etc/profile
export PATH=$PATH:/usr/local/mysql/bin/
source /etc/profile

cd /opt/mysql-5.6.26
cp support-files/my-default.cnf /etc/my.cnf

##爲保證安全,根據最小權限原則,給予myql目錄權限
chown -R mysql.mysql /usr/local/mysql/

cp support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
chkconfig --add /etc/init.d/mysqld
chkconfig mysqld --level 35 on

vi /etc/init.d/mysqld
##修改數據文件目錄和工作目錄
basedir=/usr/local/mysql
datadir=/home/mysql

/usr/local/mysql/scripts/mysql_install_db \
--user=mysql \
--ldata=/var/lib/mysql \
--basedir=/usr/local/mysql \
--datadir=/home/mysql

service mysqld start

③、配置數據庫規則

1、主服務器
vim /etc/my.cnf
server_id = 1
log_bin=master-bin			#添加,主服務器開啓二進制日誌
log_slave=updates=true		#添加,允許從服務器更新二進制日誌

systemctl restart mysqld

mysql -u root -p
#給從服務器授權,允許其複製所有數據庫的所有表(第一個賬戶)
grant replication slave on *.* to 'myslave'@'192.168.20.%' identified by '12345';			

flush privileges;

查看master數據庫狀態
show master status\G

#java項目www.fhadmin.org
2、從服務器
vim /etc/my.cnf
server-id = 2						#修改,注意id與Master的不同,兩個Slave的id也要不同
relay-log=relay-log-bin				#添加,開啓中繼日誌,從主服務器上同步日誌文件記錄到本地
relay-log-index=slave-relay-bin.index	#添加,定義中繼日誌文件的位置和名稱

systemctl restart mysqld

mysql -u root -p
change master to master_host='192.168.20.10' , master_user='myslave',master_password='12345',master_log_file='master-bin.000001',master_log_pos=412;
##配置同步,注意 master_log_file 和 master_log_pos 的值要與Master查詢的一致,這裏的是例子,每個人的都不一樣

start slave;				#啓動同步,如有報錯執行 reset slave;
show slave status\G			#查看 Slave 狀態

##確保 IO 和 SQL 線程都是 Yes,代表同步正常
Slave_IO_Running: Yes		#負責與主機的io通信
Slave_SQL_Running: Yes	    #負責自己的slave mysql進程

4、部署讀寫分離

①、安裝amoeba

將jdk-6u14-linux-x64.bin 和 amoeba-mysql-binary-2.2.0.tar.gz.0 上傳到/opt目錄下

cd /opt/
cp jdk-6u14-linux-x64.bin /usr/local/

cd /usr/local/
chmod +x jdk-6u14-linux-x64.bin 
./jdk-6u14-linux-x64.bin
##按空格到最後一行
  按yes,按回車

mv jdk1.6.0_14/ /usr/local/jdk1.6

vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin

source /etc/profile
java -version

#java項目www.fhadmin.org
##安裝 Amoeba軟件##
mkdir /usr/local/amoeba
tar zxvf /opt/amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba/
chmod -R 755 /usr/local/amoeba/
/usr/local/amoeba/bin/amoeba

##如顯示amoeba start|stop 說明安裝成功

②、配置讀寫分離

1、服務器上配置amoeba對接
grant all on *.* to test@'192.168.20.%' identified by '12345';

#java項目www.fhadmin.org
2、amoeba服務器上配置服務器對接
cd /usr/local/amoeba/conf/

cp amoeba.xml{,.bak}
vim amoeba.xml					
##修改amoeba配置文件

30修改
<property name="user">amoeba</property>

32修改
<property name="password">12345</property>

115修改
<property name="defaultPool">master</property>

117去掉註釋–
<property name="writePool">master</property>
<property name="readPool">slaves</property>


cp dbServers.xml{,.bak}
vim dbServers.xml				##修改數據庫配置文件

##23修改
<property name="schema">mysql</property>

##26修改
<!-- mysql user -->
<property name="user">test</property>

##28-30去掉註釋
<property name="password">12345</property>

##45修改,設置主服務器的名Master
<dbServer name="master"  parent="abstractServer">

##48修改,設置主服務器的地址
<property name="ipAddress">192.168.20.10</property>

##52修改,設置從服務器的名slave1
<dbServer name="slave1"  parent="abstractServer">

##55修改,設置從服務器1的地址
<property name="ipAddress">192.168.20.20</property>

##58複製上面6行粘貼,設置從服務器2的名slave2和地址
<dbServer name="slave2"  parent="abstractServer">
<property name="ipAddress">192.168.20.40</property>

##65修改
<dbServer name="slaves" virtual="true">

##71修改
<property name="poolNames">slave1,slave2</property>

/usr/local/amoeba/bin/amoeba start &	##啓動Amoeba軟件,按ctrl+c 返回
netstat -anpt | grep java				##查看8066端口是否開啓,默認端口爲TCP 8066

 

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