下载地址:http://dl.mycat.org.cn/
我选择的windows版Mycat-server-1.6.7.1-release-20200209222254-win.tar.gz
cmd -----右键----- 管理员身份运行-----进入mycat的bin-----运行mycat install
安装完成后可在任务管理器查看:
使用命令 mycat start 启动服务,或在任务管理器右键手动开启
补充一些其他的命令:
ip为193.168.1.241的计算机一台 ;安装了mysql5.6 ; 端口为3307 ; 用户名root ; 密码:w*******20;
ip为localhost的计算机一台; 安装了mysql5.6 ; 端口为3306 ; 用户名root ; 密码:root;
两台计算机使用局域网或内网穿透或云服务器可以互ping
都安装了mycat
计算机ip 241、localhost的mysql数据库都有库 wssp_charging ; 有表 bus_customerchangelog;
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="MYCAT" checkSQLschema="false" sqlMaxLimit="100">
<table name="bus_customerchangelog" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2" rule="mod-long" />
</schema>
<dataNode name="dn1" dataHost="localhost1" database="wssp_charging" />
<dataNode name="dn2" dataHost="localhost2" database="wssp_charging" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="localhost:3306" user="root" password="root">
<readHost host="hostS2" url="localhost:3306" user="root" password="root" />
</writeHost>
</dataHost>
<dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="193.168.1.241:3307" user="root" password="wellsun_2020">
<readHost host="hostS2" url="193.168.1.241:3307" user="root" password="wellsun_2020" />
</writeHost>
</dataHost>
</mycat:schema>
解决:
<property name="sequnceHandlerType">1property>
USE wssp_charging;-- -此处是你自己的库名,我选的是节点dn1,本地mysql的wssp_charging库-- ---
DROP TABLE IF EXISTS MYCAT_SEQUENCE;
CREATE TABLE MYCAT_SEQUENCE ( name VARCHAR(50) NOT NULL, current_value INT NOT NULL, increment INT NOT NULL DEFAULT 100, PRIMARY KEY (name) ) ENGINE=InnoDB;
-- ----------------------------
-- Function structure for `mycat_seq_currval`
-- ----------------------------
DROP FUNCTION IF EXISTS `mycat_seq_currval`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `mycat_seq_currval`(seq_name VARCHAR(50)) RETURNS varchar(64) CHARSET latin1
DETERMINISTIC
BEGIN
DECLARE retval VARCHAR(64);
SET retval="-999999999,null";
SELECT concat(CAST(current_value AS CHAR),",",CAST(increment AS CHAR) ) INTO retval FROM MYCAT_SEQUENCE WHERE name = seq_name;
RETURN retval ;
END
;;
DELIMITER ;
-- ----------------------------
-- Function structure for `mycat_seq_nextval`
-- ----------------------------
DROP FUNCTION IF EXISTS `mycat_seq_nextval`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `mycat_seq_nextval`(seq_name VARCHAR(50)) RETURNS varchar(64) CHARSET latin1
DETERMINISTIC
BEGIN
UPDATE MYCAT_SEQUENCE
SET current_value = current_value + increment WHERE name = seq_name;
RETURN mycat_seq_currval(seq_name);
END
;;
DELIMITER ;
-- ----------------------------
-- Function structure for `mycat_seq_setval`
-- ----------------------------
DROP FUNCTION IF EXISTS `mycat_seq_setval`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `mycat_seq_setval`(seq_name VARCHAR(50), value INTEGER) RETURNS varchar(64) CHARSET latin1
DETERMINISTIC
BEGIN
UPDATE MYCAT_SEQUENCE
SET current_value = value
WHERE name = seq_name;
RETURN mycat_seq_currval(seq_name);
END
;;
DELIMITER ;
INSERT INTO mycat_sequence (name, current_value, increment) VALUES ('BUS_CUSTOMERCHANGELOG', 100, 100);-- -注意:参数一是你的表名,参数二是自增的起始值,参数三是步长,可理解为mycat在数据库中一次读取多少个sequence. 当这些用完后, 下次再从数据库中读取.- ---
BUS_CUSTOMERCHANGELOG=dn1#注意,key是你的表名必须大写,value是你这个表的节点(MYCAT_SEQUENCE在哪个节点创建的就写哪个,我在dn1节点即本地mysql创建的MYCAT_SEQUENCE)
mycat.bat restart
INSERT INTO `bus_customerchangelog` (
`Customerid`,`OldName`,`OldMobile`,`OldIdcard`,`OldWechat`,
`NewName`,`NewMobile`,`NewIdcard`,`NewWechat`,`ElecValue`,
`WaterValue`,`Creator`,`OrganizationId`,`customerNum`
)
VALUES
(
'1','1','1','1','1',
'1','1','1','1','1',
'1','1','1','1'
)
失败的情况:
- 进入cmd:mysql -uroot -p
- mysql>grant all privileges on *.* to root@"%" identified by ".";
Query OK, 0 rows affected (0.00 sec)
- mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
(1)下载–安装–配置–启动 和windows一样
(1)修改主一配置文件,在my.cnf中,设置logbin格式的下面加上
(2)配置主二
(3)配置从一配置文件,和一主一从的从机配置一模一样,若已配置过,无需修改
(4)配置从二文件,id=4
(5)重启四台虚拟机的mysql服务,关闭所有虚拟机防火墙等
(6)两台主机都授权
(7)查看两台主机是否都授权成功
(8)查看并记录master状态的关键值,
然后进入从一的mysql里面配置需要复制的主一,使用start slave;
启动slave,使用show slave status\G;
以列表的形式查看slave状态
进入从二的mysql上配置需要复制的主二,使用start slave;
启动slave,使用show slave status\G;
以列表的形式查看slave状态
(9)两个主机也得互相复制。当主一在运行时,主二必须同步主一的数据(相当于一个从机三),因为当主一死机后,主二要升级为主一承担起主一的责任,此时若主一主二数据不一致会造成数据丢失;当主一再次重启后会退居二线充当主二备机的角色,主二不会退位让给主一直到主二死机
在主一上执行
(1)在主一的schema.xml里修改balance=“1”
需求:
(2)在128、127上分别创建orders数据库
(3)启动mycat并创建第一步的所有表。
./mycat
mysql -uEric -p123456 -h192.168.140.127 -P8066
use MYCAT
(3)全局表。 比如订单表里面某个字段值对应的是字典表里的值,这时就要考虑字典表与子表的区别及特点:
- 多个表都需要字典表,而子表只有自己的主表需要
- 变动不频繁
- 数据总量变化不大
- 数据量不大,一般很少超过十万条记录