mycat注意事项

附录1

数据库水平拆分主要切片规则:

              (1)分片枚举:        sharding-by-intfile

    (2)主键范围约定:    auto-sharding-long    此分片适用于,提前规划好分片字段某个范围属于哪个分片

    (3)一致性hash:    sharding-by-murmur  (一致性hash算法是提供一种虚拟节点,具体参考:一致性hash算法原理

    (4)字符串hash解析:  sharding-by-stringhash

    (5)按日期(天)分片:sharding-by-date

    (6)按单月小时拆分:   sharding-by-hour

    (7)自然月分片:         sharding-by-month

    (8)取模:      mod-long  此规则为对分片字段求摸运算

    (9)取模范围约束:      sharding-by-pattern 此种规则是取模运算与范围约束的结合,主要为了后续数据迁移做准备,即可以自主决定取模后数据的节点分布

每一个rule规则需对应一个mapfile文件

附录2

Mycat不支持的sql语句

已知1.6以下版本不支持的sql语句包括不限于以下:

SELECT:

 跨分片(实体库)的交叉查询

跨节点的联合查询 (如用户库的表和平台库的表做联合查询)

INSERT:

插入的字段不包含分片字段 (如插入tbl_user_base_info表,没有提供user_id列)

插入的分片字段找不到对应分片

复制插入Insert into…select…(2.0以上版本支持)

 多行插入insert into tab_a(c1,c2) values(v1,v2),(v11,v21)…

UPDATE:

 更新的列包含分片列

多表更新update a, b set a.nation=’China’, b.pwd=’123456’ where a.id=b.id

复杂更新update a, b set a.nation=’China’ where a.id=b.id; 但支持子查询方式update a set a.nation=’China’ where id in (select id from b);

 DELETE:

复杂删除 delete a from a join b on a.id=b.id; 支持子查询方式delete from a where a.id in (select id from b), 但表不能起别名

其他

Call procedure() MyCat未支持存储过程定义, 因而不允许调用存储过程,但可通过注解来调用各个分片上的存储过程

Selectfunc(); 不支持这种方式直接调用自定义函数,但支持select id, func() from employee 只需employee所在的所有分片上存在这个函数。MySql

Attention:

 Order by字段必须出现在select中(MyCat先将结果取出,然后排序)

 Group by务必使用标准语法select count(1),type from tab_a group by type;

MyCat的一些自带函数sum,min,max等可以正确使用,但多分片执行的avg有bug,执行的结果是错误的

谨慎使用子查询,外层查询没有分片查询条件,则会在所有分片上执行(子查询内外层的表一样较为特殊) 

关于mycat中解决跨库jion问题思路

附录3

Mysql配置单机多实例

以windows为例

1.修改数据库根目录下的my-default.ini文件

2.在mysqld下配置

a) 数据库根目录:basedir=”D:/mysql-5.7-3306”(以自己实际环境目录为准)

b) 数据存放目录:datadir=”D:/mysql-5.7-3306”(以自己实际环境目录为准)

c) 端口:port= 3306

d) 设置字符集charset-set-server=utf8


将my-default.ini重命名为my.ini

执行安装和添加服务

切换到数据库安装目录执行如下:

D:\mysql-5.7-3306\bin>mysqld install mysql3306 -defaults-file=”mysql-5.7-3306\my.ini”

如一切正常安装完成会提示:

Service successfully installed.

初始化数据库:

在bin目录下执行如下命令:

D:\mysql-5.7-3306\bin>mysql.exe --defaults-files=”D:\mysql-5.7-3306\my.ini” --initialize --explicit_defaults_for_timestamp

default-file即为配置文件的路径,必须进行指定

--initialize 说明执行数据库初始化。

--explicit_defaults_for_timestamp说明Timestamp类型的字段,必须进行指定,否则就是NULL。

初始化成功,无提示

启动数据库

启动3306

D:\mysql-5.7-3306\bin>net start mysql3306

如看到如下则表示启动成功

MySQL 服务正在启动 ...


MySQL 服务已经启动成功。

停止数据库

D:\mysql-5.7-3306\bin>net stop mysql3306

修改密码

登录的临时密码在data目录的的日志文件里是”.err”文件,打开搜索”password”关键字

A temporary password is generated for root@localhost: #JheTLHho2!L

则临时密码为:#JheTLHho2!L

登录mysql:

D:\mysql-5.7.16-3306\bin>mysql -u root -p

Enter password:#JheTLHho2!L

登录成功后,修改root的密码了:

mysql> set password = password('root');

修改成功后会有如下提示:

Query OK, 0 rows affected, 1 warning (0.15 sec)

修改成功就可以退出用新密码登录了。

mysql> exit

Bye

其余如3307、3308同样操作

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值