mysql迁移到mycat

11 篇文章 0 订阅

记录一下mysql单库迁移到mycat使用的多库记录,由于业务增速较快,单库会出现瓶颈,所以采用mycat来分表分库。
由于之前的表字段过多,所以先采取分表,分为主表和详细表

CREATE TABLE fileinfo( 
    id INT NOT NULL , 
    fid  varchar(32) NOT NULL , 
    userid varchar(32) NOT NULL ,
    filename  varchar(32) NOT NULL ,
    create_date DATETIME , 
    PRIMARY KEY (fid  ) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
filedetail
| status | downloadurl | fid | realname | langu | deviceid|
CREATE TABLE filedetail( 
    fid  varchar(32) NOT NULL , 
    status varchar(2) NOT NULL ,
    realname   varchar(32) NOT NULL ,
    langu varchar(32) NOT NULL ,
    create_date DATETIME , 
    PRIMARY KEY (fid  ) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

由于目前需要使用uuid分片,原来的分片规则已不适用
采用一致性hash

<tableRule name="sharding-by-murmur">
      <rule>
        <columns>fid</columns>
        <algorithm>murmur</algorithm>
      </rule>
   </tableRule>
<function name="murmur" class="io.mycat.route.function.PartitionByMurmurHash">
      <property name="seed">0</property><!-- 默认是0-->
      <property name="count">2</property><!-- 要分片的数据库节点数量,必须指定,否则没法分片—>
      <property name="virtualBucketTimes">160</property><!-- 一个实际的数据库节点被映射为这么多虚拟节点,默认是160倍,也就是虚拟节点数是物理节点数的160倍-->
      <!--
      <property name="weightMapFile">weightMapFile</property>
                     节点的权重,没有指定权重的节点默认是1。以properties文件的格式填写,以从0开始到count-1的整数值也就是节点索引为key,以节点权重值为值。所有权重值必须是正整数,否则以1代替 -->
      <!--
      <property name="bucketMapPath">/etc/mycat/bucketMapPath</property>
                      用于测试时观察各物理节点与虚拟节点的分布情况,如果指定了这个属性,会把虚拟节点的murmur hash值与物理节点的映射按行输出到这个文件,没有默认值,如果不指定,就不会输出任何东西 -->
  </function>

schema.xml表的配置如下

<table name="fileinfo" primaryKey="fid" dataNode="node_db01,node_db02" 	       rule="sharding-by-murmur" >
                 <childTable name="filedetail" joinKey="fid"
                             parentKey="fid" ></childTable>
  </table>

导出fileinfo表的信息

select id, fid, userid, filename,create_date
from fileuploadinfo into outfile
'/var/lib/mysql-files/fileinfo.text'
fields terminated by ','
optionally enclosed by ''
LINES TERMINATED BY '\n';

导出filedetail表的信息

select fid, status, realname,langu,create_date
from fileuploadinfo into outfile
'/var/lib/mysql-files/filedetail.text'
fields terminated by ','
optionally enclosed by ''
LINES TERMINATED BY '\n';
ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
show variables like "secure_file_priv";

出现这个问题的原因是mysql的secure_file_priv这个选项没有开启,或者这个选择了特定的文件路径,只有在这个路径下的文件才能导入导出mysql。
也可以修改my.cnf:在[mysqld]这个选项下加入变量声明:
secure_file_priv=’’

默认情况下mysql安装后,会自动创建mysql用户和mysql用户组,
数据库会创建在/var/lib/mysql目录下,所要保证数据导出目录有mysql用户权限。

准备好了,接下来进入mycat

mysql -utest -p123456 -h127.0.0.1 -P8066 -DTESTDB
use TESTDB

下面执行成功
导入fileinfo表

load data infile '/home/emeet/fileinfo.text' into table fileinfo fields terminated by',' lines terminated by'\n' (id, fid, userid, filename,create_date);

导入filedetail表,注意表名和列名不一样,需要修改,注意导入后查看相同fid是否数据在同一分片下

load data infile '/home/emeet/filedetail.text' into table filedetail fields terminated by',' lines terminated by'\n' (fid, status, realname,langu,create_date);

经过检查数据已经导入成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值