查看: 2119|回复: 0

[Mysql数据库] mycat分离分片表

发表于 2018-3-9 08:00:02

背景:当前分片中有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

blob.png

应用完成,查看备份集分库目录有表文件,一个表对应2个文件,如果没有“应用备份集”不会有这2个文件。

blob.png

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&

blob.png

启动成功。

搭建主从

vi xtrabackup_binlog_pos_innodb

blob.png

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;

blob.png

搭建成功。

3. 修改mycat配置文件

修改

修改

修改

登录管理端口,输入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的分片表中。



















回复

使用道具 举报