在本地已有的 MySQL 8.4.0Nacos 3.0.3 基础上,从零装好 Seata Server 2.6.0:注册中心、配置中心都用 Nacos,全局事务状态存 MySQL。

环境前提(本机已具备)

  • JDK 21(本机 temurin-21,Seata 2.6 支持 JDK 8/11/17/21);
  • MySQL 8.4.0 运行在 127.0.0.1:3306(本机 root 无密码);
  • Nacos 3.0.3 运行在 127.0.0.1:8848(API 主端口),Web 控制台端口本机已调整为 8847(若没改过则是 8080);
  • Seata Server 默认监听 8091,安装前确认该端口空闲。

Step 1 · 下载安装包

从 Apache 官方归档站下载(历史版本归档,最稳定可靠):

1
2
3
4
cd ~/tools/seata
curl -L -o apache-seata-2.6.0-incubating-bin.tar.gz https://archive.apache.org/dist/incubator/seata/2.6.0/apache-seata-2.6.0-incubating-bin.tar.gz
tar xzf apache-seata-2.6.0-incubating-bin.tar.gz
cd apache-seata-2.6.0-incubating-bin/seata-server

Step 2 · 修改配置文件 conf/application.yml

编辑 conf/application.yml,把 registryconfig 的类型都设为 nacos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
seata:
# 注册中心:业务服务通过 Nacos 找到 seata-server
registry:
type: nacos
nacos:
application: seata-server
server-addr: 127.0.0.1:8848
namespace: "" # 使用 Nacos 默认 public 命名空间,留空
group: DEFAULT_GROUP
cluster: default
username: nacos # Nacos 未开启认证时留空
password: nacos
# 配置中心:Seata 自身的配置(store.* 等)从 Nacos 读取
config:
type: nacos
nacos:
server-addr: 127.0.0.1:8848
namespace: ""
group: DEFAULT_GROUP
username: nacos
password: nacos
data-id: seataServer.properties # 必须与 Step 4 在 Nacos 里创建的 dataId 一致
# 存储模式:声明用 DB 存储,具体连接参数在 Step 4 的 Nacos 配置里
store:
mode: db

重点: registry 解决怎么找到 seata-server,config 解决 Seata 的配置从哪读,两者都指向 Nacos。store.mode: db 只是声明存储类型,数据库连接参数不写在这里——config.type=nacos 后,store 的详细配置统一放 Nacos 的 seataServer.properties(见 Step 4),写回 application.yml 不会生效。

Step 3 · 下载 MySQL 驱动

Server 的 lib/ 里没有 MySQL 驱动(官方归档不打包),手动放一个(当前在 apache-seata-2.6.0-incubating-bin/seata-server/ 目录下执行):

1
curl -L -o lib/mysql-connector-j-8.4.0.jar https://repo1.maven.org/maven2/com/mysql/mysql-connector-j/8.4.0/mysql-connector-j-8.4.0.jar

Step 4 · 在 Nacos 创建 seataServer.properties

登录 Nacos 控制台(本机 http://127.0.0.1:8847/nacos;若未调整过控制台端口则为 http://127.0.0.1:8080/nacos),进入配置管理 → 配置列表,确认分组为 DEFAULT_GROUP,新建配置:

  • Data ID:seataServer.properties(必须与 Step 2 的 data-id 一致);
  • Group:DEFAULT_GROUP(必须与 Step 2 的 group 一致);
  • 配置格式:Properties
  • 内容:替换为你的实际数据库地址、端口、库名、用户名和密码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
store.mode=db
store.db.datasource=druid
store.db.dbType=mysql
store.db.driverClassName=com.mysql.cj.jdbc.Driver
store.db.url=jdbc:mysql://127.0.0.1:3306/seata?rewriteBatchedStatements=true&useSSL=false&characterEncoding=utf8
store.db.user=root
store.db.password=
store.db.min-conn=5
store.db.max-conn=20
store.db.global-table=global_table
store.db.branch-table=branch_table
store.db.lock-table=lock_table
store.db.distributed-lock-table=distributed_lock
store.db.query-limit=1000
store.db.max-wait=5000

Step 5 · 初始化数据库

在 MySQL 里创建 seata 库(与 store.db.url 中的库名一致),然后执行官方建表脚本。脚本在安装包内:script/server/db/。2.6.0 只有 mysql.sql(没有 mysql8.sql),直接用它,脚本会一次创建全部表:

1
2
mysql -u root -e "CREATE DATABASE IF NOT EXISTS seata DEFAULT CHARACTER SET utf8mb4;"
mysql -u root seata < ~/tools/seata/apache-seata-2.6.0-incubating-bin/seata-server/script/server/db/mysql.sql

验证:

1
mysql -u root -e "SHOW TABLES FROM seata;"

应看到 5 张表:global_tablebranch_tablelock_tabledistributed_lockvgroup_table(2.6.0 新增)。

Step 6 · 启动 Seata Server

进入 apache-seata-2.6.0-incubating-bin/seata-server/,推荐用后台方式启动(支持 start / stop / restart):

1
./bin/seata-server.sh start

调试时也可以用前台方式(日志直接打在终端,Ctrl+C 退出):

1
sh ./seata-server.sh

日志默认写到 ~/logs/seata/(seata-server.8091.all.log 等)。

Step 7 · 验证部署

  1. 端口:lsof -nP -iTCP:8091 -sTCP:LISTEN 应看到 java 进程监听;
  2. 日志:tail -20 ~/logs/seata/seata-server.8091.all.log,看到 Server started, service listen port: 8091 即成功;
  3. Nacos:控制台(8847)→ 服务管理 → 服务列表,分组切到 DEFAULT_GROUP,能看到 seata-server 实例(IP 为本机局域网 IP,端口 8091)。