centos7.2下mysql的主從復制與讀寫分離


centos7.2下mysql的主從復制與讀寫分離:

 1.為什么要配置數據庫集群和主從復制

    一些大型的項目,由於訪問並發量的增多會導致數據庫的壓力倍增,利用redis緩存減少數據庫的壓力,從而提升數據庫的效率單個數據庫同時負責讀寫任務,底層可能會出現鎖的現象:同步鎖,事務鎖,樂觀鎖,悲觀鎖,單個數據庫同時負責讀寫,效率還是不高;配置主從可以分擔數據庫的壓力,進行讀寫分離,所有的數據庫插入,修改等寫入操作從主庫進行所有的數據查詢等讀取操作走從庫,這樣就分擔了單一數據庫的運行壓力。

  2.實現原理:

配置主從結構先在主上打開一個二進制日志的文件(Binary.log),master操作時,就會把寫的命令存入到這個二進制文件中(insert,update,delete),slave開啟一個IO線程,線程定時讀取主節點的二進制文件,將新的命令抓取過來

存放到本地一個中繼日志中(relay.log);slave上還有一個定時啟動的線程叫sql,監控本地的中繼日志,一旦有新的命令發現,將會把中繼日志中的命令執行一遍。這樣一來,主從結構就完成了數據的備份;

 

     3.安裝linuxmysql(percona

  1.安裝cmake(如果使用虛擬機鏡像無需本步操作)

   #yum -y install cmake

      2.更新yum

    yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rp

      3.安裝
    yum install Percona-Server-client-56 Percona-Server-server-56
    安裝如果有沖突,之前已經安裝過mysql,則需要卸載
    rpm -qa | grep mysql    

        如果有mysql軟件的話,將其刪除,執行

        yum remove .....將軟件包全部都刪除掉。

  4.安裝完成后檢查兩點,一個是/etc/my.cnf存在不存在,一個是/var/lib/mysql目錄中有沒有mysql數據文件,如果有,那么基本上安裝成功了。

    

 5.啟動mysql服務

    運行命令:systemctl start mysql.service

    成功后,查看mysql運行狀態,systemctl status mysql.service后如下圖:

      

 6.修改mysql的密碼

    此時mysql並沒有設置初始密碼,所以先設置密碼,進入mysql中(終端直接輸入mysql即可):

      mysql> use mysql;  

      mysql> update user set password=password('123') where user='root' and host='localhost';  

      mysql> flush privileges; 

    然后重啟mysql服務,重新登錄

      mysql -uroot -p123   即可。

 7.開啟遠程連接mysql服務器

    a.開啟之前一定要確定自己開放了3306端口,或者完全關閉掉防火牆,否則遠程無法連接。(關閉防火牆或者開放端口,請百度)

    b.創建數據庫文件,例如,這里直接導入一個sql文件(之后主從復制會用到,導入sql文件,在mysql下直接輸入命令,source 路徑/xx.sql) 

    c.默認安裝的msql沒有開啟遠程訪問,所以要設置一個權限。

      mysql>grant all on *.* to 'root'@'%' identified by 'root';

        執行成功后,就可以在遠程客戶端連接試試看了,這里我使用的是mysqlworkbeach,如下:

      

    以上操作,分別在兩台虛擬機中進行,操作一模一樣。

  8.配置數據庫的主從關系

   配置主服務器

   編輯主master服務器配置文件/etc/my.cnf

      在[mysqld]節點下加入兩句話

      server-id=1

      log-bin=mysql-bin        #啟用二進制日志;

    

      

 

    

      然后重啟服務:systemctl restart mysql.service

           

      登錄mysqlmysql –uroot -proot

      mysql>flush tables with read lock;   #數據庫鎖表,不讓寫數據;這步驟可不做

      對於當前環境的mysql無需使用lock命令,因為沒有人操作,但是生產環境中必須這樣做

      mysql>show master status;    #查看MASTER狀態(這兩個值FilePosition)其中的file就是二進制文件,position記錄當前操作sql的步驟數(注意一條sql包含多步,所以不是sql語句的條數)

      

      

      因為我對數據庫主從已經操作過了,所以會記錄一些步驟數,一般情況下,第一次顯示position的數量是120

      

    配置從服務器

    修改/etc/my.cnf增加一行

    server-id=2

      

    然后重啟服務器

      systemctl restart mysql.service

 

    通過mysql命令配置同步日志的指向:

      mysql>change master to master_host=‘192.168.41.41’, master_port=3306,

      master_user='root',master_password='root',

      master_log_file='mysql-bin.000001', 

      master_log_pos=120;

      master_host        主服務器的IP地址(內網地址)

      master_port        主服務器的PORT端口

      master_log_file    和主服務器show master status中的File字段值相同

      master_log_pos        和主服務器show master status中的Position字段值相同

      mysql>start slave;                #stop slave;停止服務,出錯時先停止,再重新配置

      mysql>show slave status\G;        #查看SLAVE狀態,\G結果縱向顯示。必須大寫,這個命令無法再sqlyog中使用

      systemctl restart mysql.service        #重啟服務

      

      

    

9.此時主從復制就配好了,現在來測試一下吧!!

    

    第一步:在主表中創建一個數據表(表名什么都可以,測試用嘛),然后插入數據,如下:

      

 

           此時觀察從表,刷新,哎,卧槽,有數據了,說明從庫已經從主庫讀取並寫入了。

        

    

    第二步:在主表和從表中插入一樣的數據,例如在主,從表分別中插入:id =3 name=clearlove,然后查看,嗯,全部都插入成功了,此時再看從表slave狀態,卧槽??掛了?

        

        

          此時,slave_io_running成no了,掛了。為什么?

          因為從表要從主表讀取數據,主從都有了,我還讀你xxx啊?

          此時,再改主表數據也沒用了,主從都掛了,能有用嗎?怎么辦?重新掛接唄!!

          錯誤數據必須清除否則繼續主從失效,查看主節點中的二進制文件名稱 pos,但是停止從節點的從狀態stop slave

           1.查看主節點中二進制文件pos,怎么查看呢?這樣show master status;

              

             2.在從節點中把查詢出來的最新數據放到命令里掛接主節點

 

               

             

              啟動從節點的slave

                start slave

 

              此時再看下:ok!!!

 

                

 

 

              但是這個時候發現id3的對應b1字段的值沒有改。所以mysql雖然支持主從關系但是並沒有維護讀寫分離的狀態。

    

  10.安裝配置amoeba

      

      步驟1: 安裝jdk

          amoeba基於jdk環境所以需要安裝jdk(網上百度吧!!)

      步驟2:   安裝amoeba

          wget https://jaist.dl.sourceforge.net/project/amoeba/Amoeba%20for%20mysql/2.x/amoeba-mysql-binary-2.0.1-BETA.tar.gz

          然后解壓: tar -xf amoe......

      步驟3: 配置讀寫分離

          1.配置conf/dbService.xml

 

            修改用戶名和密碼

    

              

 

             配置主從的名稱和ip地址

 

              

 

            配置負載均衡的策略

              

                這個xml文件配置基本結束了,接下來配置amoeba.xml,核心的配置文件,將要加載dbServer.xml才能使用其中的配置,才能使負載均衡有效果
          2.配置
amoeba.xml

              配置ip地址;(192.168.41.41為你主機的ip地址,amoeba主從主需要配置一台即可)

                

              寫上root密碼

                

 

              

 

            繼續配置寫池使用master,讀池使用multiPool

                        

             注意:此時基本上配置完了,但是amoeba基於java做的,java有個小要求,最少的stack size太少 棧的size太小java默認128K,所以還要修改下棧的size,修改啟動文件/bin/amoeba,修改為256.如下:

                

              這樣就配置完成了。啟動下吧!!

                  輸入     ./amoeba start

                    

            最后,本地連接下吧!!

                

           ok,全部配置成功了!!注意,要開啟8066端口或者要關閉防火牆,否則外面訪問不到啊!!

                 

 

              

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM