posts - 36, comments - 30, trackbacks - 0, articles - 3
          不講原理,直接上步驟:
          1.下載MyCat,Mycat-server-1.4-release-20151019230038-linux.tar

          2. 解壓到/usr/mycat目錄下:
              [root@localhost mycat]# tar -xvf  Mycat-server-1.4-release-20151019230038-linux.tar .

          3.修改MyCat的配置文件 /usr/mycat/conf/schema.xml

            <?xml version="1.0"?>
            <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
            <mycat:schema xmlns:mycat="http://org.opencloudb/">
               <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
                   <table name="user" primaryKey="id" dataNode="dn1,dn2" rule="sharding-by-intfile"/>
               </schema>
              <dataNode name="dn1" dataHost="master" database="db1" />
              <dataNode name="dn2" dataHost="master" database="db2" />
                <dataHost name="master" 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="192.168.8.132:3306" user="root" password="root">
                               <readHost host="hostS1" url="192.168.8.130:3306" user="root" password="root" /> 
                    </writeHost>
                </dataHost>
           </mycat:schema>


          注意,修改balance=1,否則不支持讀寫分離。
                  由于MySQL的root用戶,默認只支持localhost或者127.0.0.1訪問,通過IP地址無法訪問,需要修改,修改方法如下:
                  [root@localhost mycat]# mysql -u root -p
                  mysql> use mysql;
                  mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' identified by 'root' WITH GRANT OPTION;
                  Query OK, 0 rows affected (0.03 sec)
                  mysql> FLUSH PRIVILEGES;
                  Query OK, 0 rows affected (0.07 sec)

                在主從服務器都要運行以上命令。


          4.修改rule.xml
          注意:role字段只能取值0和1
          1   <tableRule name="sharding-by-intfile">
          2     <rule>
          3       <columns>role</columns>
          4       <algorithm>hash-int</algorithm>
          5     </rule>
          6   </tableRule>

          5.修改配置文件conf/partition-hash-int.txt
          當role取值為0時,路由到數據節點1(dn1
          當role取值為1時,路由到數據節點2(dn2)

          0=0
          1=1

          6.修改主從復制環境
          在 http://www.aygfsteel.com/jacky9881/archive/2016/02/23/429403.html 搭建主從復制的環境做些修改。
          在主服務器上新建數據庫db1和db2
          [root@localhost mycat]# mysql -u root -p
          mysql> create database db1;
          Query OK, 1 row affected (0.00 sec)
          mysql> create database db2;
          Query OK, 1 row affected (0.00 sec)

          修改 my.cnf文件
          root@localhost mycat]#vi /etc/my.cnf

          binlog-do-db=db1
          binlog-do-db=db2

          重啟MySQL服務器
          [root@localhost mycat]# service mysqld restart
           
          查看主服務狀態
          [root@localhost mycat]# mysql -u root -p
          mysql> show master status;
          +------------------+----------+--------------+------------------+
          | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
          +------------------+----------+--------------+------------------+
          | mysql-bin.000009 |      106 | db1,db2      |                  |
          +------------------+----------+--------------+------------------+
          1 row in set (0.00 sec)

          記住File和Position的值。

          修改從服務器

          在從服務器上新建數據庫db1和db2
          [root@localhost mycat]# mysql -u root -p
          mysql> create database db1;
          Query OK, 1 row affected (0.00 sec)
          mysql> create database db2;
          Query OK, 1 row affected (0.00 sec)
          mysql> slave stop;
          Query OK, 0 rows affected (0.00 sec)
          mysql> CHANGE MASTER TO MASTER_HOST='192.168.8.130', MASTER_PORT=3306,
                      MASTER_USER='admin', MASTER_PASSWORD='admin',MASTER_LOG_FILE='mysql-bin.000009',MASTER_LOG_POS=106; 
          mysql> slave start;
          Query OK, 0 rows affected (0.00 sec)
          mysql> show slave status\G;

          確認以下信息輸出:

           Slave_IO_Running: Yes
           Slave_SQL_Running: Yes

          至此,主從復制環境修改成功。

          7.結果確認
          在主服務器上,重啟Mycat服務器,然后連接Mycat服務器。

          [root@localhost mycat]# ./bin/mycat restart
          Stopping Mycat-server...
          Mycat-server was not running.
          Starting Mycat-server...
          [root@localhost mycat]#mysql -utest -ptest -h192.168.8.132 -P8066 -DTESTDB    
          mysql> create table `user` (`id` int not null auto_increment,`name` varchar (60),`password` varchar (20),`role` int not null,`email` varchar (30),`alertday` int,primary key (`id`));
          Query OK, 0 rows affected (0.47 sec)

          運行成功,去從服務器的db1和db2,可以看到表已經被創建了,說明主從復制正常。
          mysql> use db1;
          Database changed
          mysql> show tables;
          +---------------+
          | Tables_in_db1 |
          +---------------+
          | user          |
          +---------------+
          1 row in set (0.10 sec)

          mysql> use db2;
          Database changed
          mysql> show tables;
          +---------------+
          | Tables_in_db2 |
          +---------------+
          | user          |
          +---------------+
          1 row in set (0.00 sec)

          在主服務器上運行以下命令:
          mysql> insert into `user` (`name`,`password`,`role`,`email`,`alertday`) values('admin','admin',0,'xxxx@xxx.com',30);
          Query OK, 1 row affected (0.24 sec)

          mysql> insert into `user` (`name`,`password`,`role`,`email`,`alertday`) values('admin','admin',1,'xxxx@xxx.com',30);
          Query OK, 1 row affected (0.00 sec)

          確認分片規則有沒有起作用。
          在從服務器上運行如下命令,根據結果可以看出,role為0的記錄被路由到db1中,role為1的記錄被路由到db2中。
          mysql> use db1;
          Database changed
          mysql> select * from user;
          +----+-------+----------+------+--------------+----------+
          | id | name  | password | role | email        | alertday |
          +----+-------+----------+------+--------------+----------+
          |  1 | admin | admin    |    0 | xxxx@xxx.com |       30 |
          +----+-------+----------+------+--------------+----------+
          1 row in set (0.00 sec)

          mysql> use db2;
          Database changed
          mysql> select * from user;
          +----+-------+----------+------+--------------+----------+
          | id | name  | password | role | email        | alertday |
          +----+-------+----------+------+--------------+----------+
          |  1 | admin | admin    |    1 | xxxx@xxx.com |       30 |
          +----+-------+----------+------+--------------+----------+
          1 row in set (0.00 sec)

          最后再確認一下讀寫分離有沒有真的實現。
          在主服務上運行
          mysql> insert into `user` (`name`,`password`,`role`,`email`,`alertday`) values('admin','admin',1,'xxxx@xxx.com',30);
          mysql> select * from user;

          查看一下log文件
          修改conf/log4j.xml,   INFO=>DEBUG

          02/29 03:48:05.414  DEBUG [$_NIOREACTOR-0-RW] (PhysicalDatasource.java:403) -release channel MySQLConnection [id=11, lastTime=1456746485403, schema=db2, old shema=db2, borrowed=true, fromSlaveDB=true, threadId=1857, charset=latin1, txIsolation=3, autocommit=true, attachment=null, respHandler=null, host=192.168.8.130, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]



          Feedback

          # re: 使用MyCat實現MySQL的分片處理和讀寫分離  回復  更多評論   

          2016-03-11 11:12 by mycat
          珠三角地區
          關注這方面技術的同學可以加QQ群479189837討論

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 垦利县| 高青县| 饶阳县| 蓬安县| 武城县| 昌吉市| 合水县| 道真| 托克逊县| 新河县| 大安市| 英吉沙县| 大方县| 荣成市| 双辽市| 扎赉特旗| 长顺县| 嘉鱼县| 乌审旗| 亚东县| 衡阳县| 泽库县| 东山县| 嵩明县| 姜堰市| 毕节市| 朔州市| 汶川县| 内丘县| 界首市| 巫溪县| 红桥区| 丹江口市| 望谟县| 南丹县| 嘉鱼县| 无为县| 友谊县| 庄河市| 客服| 岑巩县|