溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MySQL數(shù)據(jù)庫(kù)進(jìn)階篇——主從同步與讀寫(xiě)分離

發(fā)布時(shí)間:2020-02-27 07:31:26 來(lái)源:網(wǎng)絡(luò) 閱讀:131 作者:qq5d47f509174fe 欄目:MySQL數(shù)據(jù)庫(kù)

MySQL數(shù)據(jù)庫(kù)進(jìn)階篇——主從同步與讀寫(xiě)分離

主從同步

實(shí)驗(yàn)準(zhǔn)備

總共四臺(tái)虛擬機(jī),一臺(tái)應(yīng)用端,一臺(tái)amoeba,一臺(tái)主服務(wù)器,一臺(tái)從服務(wù)器

? 應(yīng)用端: centos7-2(實(shí)驗(yàn)前已裝MySQL)

? amoeba: centos7-1(無(wú)MySQL)

? 主服務(wù)器: centos7-3(實(shí)驗(yàn)前已裝MySQL)

? 從服務(wù)器: centos7-4(實(shí)驗(yàn)前已裝MySQL)

主服務(wù)器設(shè)置

安裝時(shí)間同步服務(wù)

[root@master ~]# yum install ntp -y
#修改ntp配置文件
[root@master ~]# vim /etc/ntp.conf  
    server 127.127.195.0        //本地是時(shí)鐘源,195段落//
    fudge 127.127.195.0 stratum 8       //設(shè)置時(shí)間層級(jí)為8//
###開(kāi)啟服務(wù)
[root@master ~]# systemctl start ntpd

修改MySQL主配置文件

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

進(jìn)入數(shù)據(jù)庫(kù)修改

[root@master ~]# mysql -u root -p
grant replication slave on *.* to 'myslave'@'192.168.142.%' identified by 'asd123';
    #允許從服務(wù)器使用myslave賬戶在主服務(wù)器上進(jìn)行復(fù)制操作
show master status;   #查看主服務(wù)器信息
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)
從服務(wù)器設(shè)置

安裝同步服務(wù)客戶端ntpd

[root@slave ~]# yum install ntp ntpdate -y

#開(kāi)啟服務(wù)關(guān)防火墻
[root@slave ~]# systemctl start ntpd
[root@slave ~]# systemctl stop firewalld
##進(jìn)行時(shí)間同步
[root@slave ~]# /usr/sbin/ntpdate 主服務(wù)器地址

修改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

進(jìn)入數(shù)據(jù)庫(kù)修改

[root@slave ~]# mysql -u root -p123123
change master to master_host='192.168.142.135',master_user='myslave',master_password='asd123',master_log_file='mysql-bin.000005',master_log_pos=865;
    ##授予權(quán)限
start slave;
###查詢同步是否成功
show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Reconnecting after a failed master event read
                  Master_Host: 192.168.142.132
                  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連接
            ......

PS:

? 有時(shí)候做主從同步時(shí)會(huì)遇見(jiàn)Slave_SQL_Running: NO的問(wèn)題,以下是解決方法:

####Slave_SQL_Running: No問(wèn)題解決方案
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主從同步已經(jīng)完成,下面就是開(kāi)始進(jìn)行動(dòng)靜分離


MySQL讀寫(xiě)分離

實(shí)驗(yàn)準(zhǔn)備

以下實(shí)驗(yàn)全部基于主從同步的基礎(chǔ)上進(jìn)行

#總共四臺(tái)虛擬機(jī),一臺(tái)應(yīng)用端,一臺(tái)amoeba,一臺(tái)主服務(wù)器,一臺(tái)從服務(wù)器

? 應(yīng)用端:centos7-2(有MySQL)

? amoeba: centos7-1(無(wú)MySQL)

? 主服務(wù)器: centos7-3(有MySQL)

? 從服務(wù)器: centos7-4(有MySQL)

設(shè)置amoeba服務(wù)器

安裝jdk環(huán)境(amoeba由java開(kāi)發(fā))

[root@amoeba ~]# systemctl stop firewalld.service   #關(guān)閉防火墻
[root@amoeba ~]# setenforce 0
[root@amoeba mnt]# cp -p jdk-6u14-linux-x64.bin /usr/local/  #移動(dòng)事先準(zhǔn)備好的jdk包
[root@amoeba mnt]# cd /usr/local/
[root@amoeba local]# ./jdk-6u14-linux-x64.bin       #安裝jdk環(huán)境
[root@amoeba local]# mv jdk1.6.0_14/ jdk1.6
##配置jdk環(huán)境變量
[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   #解壓事先準(zhǔn)備好的工具包
[root@amoeba local]# chmod -R 755 amoeba/    #賦予權(quán)限
##檢查是否安裝成功
[root@amoeba local]# /usr/local/amoeba/bin/amoeba
amoeba start|stop     ##出現(xiàn)以下命令行即為成功

修改主配置文件amoeba.xml

[root@amoeba local]# vim amoeba/conf/amoeba.xml
##按照下圖進(jìn)行修改
#(增加客戶機(jī)訪問(wèn)amoeba的賬戶、密碼)
<property name="user">amoeba</property>
<property name="password">123123</property>
---------------------------------------------------------
#(開(kāi)啟默認(rèn)池、讀取池、寫(xiě)入池)
<property name="defaultPool">master</property>
<property name="writePool">master</property>
<property name="readPool">slaves</property>

修改amoeba有關(guān)數(shù)據(jù)庫(kù)的配置文件dbserver.xml

[root@amoeba local]# vim amoeba/conf/dbServers.xml
## 按照下圖進(jìn)行修改
#(修改amoeba訪問(wèn)節(jié)點(diǎn)服務(wù)器的賬戶、密碼)
<!-- mysql user -->
    <property name="user">test</property>
<!--  mysql password  -->
    <property name="password">asd123</property>
-------------------------------------------------------------
#(指定主、從服務(wù)器節(jié)點(diǎn)地址)
<dbServer name="master"  parent="abstractServer">
    <property name="ipAddress">192.168.142.132</property>
<dbServer name="slave"  parent="abstractServer">
    <property name="ipAddress">192.168.142.136</property>
--------------------------------------------------------------
#(將從服務(wù)器劃入讀取地址池中)
<dbServer name="slaves" virtual="true">
    <property name="poolNames">slave</property>

返回主、從服務(wù)器數(shù)據(jù)庫(kù)中

##在主、從服務(wù)器上開(kāi)放訪問(wèn)權(quán)限
[root@slave ~]# mysql -u root -p123123     #進(jìn)入主服務(wù)器數(shù)據(jù)庫(kù)(從服務(wù)器與主服務(wù)器操作相同)
grant all on *.* to test@'192.168.142.%'identified by 'asd123';  #開(kāi)放test用戶訪問(wèn)權(quán)限

開(kāi)啟amoeba服務(wù)器

[root@amoeba conf]# /usr/local/amoeba/bin/amoeba start &   #調(diào)入后臺(tái)持續(xù)運(yùn)行
應(yīng)用客戶端

? 在安裝好MySQL的前提下,輸入mysql -u amoeba -p123123 -h 192.168.142.142 -P8066即可成功訪問(wèn)amoeba服務(wù)器。

? 此時(shí),進(jìn)行讀寫(xiě)操作時(shí)將使用主服務(wù)器master進(jìn)行寫(xiě)入,使用從服務(wù)器slave進(jìn)行讀取。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI