linux下mycat讀寫分離的配置

  爲何要配置讀寫分離,我想我就不須要再贅述了,那麼在mycat下如何進行讀寫分離的配置,配置以後的實際效率又如何呢?我上午根據文檔搗鼓和測試了一下,這裏作一下記錄:mysql

  最開始,咱們仍是要配置mysql自己的主從複製。sql

  首先,配置主服務器:數據庫

  1.編輯數據庫配置文件,/etc/my.cnf服務器

  在[mysqld]下加入代碼:測試

log-bin=mysql-bin
server-id=1
innodb_flush_log_at_trx_commit=1
sync_binlog=1
binlog-do-db=db1
binlog_ignore_db=mysql

  server-id 用於區分各自服務器,須要全局惟一。優化

  binlog-ignore_db爲忽略的庫,即不復制該項設置的庫。url

  binlog-do-db爲須要複製的數據庫,若是不要,則爲複製除了binlog-ignore_db設置的庫以外的全部庫spa

  2.重啓mysql:rest

service mysqld restart

  3.登陸mysql: mysql -uroot -pcode

  能夠爲slave端單獨創建一個帳戶,方便權限管理,而後把這個帳戶的權限賦予slave端: 

mysql>CREATE USER 'user'@ 'X.X.X.X' IDENTIFIED BY 'XXXXXX';
mysql>GRANT REPLICATION SLAVE ON *.* TO 'user'@'X.X.X.X' IDENTIFIED BY 'XXXXXX';

  X.X.X.X爲slave端的IP地址

  4.防止在複製期間,數據庫有新數據寫入致使數據不一樣步:  

mysql>FLUSH TABLES WITH READ LOCK;

  5.把數據庫導出並傳送到從服務器端:

#mysqldump -u root -pXXXXXX --all-databases  --lock-tables=false  -- > /root/all.sql
#scp /root/all.sql root@X.X.X.X:/root

  X.X.X.X爲從服務器IP地址。

  6.進入主服務器數據庫查看並記錄狀態,待會兒會用到: 

mysql>SHOW MASTER STATUS\G;

  記錄File和position

  7.解鎖數據表 

mysql>UNLOCK TABLES;

  而後配置從服務器:

  1.登陸從服務器,導入主服務器的數據庫: 

#mysql -u root -p123456 < /root/all.sql

  2.編輯/etc/my.cnf,在[mysqld]下加入: 

server-id=11        //服務Id,注意要和master的server-id不同
log-bin=mysql-bin
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
sync_master_info=1
sync_relay_log=1
sync_relay_log_info=1

  3.重啓數據庫並登陸,執行下面的命令 

mysql>CHANGE MASTER TO
MASTER_HOST='X.X.X.X',            //主服務器的ip地址
MASTER_USER='user',               //剛纔在主服務器建立的帳號和密碼
MASTER_PASSWORD='XXXXXX',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000001', //剛纔主服務器的file
MASTER_LOG_POS=120,        //主服務器的position
MASTER_CONNECT_RETRY=10;

  4.啓動slave進程:

mysql>START SLAVE;

  若是沒有報錯,應該就設置好了。

  小小的優化方案:

  雖然MyISAM引擎不支持事務處理和行級鎖,可是它的查詢效率相比innoDB要好的多,而做爲從數據庫,並不須要事務處理和行級鎖,因此建議把客戶端的表從新刪除並創建爲InnoDB。

  啓動mycat的讀寫分離:

   配置schema.xml文件: 

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
                writeType="0" dbType="mysql" dbDriver="native">
    <heartbeat>select user()</heartbeat>
    <!-- can have multi write hosts -->
    <writeHost host="hostM1" url="localhost:3306" user="root"
                        password="XXXXXX">
        <!-- can have multi read hosts -->
        <readHost host="hostS1" url="X.X.X.X:3306" user="user" password="XXXXXX" />
    </writeHost>
</dataHost>
相關文章
相關標籤/搜索