Mycat+Mysql主從複製實現雙機熱備

Mycat+Mysql主從複製實現雙機熱備

1、mysql主從配置原理

  1. 雙機熱備的概念簡單說一下,就是要保持兩個數據庫的狀態自動同步。對任何一個數據庫的操做都自動應用到另一個數據庫,始終保持兩個數據庫中的數據一致。 這樣作有以下幾點好處: 1. 能夠作災備,其中一個壞了能夠切換到另外一個。 2. 能夠作負載均衡,能夠將請求分攤到其中任何一臺上,提升網站吞吐量。 對於異地熱備,尤爲適合災備。 2、mysql 主從備份工做原理 簡單的說就是把 一個服務器上執行過的sql語句在別的服務器上也重複執行一遍, 這樣只要兩個數據庫的初態是同樣的,那麼它們就能一直同步。固然這種複製和重複都是mysql自動實現的,咱們只須要配置便可java

  2. 上圖中有兩個服務器,演示了從一個主服務器(master)把數據同步到從服務器(slave)的過程。 對於一個mysql服務器,通常有兩個線程來負責複製和被複制。當開啓複製這個開關以後(start slave) 1. 做爲主服務器Master,會把本身的每一次改動都記錄到 二進制日誌 Binarylog 中。 (從服務器會負責來讀取這個log,而後在本身那裏再執行一遍。) 2. 做爲從服務器Slave,會用master上的帳號登錄到master上,去讀取master的Binarylog, 而後寫入到本身的中繼日誌Relaylog,而後本身的sql線程會負責讀取這個中繼日誌,並執行一遍。到這裏主服務器上的更改就同步到從服務器上了。 在mysql上能夠查看當前服務器的主,從狀態。 其實就是當前服務器的 Binary(做爲主服務器角色)狀態和位置。以及其RelayLog(做爲從服務器)的複製進度。node

一臺機器上實現雙主熱備

mysql主從架構搭建

連接地址:mysql

Mysql雙主熱備架構搭建jquery

mysql主從架構搭建linux

背景知識:sql

  1. 主從這個架構能夠實現數據備份,數據在多個服務器上分佈等等,固然最主要的優勢是能夠實現負載均衡,將寫操做交給主節點,讀操做交給從節點。shell

  2. mysql官網有不少版本,例如Enterprise(企業版須要付費,固然能夠試用30天),Community(社區版,開源可是官方不提供技術支持),固然咱們經常使用的也是社區版,本文是基於社區版的。數據庫

  3. mysql的安裝也有源碼安裝和二進制免安裝等等方法,本文的mysql是經過二進制免安裝的方式安裝的vim

  4. 本文使用的環境是centos後端

  5. mysql版本:mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz

  6. 在/data目錄解壓兩份mysql 修改mysql的端口爲3307 3308

  7. 首先下載二進制免安裝版的mysql:mysql社區版下載,進入社區版下載頁後選擇 MySQL Community Server (GPL),選擇要下載的mysql版本:

我這裏使用的是mysql5.7這個版本,點擊以後,選擇以下:

嫌麻煩的小夥伴能夠直接運行下面的命令安裝:

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz

 

  1. 下載好以後解壓重命名爲mysql-3306而後複製一份,重命名爲mysql-3307,咱們將3306看成主節點,3307看成從節點:

#解壓 tar -zxvf mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz #重命名 mv mysql-5.7.25-linux-glibc2.12-x86_64 mysql #複製一份 cp -r mysql mysql3308

  1. 建立幾個目錄,data,logs,config,sockets,用來管理mysql的相關文件:

    mkdir data logs config sockets

     

  2. 進入config目錄,建立3307.conf以及3308.conf兩個文件,文件的內容以下:

    #3307.conf配置文件內容以下:

[mysqld] user=root character-set-server=utf8 port=3307 socket=/data/mysql/sockets/3307.sock basedir=/data/mysql datadir=/data/mysql/data/3307 server-id=2 log-bin=master-bin binlog_format=ROW binlog-ignore-db=mysql binlog-ignore-db=sys binlog-ignore-db=information_schema binlog-ignore-db=performance_schema relay-log=relay-log-bin replicate-do-db=humy replicate-do-db=usemp #設置從節點只讀,注意若是是超級管理登陸從節點仍然是能夠寫的,該配置只對普通用戶有效 read_only=1 #設置relay-log的路徑和名稱,若是不設置的話,默認路徑是datadir設置的路徑,默認文件名是:當前主機名-relay-log relay-log=relay-log-bin ​ [mysqld_safe] log-error=/data/mysql/logs/3306.log #錯誤日誌

 

#3308.conf配置文件內容以下

[mysqld] user=root #設置mysql的啓動用戶,我這裏直接使用root,讀者能夠建立用戶組和用戶指定操做 character-set-server=utf8 port=3308 socket=/data/mysql3308/sockets/3308.sock #設置套字節(/root/mysql/sockets爲剛剛建立的sockets的路徑,3306.sock能夠隨意命名,下面的data,logs也是如此) basedir=/data/mysql3308 #mysql-3306所在的位置 datadir=/data/mysql3308/data/3308 #設置mysql的數據存放目錄(也是bin_log的存放的地方) server-id=1 #惟一標識,每臺mysql服務器必須惟一 log-bin=master-bin #開啓bin-log並將此值做爲二進制文件名的前綴 binlog_format=ROW #設置binlog的格式,主要有STATEMENT,ROW,FIXED #設置不須要同步給從節點的數據庫 binlog-ignore-db=mysql binlog-ignore-db=sys binlog-ignore-db=information_schema binlog-ignore-db=performance_schema replicate-do-db=humy replicate-do-db=usemp [mysqld_safe] log-error=/root/mysql3308/logs/3308.log #錯誤日誌

 

  1. 接下來讓咱們開啓mysql服務:

#進入mysql的bin目錄,執行以下操做進行初始化 #-insecure的做用是不設置密碼,若是省略的話mysql會生成一個隨機密碼 ./mysqld --defaults-file=/data/mysql/config/3307.conf --initialize-insecure

 

#以後再執行以下命令啓動 ./mysqld --defaults-file=/data/mysql/config/3307.conf

 




  1. 可能有讀者在啓動mysql服務器的時候會報:error while loading shared libraries: libaio.so,運行以下命令安裝便可:

yum install libaio

 

  1. 鏈接3307主mysq服務器:

    #進入mysql的bin目錄運行以下命令: #--socket的值就是咱們在mysql配置文件中配置的socket值 ./mysql -uroot --socket=/data/mysql/sockets/3307.sock ​ #同理鏈接3307的mysql服務器

     

  1. 執行以下命令查看master狀態並進行重置:

show master status; reset master;

 

 

  1. 在主服務器上設置一個用戶用於從服務器從主服務器中複製數據時使用:

#建立用戶 create user 'salve' identified by '666666'; #賦予複製權限 GRANT REPLICATION SLAVE ON *.* TO 'salve'@'%'; ​ #命令解釋 create user 用戶名 identified by '密碼'; grant 權限 on 數據庫名.表名 to '用戶名'@'域名'; ​ *表示全部,*.*表示全部的數據庫和數據庫中的表 '%'全部本地和遠程均可以 localhost 本地 ip地址 指定ip登陸

 

  1. 以上操做沒有問題以後,咱們鏈接3307服務器進行從節點的配置:

#首先關閉 stop slave; #參數配置 change master to master_host='127.0.0.1', #主從服務的地址 master_port=3306, #主服務器的端口 master_user='slave', #用於從複製的用戶名,即第九步建立的 master_password='666666', #密碼 master_log_file='master-bin.000001', #主服務器的binlog日誌名稱,查看第八步 master_log_pos=597; #偏移量 #開啓 start slave;

 

至此咱們的mysql主從架構已經搭建完成。小夥伴能夠自行測試,在master節點寫入的數據是否會同步到slave節點.

總結:

  1. 通常主從架構從節點是不須要開啓binlog日誌的,首先由於從節點是隻讀的開啓binlog日誌也沒用,由於binlog日誌記錄的是修改事件,其次從節點從relay-log中讀取主節點的修改事件時也不會將修改事件同步到本身的binlog中。所以從節點開啓binlog是沒有用。

  2. 雙主熱備的關鍵參數就是:log_salve_updates

  3. 雙主熱備其實就是兩臺mysql服務器互爲主從關係。爲了實現高可用,能夠在兩臺互爲主從關係的服務器下面再配置若干個從節點。

  4. 關於reset master 和 reset slave語句的區別和注意事項:傳送門

    注意:

    1. 設置mysql遠程訪問

      #修改mysql 容許遠程訪問 use mysql; update user set host = '%' where user = 'root';

       

    2. 如上操做,可能致使mysql的root用戶無初始密碼,按如下步驟解決:

      #命令行鏈接mysql終端 ./bin/mysql -uroot --socket=/data/mysql3307/sockets/3307.sock #修改root的密碼 update mysql.user set authentication_string = password('123456') where user='root';

       

    3. 使用以下命令登陸終端

      ./bin/mysql -h192.168.1.2 -P3307 -uroot -p123456

       

       

2、mycat結合雙主複製實現讀寫分離模式

簡介:

應用程序僅須要鏈接mycat,後端服務器的讀寫分離由mycat進行控制,後端服務器數據的同步由MySQL主從同步進行控制。

連接:mycat結合雙主複製實現讀寫分離模式

mycat安裝

注意:

在安裝mycat以前首肯定已經安裝了java

Mycat官網 下載Mycat安裝包:Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz

#解壓 tar -zxvf Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz

 

修改schema.xml的配置文件

  • balance="1": 所有的readHost與stand by writeHost參與select語句的負載均衡。

  • writeType="0": 全部寫操做發送到配置的第一個writeHost,第一個掛了切到還生存的第二個 writeHost,從新啓動後以切換後的爲準,切換記錄在配置文件中:dnindex.properties 。

  • switchType="1": 1 默認值,自動切換。

修改/conf/server.xml 和 /conf/schema.xml

server.xml修改內容以下

<user name="root" defaultAccount="true">
            <property name="password">123456</property>
            <property name="schemas">TESTDB,TESTDBT</property>

            <!-- 表級 DML 權限設置 -->
            <!--
            <privileges check="false">
                    <schema name="TESTDB" dml="0110" >
                            <table name="tb01" dml="0000"></table>
                            <table name="tb02" dml="1111"></table>
                    </schema>
                    <schema name="TESTDBT" dml="0110" >
                            <table name="tb01" dml="0000"></table>
                            <table name="tb02" dml="1111"></table>
                    </schema>
            </privileges>
             -->
    </user>

    <user name="user">
            <property name="password">user</property>
            <property name="schemas">TESTDB,TESTDBT</property>
            <property name="readOnly">true</property>
    </user>

 

schema.xml內容以下

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

    <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
    </schema>
    
    <schema name="TESTDBT" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn2">
    </schema>
    
    <dataNode name="dn1" dataHost="node1" database="humy" />
    <dataNode name="dn2" dataHost="node1" database="usemp" />
    
    <dataHost name="node1" maxCon="10" minCon="5" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1">
        <heartbeat>select user()</heartbeat>
        <writeHost host="master1" url="192.168.1.186:3307" user="root" password="123456">
            <readHost host="slave2" url="192.168.1.186:3307" user="root" password="123456" />
        </writeHost>
        <writeHost host="master2" url="192.168.1.186:3308" user="root" password="123456">
            <readHost host="slave2" url="192.168.1.186:3308" user="root" password="123456" />
        </writeHost>
    </dataHost>

</mycat:schema>

 

啓動mycat服務

./bin/mycat start

啓動:./bin/mycat start

狀態: ./bin/mycat status

使用mysql的客戶端鏈接mycat

cd /data/app/mysql/ ./bin/mysql -uroot -p 8066 -h 192.168.1.186 ##鏈接mycat,初始密碼123456 mysql> show databases; +----------+
| DATABASE |
+----------+
| TESTDB   |
| TESTDBT  |
+----------+
2 rows in set (0.00 sec)

 

使用Navicat Premium鏈接mycat

經過mycat添加數據 能夠實現配置中的數據庫的數據同步。

 

 

每次開機都要啓動mycat,網上看了好多都是用shell腳原本實現mycat開機自啓動,後來看到一種方法,直接修改系統文件來實現,已經實踐過,方法有效。

1.修改腳本文件rc.local:vim /etc/rc.d/rc.local

  這個腳本是使用者自定的開機啓動程序,能夠在裏面添加想在系統啓動以後執行的腳本或者腳本執行命令

2.添加以下內容:

export JAVA_HOME=/opt/jdk1.8.0_65 /usr/local/mycat/bin/mycat start

 

3.esc 退出編輯,:wq 保存修改

4.將rc.local修改成可執行

  

chmod 777 /etc/rc.d/rc.local
相關文章
相關標籤/搜索