mycat分库分表

一:修改schema.xml
 
  




	
		
		
		
select user()


二:修改server.xml



	
		0  
		0  
		
		1
	     	 
	        
		
		
		
		
		0
		
		
		
		
		
		
		
		
		
		
		0
		1
		
		1m
		
		1k
		0
	
		
		384m
		
		true
	
	
	
	
	
	
	
		123456
		TESTDB
		
		
		
	

	
		user
		TESTDB
		true
	



 
  
三:启动关闭

    1:进入bin目录,

    2:启动输入./mycat start。关闭命令:./mycat stop

    3:当出现则表示启动成功。

  四:操作mycat

         1:一般都是项目直接连接mycat,然后mycat连接数据库,在liunx下测试则执行命令:

            mysql -uroot -p123456 -h127.0.0.1 -P8066 -DTESTDB

            该命令主要指定了连接mycat的端口以及mycat中具体的mycat逻辑库,输入该命令后,则可以像执行普通sql一样执行句。

    五:mycat中使用出现的问题及解决

        1:使用mycat后mysql主键不能自增。

                解决方案:建立一张全局序列表,建立设置序列的函数和获取序列的函数,然后在自己的代码中获取当前序列值并填充到即将执行的insert语句中,关于序列的建立后面会讲

            2:不能使用group by。

                   解决方案:首先考虑该表是否非要分割,若非要分割则在项目中整合spring的动态数据源,分为两个数据源,1个是连接mycat的,第二个是直接连接mysql的,若需要跨库统计则切换数据库源直接使用mysql进行操作,关于mycat的统计楼主也不是很了解,希望有更好的方案可以告知。

六:建立mysql的序列

    1:建立序列表,该表设置了3个属性:seq_name:序列名称,current_val:当前序列值,increment_val:序列增加步长

    DROP TABLE IF EXISTS `sequence`;
CREATE TABLE `sequence` (
  `seq_name` varchar(50) NOT NULL,
  `current_val` int(11) NOT NULL,
  `increment_val` int(11) NOT NULL DEFAULT '1',
  PRIMARY KEY (`seq_name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
2:当前序列函数

    

create function currval(v_seq_name VARCHAR(50))   
returns integer  
begin      
	declare value integer;       
	set value = 0;       
	select current_val into value  from sequence where seq_name = v_seq_name; 
   return value; 
end;

3:查询下一个序列函数

create function nextval (v_seq_name VARCHAR(50))
	returns integer
begin
    update sequence set current_val = current_val + increment_val  where seq_name = v_seq_name;
	return currval(v_seq_name);
end;

4:初始化sequence

mycat分库分表_第1张图片

描述:sequence序列表中,可以存放多个序列(为其他业务表指定),在使用nextval("xxx")和currval("xxx")时,里面的参数对应sequence表的name字段的值,每使用一次,序列表中对应名称的序列的当前值则增加对应设置的步长

你可能感兴趣的:(mysql)