MySQL數據庫(主從同步、讀寫分離實戰)

Demo1:MySQL主從同步

實驗環境:

應用端:CentOS 7-2 (192.168.18.149,已裝MySQL)
Amoeba:CentOS 7-1 (192.168.18.128,無MySQL)
主服務器:centOS 7-3(192.168.18.148,已裝MySQL)
從服務器:CentOS 7-4(192.168.18.145,已裝MySQL)

主服務器設置:

安裝時間同步服務:

[root@master ~]# yum install ntp -y
[root@master ~]# vim /etc/ntp.conf  	#修改ntp配置文件
	server 127.127.195.0        //本地是時鐘源,195段落//
	fudge 127.127.195.0 stratum 8       //設置時間層級爲8//
[root@master ~]# systemctl start ntpd

修改MySQL主配置文件:

[root@master ~]# vim /etc/my.cnf
	server-id 10
	log-bin=zhu-bin
	log-slave-updates=ture    ##開啓主從同步
[root@master ~]# systemctl restart mysqld
[root@master ~]# systemctl stop firewalld

進入數據庫修改內容:

[root@master ~]# mysql -u root -p
grant replication slave on *.* to 'myslave'@'192.168.18.%' identified by 'abc123';
#允許從服務器使用myslave賬戶在主服務器上進行復制操作
show master status;   #查看主服務器信息
mysql> mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000005 |      868 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

從服務器設置:

安裝同步服務客戶端ntpd:

[root@slave ~]# yum install ntp ntpdate -y
[root@slave ~]# systemctl start ntpd
[root@slave ~]# systemctl stop firewalld
[root@slave ~]# /usr/sbin/ntpdate 主服務器地址

修改MySQL主配置文件:

[root@slave ~]# vim /etc/ntp.conf
	server-id = 20
	relay-log = relay-bin      ###同步日誌文件到本地
	relay-log-index = slave-bin.index    ##定義日誌文件類型及名稱
[root@slave ~]# systemctl restart mysqld

進入數據庫修改:

[root@slave ~]# mysql -u root -p123123
change master to master_host='192.168.18.148',master_user='myslave',master_password='abc123',master_log_file='mysql-bin.000005',master_log_pos=865;
	##授予權限
start slave;
###查詢同步是否成功
show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Reconnecting after a failed master event read
                  Master_Host: 192.168.142.148
                  Master_User: myslave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
          Read_Master_Log_Pos: 1633
               Relay_Log_File: master1-relay-bin.000011
                Relay_Log_Pos: 1126
        Relay_Master_Log_File: mysql-bin.000004
             Slave_IO_Running: Yes        ##IO連接
            Slave_SQL_Running: Yes        ##SQL連接
            ......

常見問題:

​有時候做主從同步時會遇見Slave_SQL_Running:NO的問題,以下是解決方法:

MariaDB [(none)]> stop slave;                                                       
MariaDB [(none)]> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;
MariaDB [(none)]> start slave; 
MariaDB [(none)]> show slave status\G 

以上爲MySQL主從同步的過程,下面爲動靜分離!


Demo2:MySQL讀寫分離

實驗基於主從同步的基礎上進行

設置Amoeba服務器:

安裝jdk環境:

[root@amoeba ~]# systemctl stop firewalld.service   #關閉防火牆
[root@amoeba ~]# setenforce 0
[root@amoeba mnt]# cp -p jdk-6u14-linux-x64.bin /usr/local/  #移動事先準備好的jdk包
[root@amoeba mnt]# cd /usr/local/
[root@amoeba local]# ./jdk-6u14-linux-x64.bin       #安裝jdk環境
[root@amoeba local]# mv jdk1.6.0_14/ jdk1.6
##配置jdk環境變量
[root@amoeba local]# 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
[root@amoeba local]# source /etc/profile

解壓、安裝Amoeba工具包:

[root@amoeba local]# mkdir amoeba
[root@amoeba local]# tar zxf /mnt/amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba
[root@amoeba local]# chmod -R 755 amoeba/

[root@amoeba local]# /usr/local/amoeba/bin/amoeba			#檢查是否安裝成功
amoeba start|stop     #出現以下命令行即爲成功

修改主配置文件amoeba.xml:

[root@amoeba local]# vim amoeba/conf/amoeba.xml
#增加客戶機訪問amoeba的賬戶、密碼
<property name="user">amoeba</property>
<property name="password">123123</property>
---------------------------------------------------------
#開啓默認池、讀取池、寫入池
<property name="defaultPool">master</property>
<property name="writePool">master</property>
<property name="readPool">slaves</property>

修改amoeba有關數據庫的配置文件dbserver.xml:

[root@amoeba local]# vim amoeba/conf/dbServers.xml
#修改amoeba訪問節點服務器的賬戶、密碼
<!-- mysql user -->
	<property name="user">test</property>
<!--  mysql password  -->
	<property name="password">asd123</property>
-------------------------------------------------------------
#指定主、從服務器節點地址
<dbServer name="master"  parent="abstractServer">
	<property name="ipAddress">192.168.18.148</property>
<dbServer name="slave"  parent="abstractServer">
	<property name="ipAddress">192.168.18.145</property>
--------------------------------------------------------------
#將從服務器劃入讀取地址池中
<dbServer name="slaves" virtual="true">
	<property name="poolNames">slave</property>

返回主、從服務器數據庫中:

[root@slave ~]# mysql -u root -p123123     #進入主服務器數據庫(從服務器與主服務器操作相同)
grant all on *.* to test@'192.168.18.%'identified by 'abc123';  #開放test用戶訪問權限

開啓amoeba服務器:

[root@amoeba conf]# /usr/local/amoeba/bin/amoeba start &   #調入後臺持續運行

應用客戶端的操作:

​在安裝好MySQL的前提下,輸入mysql -u amoeba -p123123 -h 192.168.18.128 -P8066即可成功訪問amoeba服務器。此時,進行讀寫操作時將使用主服務器master進行寫入,使用從服務器slave進行讀取。

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