linux下mysql基於mycat作主從複製和讀寫分離之基礎篇

Linux下mysql基於mycat實現主從複製和讀寫分離
1.基礎設施html

  兩臺虛擬機:172.20.79.232(主) 172.20.79.233(從)
  1.1軟件設施java

    mysql5.6.39 , mycat1.6-RELEASE ,   jdk1.7及其以上版本
2.實現步驟一(mycat實現讀寫分離)mysql

  1.首先在兩臺服務器安裝mysqllinux

    1.下載mysql的repo源git

 $ wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm

    2.安裝mysql-community-release-el7-5.noarch.rpm包github

 $ sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm

      安裝這個包後,會得到兩個mysql的yum repo源:sql

 /etc/yum.repos.d/mysql-community.repo
 /etc/yum.repos.d/mysql-community-source.repo

    3.安裝mysql並修改my.cnf文件(才能使用mycat)數據庫

$ sudo yum install mysql-server
vi /etc/my.cnf
在後面追加一行或修改
lower_case_table_names = 1

      根據提示安裝就能夠了,不過安裝完成後沒有密碼,須要重置密碼 
    4.重置mysql密碼服務器

 $ mysql -u root

      登陸時有可能報這樣的錯:ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘ (2),緣由是/var/lib/mysql的訪問權限問題。下面的命令把/var/lib/mysql的擁有者改成當前用戶:app

      

$ sudo chown -R root:root /var/lib/mysql

    5.開啓mysql遠程鏈接
    

grant all on *.* to root@'%' identified by 'admin123' with grant option;
flush privileges;


    6.重啓mysql服務
     

 $ service mysqld restart

    7.接下來登陸重置密碼:
  

 $ mysql -u root  //直接回車進入mysql控制檯
      mysql > use mysql;
      mysql > update user set password=password('123456') where user='root';
      mysql > exit;

  2.在主服務器安裝mycat
    1.下載mycat1.6
  

https://github.com/MyCATApache/Mycat-download

  

    2.上傳至主服務器解壓安裝    

tar zxvf  Mycat-server-1.6-RELEASE-20160405120037-linux.tar.gz -C /usr/local
      cd /usr/local/mycat
      groupadd mycat
      useradd -g mycat mycat
      passwd mycat
      chown -R mycat.mycat /usr/local/mycat
      export  MYCAT_HOME=/usr/local/mycat

     2.1 修改(新增)   

 vi /etc/hosts 
   172.20.79.232 root232
   172.20.79.233 root233


     2.2 修改mycat啓動jdk路徑
     

vi /usr/local/mycat/conf/wrapper.conf
   修改wrapper.java.command=%JAVA_HOME%/bin/java


     2.3 配置mycat 文件schema.xml
        

vi /usr/local/mycat/conf/schema.xml
  <?xml version="1.0"?>
  <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
  <mycat:schema xmlns:mycat="http://io.mycat/">
  <!-- 這裏的mycatdb與server.xml 裏面名稱一致 dataNode有幾個節點就配置幾個節點,用逗號分隔-->
  <schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1" />
  <!-- database有幾個數據庫就配置幾行便可-->
  <dataNode name="dn1" dataHost="localhost1" database="db01" />
  <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
  writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
  <!--
  balance="0", 不開啓讀寫分離機制,全部讀操做都發送到當前可用的writeHost上。
  balance="1",所有的readHost與stand by writeHost參與select語句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->S2,而且M1與M2互爲主備),正常狀況下,M2,S1,S2都參與select語句的負載均衡。
  balance="2",全部讀操做都隨機的在writeHost、readhost上分發。
  balance="3",全部讀請求隨機的分發到wiriterHost對應的readhost執行,writerHost不負擔讀壓力
  writeType表示寫模式
  writeType="0",全部的操做發送到配置的第一個writehost
  writeType="1",隨機發送到配置的全部writehost
  writeType="2",不執行寫操做
  switchType指的是切換的模式,目前的取值也有4種:
  switchType=‘-1‘ 表示不自動切換
  switchType=‘1‘ 默認值,表示自動切換
  switchType=‘2‘ 基於MySQL主從同步的狀態決定是否切換,心跳語句爲show slave status
  switchType=‘3‘基於MySQL galary cluster的切換機制(適合集羣)(1.4.1),心跳語句爲show status like ‘wsrep%‘。
  -->
  <heartbeat>select user()</heartbeat>
  <!--配置mysql寫入的節點-->
  <writeHost host="hostM1" url="172.20.79.232:3306" user="root"
  password="admin123">
  <!--配置mysql讀取的節點-->
  <readHost host="hostS2" url="172.20.79.233:3306" user="root" password="admin123" />
  </writeHost>
  </dataHost>
  </mycat:schema>

  



    2.4 配置mycat 用戶名和密碼在文件server.xml

vi /usr/local/mycat/conf/schema.xml<?xml version="1.0" encoding="UTF-8"?>

  <!DOCTYPE mycat:server SYSTEM "server.dtd">
  <mycat:server xmlns:mycat="http://io.mycat/">
  <system>
  <property name="useSqlStat">0</property> <!-- 1爲開啓實時統計、0爲關閉 -->
  <property name="useGlobleTableCheck">0</property> <!-- 1爲開啓全加班一致性檢測、0爲關閉 -->
  <property name="sequnceHandlerType">2</property>
  <!--默認爲type 0: DirectByteBufferPool | type 1 ByteBufferArena-->
  <property name="processorBufferPoolType">0</property>
  <property name="handleDistributedTransactions">0</property>
  <!--
  off heap for merge/order/group/limit 1開啓 0關閉
  -->
  <property name="useOffHeapForMerge">1</property>
  <!--
  單位爲m
  -->
  <property name="memoryPageSize">1m</property>
  <!--
  單位爲k
  -->
  <property name="spillsFileBufferSize">1k</property>
  <property name="useStreamOutput">0</property>
  <!--
  單位爲m
  -->
  <property name="systemReserveMemorySize">384m</property>
  <!--是否採用zookeeper協調切換 -->
  <property name="useZKSwitch">true</property>
  </system>
  <user name="root">
  <property name="password">admin123</property>
  <property name="schemas">mycatdb</property> 
  </user>
  <user name="user">
  <property name="password">user</property>
  <property name="schemas">mycatdb</property>
  <property name="readOnly">true</property>
  </user>
  </mycat:server>

  3.測試

   3.1 首先啓動mycat

   

  cd /usr/local/mycat/bin
   ./mycat start

    3.2 查看mycat是否啓動

netstat -ntulp |grep 8066
8066爲mycat監聽端口

    3.3 修改日誌級別爲debug

vi /usr/local/mycat/conf/log4j2.xml

    修改asyncRoot level="debug"

    3.4 使用mycat登陸mysql

mysql -uroot -padmin -h172.20.79.232 -P8066 -Dmycatdb

   3.5 測試是否讀寫分離

    首先動態打印日誌

             tail -f -n 500 mycat.log

            在mycat中,進行測試

    

   新建數據庫(主從都必須建):create database db01;

       use db01;

    create table test(id int not null,name varchar(24) not null);

    insert into test vales(1,"test1");

    select * from test;
    
    寫入的時候,日誌打印記錄若是是主mysql,查詢的時候,日誌打印記錄是從mysql ,則實現讀寫分離

  

 3.實現步驟二(mysql實現主從複製)

  1.修改Master服務器mysql的my.cnf文件

  [mysqld]
  log_bin = mysql-bin  #記錄操做日誌
  binlog_ignore_db =  mysql  #不一樣步mysql系統數據庫
  server_id = 1

  

  2.首先登陸Master的mysql配置建立mysql 的slave用戶

  mysql> grant replication slave,reload,super on *.* to slave@172.20.79.233 identified by 'slave';

  3.修改Master服務器slave的my.cnf文件

  

  log_bin = mysql-bin  #記錄操做日誌
  replicate_ignore_db = mysql #不一樣步mysql系統數據庫
  slave_skip_errors = all 
  server_id = 2

  4.主mysql執行sql 

  show master status;

  

     5.slave的mysql鏈接master的mysql 

  根據第2步配建立的user(slave),password(slave) 和 第4步獲取的file(mysql-bin.00004),position(120) 鏈接主mysql

  mysql> change master to master_host='172.20.79.232', master_user='slave', master_password='slave',master_log_file='mysql-bin.00004',master_log_pos=120;

 6.slave開啓從mysql,mysql中執行 

  start slave;

 7.查看slave的mysql狀態,mysql執行

show slave status\G;

  

  8.測試主從複製

  首先在主從mysql上都新建數據庫db02
  主mysql執行:
    use db02;
    create table user(id int not null primary key,name varchar(50));   從mysql上也會產生user表,主從mysql配置成功!

  到此結束!

相關文章
相關標籤/搜索