linux下mycat讀寫分離的配置


  為什么要配置讀寫分離,我想我就不需要再贅述了,那么在mycat下如何進行讀寫分離的配置,配置之后的實際效率又如何呢?我上午根據文檔搗鼓和測試了一下,這里做一下記錄:

  最開始,我們還是要配置mysql本身的主從復制。

  首先,配置主服務器:

  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為忽略的庫,即不復制該項設置的庫。

  binlog-do-db為需要復制的數據庫,如果不要,則為復制除了binlog-ignore_db設置的庫之外的所有庫

  2.重啟mysql:

service mysqld restart

  3.登錄mysql: mysql -uroot -p

  可以為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>

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM