1. 程式人生 > >mycat分離分片表

mycat分離分片表

mysql innobackupex mysql主從 mycat rename table

背景:當前分片中有5張表,計劃將按月分片的日誌表分離到其他服務器。

要求:不影響業務情況下進行分離日誌表。

實驗計劃:

1.使用pt工具導出部分庫、部分表,並應用備份集。

2.搭建部分表主從同步。

3.修改mycat配置到最終版本,此時不進行reload。

4.等待業務低谷或晚上,進行表rename、mycat進行reload,至此分離日誌表完成。


預估影響業務時間<5秒。

實驗步驟:

1.innobackupex 使用--include 參數導出部分數據庫,測試使用--tables ,--tablefiles,參數導出未成功,可能是使用方法有誤。

innobackupex --include="test1.test|test2.test|test3.test|test1.test1|test2.test1|test3.test1|mysql.*" --no-timestamp /data/xtrabackup/mer --user=root -p123456

導出測試的test1--test3的test表,test1--test3的test1表.

  • 出現問題可以檢查“創建備份集文件目錄權限”“導出語句”“導出備份集目錄中的是否有表子目錄”“主機磁盤空間不足”等問題,

    這些問題均是筆者遇到過的。

  • 實驗中不在進行增備,原理相同,只是添加參數即可進行增備。

  • 應用備份集

    innobackupex --apply-log /data/xtrabackup/mer --user=root -p123456

技術分享圖片

  • 應用完成,查看備份集分庫目錄有表文件,一個表對應2個文件,如果沒有“應用備份集”不會有這2個文件。

技術分享圖片

2.搭建部分表主從同步。

  • 傳輸備份集,這裏使用rsync傳輸,如果線上權限控制不允許使用rsync,可以通過使用sftp 進行傳輸。

    rsync -av mer XHY005118:/data01/mysql/ --118是搭建的從庫IP

  • 從庫搭建mysql,此步驟不再贅述,註意點進行截圖。

    /usr/local/mysql/scripts/mysql_install_db --defaults-file=/etc/my.cnf --user=mysql --basedir=/usr/local/mysql/ --datadir=/data01/mysql/data3306/


  • 將rsync傳輸的備份集cp到datadir

    mv mysql mysql.bak --重要

    cp -r * ../data3306/

chown -R mysql:mysql /data

chown -R mysql:mysql /data01/ --註意

  • 起庫

mysqld_safe --defaults-file=/etc/my.cnf&

技術分享圖片

啟動成功。

  • 搭建主從

    vi xtrabackup_binlog_pos_innodb

技術分享圖片

CHANGE MASTER TO MASTER_HOST='192.168.5.116',MASTER_USER='****',MASTER_PASSWORD='*****',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000023',MASTER_LOG_POS=13580;

start slave;

技術分享圖片

搭建成功。

3. 修改mycat配置文件

修改<datahost>

修改<schema><table>

修改<datanode>

登錄管理端口,輸入reload @@config_all;

reload @@config;

4.rename table schema;

RENAME TABLE test.test TO test1.test;

RENAME TABLE test.test1 TO test1.test1;


實際測試上百萬數據的table執行rename,時間在毫秒級。

  • 改完表後,立即reload mycat。


測試:實測插入數據,mycat會根據分片規則將數據插到對應的新schema的分片表中。

















mycat分離分片表