1. 程式人生 > >Linux下Mycat安裝配置和使用

Linux下Mycat安裝配置和使用

                       

mysql安裝

  1. 下載mysql【百度雲
  2. tar -zxvf mysql-5.6.32-linux-glibc2.5-x86_64.tar.gz 解壓
  3. 把mysql資料夾移動到 /usr/local/ 下mv mysql-5.6.32-linux-glibc2.5-x86_64 /usr/local/mysql
  4. 建立mysql使用者和組

    groupadd mysqladduser -r -g mysql mysqlchown -R mysql.mysql /usr/local/mysql  //修改mysql目錄所屬mysql使用者
         
    • 1
    • 2
    • 3
  5. 安裝 /usr/local/mysql/scripts/mysql_install_db
  6. 修改配置檔案my.cnf,必須要修改才能使用mycat
     最後一行新增

    lower_case_table_names = 1
  7. 設定mysql服務

    cp -f /usr/local/mysql/support-files/mysql.server
      /etc/init.d/mysqld
    • 1
  8. 啟動mysql service mysqld start
  9. 把mysql命令加入環境變數
    修改/etc/profile檔案,最後行新增export PATH=$PATH:/usr/local/mysql/bin
    然後執行 source /etc/profile 使配置立即生效

  10. 登陸mysql如果提示錯誤 Can't connect to local MySQL server through socket '/tmp/mysql.sock'
    執行命令 ln /var/lib/mysql/mysql.sock /tmp/mysql.sock

    後再登陸

  11. root使用者初始密碼為空,修改密碼使用mysqladmin命令

    mysqladmin -uroot -p password
         
    • 1
  12. 登陸客戶端 mysql -uroot -p

  13. 建立測試資料庫

    CREATE database db1;CREATE database db2;CREATE database db3;
         
    • 1
    • 2
    • 3

    至此mysql已經安裝完成了

安裝java

linux下安裝java

mycat安裝

  1. 下載mycat【百度雲
  2. 解壓 tar -zxvf Mycat-server-1.6-RELEASE-20161012170031-linux.tar.gz
  3. 把mycat資料夾移動到 /usr/local/ 下mv Mycat-server-1.6-RELEASE-20161012170031-linux /usr/local/mycat
  4. 新建使用者和組

    groupadd mycatadduser -r -g mycat mycatchown -R mycat.mycat /usr/local/mycat  //修改mycat目錄所屬mycat使用者
         
    • 1
    • 2
    • 3
  5. 修改配置檔案 /usr/local/mycat/conf/schema.xml
    這裡配置mysql的地址、使用者名稱和密碼

    <writeHost host="hostM1" url="localhost:3306" user="root" password="root">    <readHost host="hostS1" url="localhost:3306" user="root" password="root" /></writeHost>
         
    • 1
    • 2
    • 3

    server.xml
    這裡配置mycat的使用者名稱密碼

    <user name="root">   <property name="password">digdeep</property>   <property name="schemas">TESTDB</property></user>
         
    • 1
    • 2
    • 3
    • 4
  6. 啟動mycat /usr/local/mycat/bin/mycat start

  7. 連線mycat mysql -uroot -pdigdeep -h127.0.0.1 -P8066 -DTESTDB
    注意這裡 -h 後面必須是ip,使用localhost會出錯

  8. 建立測試資料

use TESTDB;create table company(id int not null primary key,name varchar(50),addr varchar(255));insert into company values(1,"facebook","usa");
   
  • 1
  • 2
  • 3
  1. 結果:檢視mysql上的資料庫db1,db2,db3上都建立了表company

mysql主從伺服器配置

  1. 修改主mysql配置檔案my.cnf

    [mysqld]log_bin = mysql-bin  #記錄操作日誌binlog_ignore_db =  mysql  #不同步mysql系統資料庫server_id = 1
         
    • 1
    • 2
    • 3
    • 4
  2. 啟動主mysql,在主mysql建立一個使用者讓從mysql連線,執行sql
    主mysql:node1
    從mysql:node2

    grant replication slave on *.* to 'user'@'node2' identified by 'password'
         
    • 1
  3. 修改從mysql配置檔案my.cnf

    log_bin = mysql-bin  #記錄操作日誌replicate_ignore_db = mysql #不同步mysql系統資料庫slave_skip_errors = all server_id = 2
         
    • 1
    • 2
    • 3
    • 4
  4. 主mysql執行sql show master status;\G
    show master status

  5. 從mysql連線主mysql
     根據第2步配建立的user,password 和 第4步獲取的file,position 連線主mysql

    change master to master_host='node1',master_user='user',master_password='password',master_log_file='mysql-bin.000004',master_log_pos=120;//如果是mysql5.6即以上可以不需要master_log_file和master_log_pos,mysql會自動識別change master to master_host='node1',master_user='user',master_password='password';
         
    • 1
    • 2
    • 3
  6. 開啟從mysql,從mysql中執行 start slave;
  7. 檢視從mysql狀態,從mysql執行 show slave status\G;
    show slave status
    紅色下劃線部分為yes則開啟成功

  8. 測試成果
    首先在主從mysql上都新建資料庫testdb
    主mysql:use testdb;create table user(id int not null primary key,name varchar(50));
    從mysql上也會產生user表,主從mysql配置成功!

mycat讀寫分離配置

  1. 注意事項

    • 遠端 mysql 必須允許 mycat主機 遠端連線,修改mysql.user表中的使用者資料,執行sql

      update mysql.user set host = '%' where user = 'root'
             
      • 1
  2. schema.xml配置

    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"writeType="0" dbType="mysql" dbDriver="native" switchType="2"  slaveThreshold="100">    <heartbeat>show slave status</heartbeat>    <writeHost host="hostM1" url="node1:3306" user="root" password="root">        <readHost host="hostS1" url="node2:3306" user="root" password="root" />    </writeHost></dataHost>
         
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    dbDriver 屬性
        指定連線後端資料庫使用的 Driver,目前可選的值有 native 和 JDBC。使用 native 的話,因為這個值執行的是二進位制的 mysql 協議,所以可以使用 mysql 和 maridb。其他型別的資料庫則需要使用 JDBC 驅動來支援。
        從 1.6 版本開始支援 postgresql 的 native 原始協議。
        如果使用 JDBC 的話需要將符合 JDBC 4 標準的驅動 JAR 包放到 MYCAT\lib 目錄下,並檢查驅動 JAR 包中包括如下目錄結構的檔案:META-INF\services\java.sql.Driver。在這個檔案內寫上具體的 Driver 類名,例如:com.mysql.jdbc.Driver。

    balance 屬性
    負載均衡型別,目前的取值有 3 種:

    1. balance=”0”, 不開啟讀寫分離機制,所有讀操作都發送到當前可用的 writeHost 上。
    2. balance=”1”,全部的 readHost 與 stand by writeHost 參與 select 語句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->S2,並且 M1 與 M2 互為主備),正常情況下,M2,S1,S2 都參與 select 語句的負載均衡。
    3. balance=”2”,所有讀操作都隨機的在 writeHost、readhost 上分發。
    4. balance=”3”,所有讀請求隨機的分發到 wiriterHost 對應的 readhost 執行,writerHost 不負擔讀壓
      力,注意 balance=3 只在 1.4 及其以後版本有,1.3 沒有。

    writeType 屬性
    負載均衡型別,目前的取值有 3 種:

    1. writeType=”0”, 所有寫操作傳送到配置的第一個 writeHost,第一個掛了切到還生存的第二個
      writeHost,重新啟動後已切換後的為準,切換記錄在配置檔案中:dnindex.properties .
    2. writeType=”1”,所有寫操作都隨機的傳送到配置的 writeHost,1.5 以後廢棄不推薦。

    switchType 屬性

    • -1 表示不自動切換
    • 1 預設值,自動切換
    • 2 基於 MySQL 主從同步的狀態決定是否切換
       心跳語句為 show slave status
  3. 根據主從延時切換技術
    Mycat1.4開始支援 MySQL主從複製狀態繫結的讀寫分離機制,讓讀更加安全可靠,配置如下: MyCAT心跳檢查語句配置為 show slave status ,dataHost 上定義兩個新屬性: switchType=”2” 與slaveThreshold=”100”,此時意味著開啟MySQL主從複製狀態繫結的讀寫分離與切換機制,Mycat心跳機制通過檢測 show slave status 中的 “Seconds_Behind_Master”, “Slave_IO_Running”, “Slave_SQL_Running” 三個欄位來確定當前主從同步的狀態以及Seconds_Behind_Master 主從複製時延, 當Seconds_Behind_Master>slaveThreshold 時,讀寫分離篩選器會過濾掉此Slave機器,防止讀到很久之前的舊資料,而當主節點宕機後,切換邏輯會檢查Slave上的Seconds_Behind_Master是否為0,為0時則表示主從同步,可以安全切換,否則不會切換。

  4. 重啟mycat,連線建立測試資料

    use TESTDB;create table company(id int not null primary key,name varchar(50),addr varchar(255));insert into company values(1,"facebook","usa");
         
    • 1
    • 2
    • 3
  5. 結果:檢視主從mysql上的db1,db2,db3上都建立了表company

  6. 如果你的mysql的複製模式為STATEMENT(可以在my.cnf中配置binlog_format="STATEMENT"),還可以這樣測試。
    mycat執行sql :

    insert into company values(1,@@hostname,"usa");`select * from company ;
         
    • 1
    • 2

    這裡寫圖片描述
    可以看出,讀取資料是從從mysql讀出的

           

再分享一下我老師大神的人工智慧教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智慧的隊伍中來!https://blog.csdn.net/jiangjunshow