目录
- 准备
- 配置
- registry.conf
- file.conf
- 创建相关表和数据库
- 启动
- 踩坑
- 运行
准备
通过github下载安装包:https://github.com/seata/seata/releases/tag/v1.3.0
seate中文文档:http://seata.io/zh-cn/docs/overview/what-is-seata.html
将下载的安装包上传到服务器,解压缩即可;
配置
进入conf
目录,主要修改file.conf
和registry.conf
registry.conf
由于小编想要整合nacos注册中心,故这里选择nacos配置项,如下:
registry {
type = "nacos"
loadBalance = "RandomLoadBalance"
loadBalanceVirtualNodes = 10
nacos {
application = "seata-server"
serverAddr = "127.0.0.1:8848"
group = "SEATA_GROUP"
namespace = ""
cluster = "default"
}
}
config {
type = "file"
file {
name = "file.conf"
}
}
type:换成自己整合的注册中心,例如nacos;
serverAddr:服务注册地址,nacos服务所在服务器IP;
file.conf
配置项如下:
修改mode改为db
;然后修改db配置中的MySQL相关配置信息
;
store {
mode = "db"
## database store property
db {
datasource = "druid"
dbType = "mysql"
driverClassName = "com.mysql.jdbc.Driver"
url = "jdbc:mysql://127.0.0.1:3306/seata?useSSL=false&serverTimezone=UTC"
user = "root"
password = "123456"
minConn = 5
maxConn = 100
globalTable = "global_table"
branchTable = "branch_table"
lockTable = "lock_table"
queryLimit = 100
maxWait = 5000
}
}
创建相关表和数据库
- 新建一个名为
seata
数据库(名称可以是其他的,只要上面的配置能够对应上即可); - 创建
global_table
、branch_table
和lock_table
三张表;
三张表结构如下:
-- -------------------------------- The script used when storeMode is 'db' --------------------------------
-- the table to store GlobalSession data
CREATE TABLE IF NOT EXISTS `global_table`
(
`xid` VARCHAR(128) NOT NULL,
`transaction_id` BIGINT,
`status` TINYINT NOT NULL,
`application_id` VARCHAR(32),
`transaction_service_group` VARCHAR(32),
`transaction_name` VARCHAR(128),
`timeout` INT,
`begin_time` BIGINT,
`application_data` VARCHAR(2000),
`gmt_create` DATETIME,
`gmt_modified` DATETIME,
PRIMARY KEY (`xid`),
KEY `idx_gmt_modified_status` (`gmt_modified`, `status`),
KEY `idx_transaction_id` (`transaction_id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8;
-- the table to store BranchSession data
CREATE TABLE IF NOT EXISTS `branch_table`
(
`branch_id` BIGINT NOT NULL,
`xid` VARCHAR(128) NOT NULL,
`transaction_id` BIGINT,
`resource_group_id` VARCHAR(32),
`resource_id` VARCHAR(256),
`branch_type` VARCHAR(8),
`status` TINYINT,
`client_id` VARCHAR(64),
`application_data` VARCHAR(2000),
`gmt_create` DATETIME(6),
`gmt_modified` DATETIME(6),
PRIMARY KEY (`branch_id`),
KEY `idx_xid` (`xid`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8;
-- the table to store lock data
CREATE TABLE IF NOT EXISTS `lock_table`
(
`row_key` VARCHAR(128) NOT NULL,
`xid` VARCHAR(96),
`transaction_id` BIGINT,
`branch_id` BIGINT NOT NULL,
`resource_id` VARCHAR(256),
`table_name` VARCHAR(32),
`pk` VARCHAR(36),
`gmt_create` DATETIME,
`gmt_modified` DATETIME,
PRIMARY KEY (`row_key`),
KEY `idx_branch_id` (`branch_id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8;
启动
启动seata server
的脚本位于bin
文件内,Linux/Mac
环境使用seata-server.sh
脚本启动;
Windows环境使用seata-server.bat
脚本启动。
Linux/Mac启动方式示例如下所示:
nohup sh seata-server.sh -p 8091 -h 127.0.0.1
命令说明:
通过nohup
命令让seata server在系统后台运行。
脚本参数:
- -p:指定启动seata server的端口号。
- -h:指定seata server所绑定的主机,这里配置要注意指定的主机IP要与业务服务内的配置文件保持一致;
如:-h 192.168.1.10,业务服务配置文件内应该配置192.168.1.10,即使在同一台主机上也要保持一致。
踩坑
- 问题1
启动过程中报错如下:
Java HotSpot(TM) 64-Bit Server VM warning: Cannot open file /opt/software/seata/logs/seata_gc.log due to No such file or directory
意思是没有存在日志目录,故按照报错日志建立对应的日志目录;
- 问题2
由于Seata不支持数据库8.0+以上的版本,然后小编安装的MySQL8.0+版本,故无法启动;
解决方案:
1.先将file.cof文件中数据库驱动修改为com.mysql.cj.jdbc.Driver
- 替换MySQL连接驱动包:
默认seata/lib
自带的jar为:
下载新的mysql-connect包:
mysql官网下载地址:https://dev.mysql.com/downloads/connector/j/
选择对应的MySQL版本,选择系统平台:Platform Independent,下载后解压缩;
把该Jar包上传到服务器替换seata自带的MySQL-connector依赖即可;
运行
经过上面的踩坑解决后,再次运行seata命令sh ./bin/seata-server.sh -p 8091 -h IP
,如图:
表明seata启动成功,注意这里是非后台运行。