Seata2.0使用Mysql8报错



注:
  只贴出来使用的nacos、mysql配置,其他的都是默认的。
  下载下来的是没有nacos和mysql的配置的,若需要在application.yml 的同级目录下的 application.example.yml 文件里复制过来修改。

修改前的配置

application.yml

文件位置:seata-server-2.0.0/conf/application.yml

seata:
  #配置中心
  config:
  	#配置中心类型,默认为file
    type: nacos
    #nacos配置中心配置信息
    nacos:
      #nacos服务地址
      server-addr: 127.0.0.1:8848
      #命名空间,默认为空也就是public
      namespace:
      #分组,默认为DEFAULT_GROUP
      group: SEATA_GROUP
      context-path:
      #指定配置中心的seata配置
      data-id: seata.yaml
  #注册中心
  registry:
  	#注册中心类型,默认为file
    type: nacos
    #nacos注册中心配置信息
    nacos:
      #指定注册到nacos注册中心的服务名
      application: seata-server
      #nacos服务地址
      server-addr: 127.0.0.1:8848
      #分组,默认为DEFAULT_GROUP
      group: SEATA_GROUP
      #命名空间,默认为空也就是public
      namespace:
      #指定注册至nacos注册中心的集群名
      cluster: default
      context-path:
#      #if use MSE Nacos with auth, mutex with username/password attribute
#      access-key:
#      secret-key:
  store:
  	#指定seata配置存放的位置,默认file,缓存
    mode: db
    #数据库连接信息
    db:
      datasource: druid
      #数据库类型
      db-type: mysql
      #数据库驱动
      driver-class-name: com.mysql.jdbc.Driver
      #数据库连接
      url: jdbc:mysql://localhost:3306/seata?useUnicode=true
      #数据库用户名
      user: mysql
      #数据库密码
      password: mysql
      #最小连接数
      min-conn: 10
      #最大连接数
      max-conn: 100
      #指定seata数据库的全局事务信息表,自动生成,默认即可
      global-table: global_table
      #指定seata数据库的分支信息(事务参与者信息)表,自动生成,默认即可
      branch-table: branch_table
      #指定seata数据库的全局锁表,自动生成,默认即可
      lock-table: lock_table
      #指定seata数据库的分布式锁表,自动生成,默认即可
      distributed-lock-table: distributed_lock
      #最大等待时间
      max-wait: 5000
  #  server:
  #    service-port: 8091 #If not configured, the default is '${server.port} + 1000'

seata.yml

文件位置:nacos访问页面的配置中心/seata.yml

#事务分组
#主要用于解决异地机房停电容错,可以快速切换事务分组。
#default_tx_group:配置事务的分组名称,可以自定义
#default:必须等于application.yml中 seata.registry.nacos.cluster=default
service:
    vgroupMapping:
        default_tx_group: default

store:
    mode: db
    lock:
        mode: db
    session:
        mode: db
    #数据库连接
    db:
        datasource: druid
        dbType: mysql
        driverClassName: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/seata?useUnicode=true&rewriteBatchedStatements=true
        user: mysql
        password: mysql
        minConn: 5
        maxConn: 30
        globalTable: global_table
        branchTable: branch_table
        distributedLockTable: distributed_lock
        queryLimit: 100
        lockTable: lock_table
        maxWait: 5000

修改后的配置

application.yml

文件位置:seata-server-2.0.0/conf/application.yml

seata:
  #配置中心
  config:
  	#配置中心类型,默认为file
    type: nacos
    #nacos配置中心配置信息
    nacos:
      #nacos服务地址
      server-addr: 127.0.0.1:8848
      #命名空间,默认为空也就是public
      namespace:
      #分组,默认为DEFAULT_GROUP
      group: SEATA_GROUP
      context-path:
      #指定配置中心的seata配置
      data-id: seata.yaml
  #注册中心
  registry:
  	#注册中心类型,默认为file
    type: nacos
    #nacos注册中心配置信息
    nacos:
      #指定注册到nacos注册中心的服务名
      application: seata-server
      #nacos服务地址
      server-addr: 127.0.0.1:8848
      #分组,默认为DEFAULT_GROUP
      group: SEATA_GROUP
      #命名空间,默认为空也就是public
      namespace:
      #指定注册至nacos注册中心的集群名
      cluster: default
      context-path:
#      #if use MSE Nacos with auth, mutex with username/password attribute
#      access-key:
#      secret-key:
  store:
  	#指定seata配置存放的位置,默认file,缓存
    mode: db
    #数据库连接信息
    db:
      #数据源
      datasource: druid
      #数据库类型
      db-type: mysql
      #数据库驱动
      #mysql5.x:driverClassName: com.mysql.jdbc.Driver
      driverClassName: com.mysql.cj.jdbc.Driver
      #数据库连接
      #mysql5.x
      #url: jdbc:mysql://localhost:3306/seata?useUnicode=true
      #mysql8.x
      url: jdbc:mysql://localhost:3306/seata?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true
      #数据库用户名
      user: mysql
      #数据库密码
      password: mysql
      #最小连接数
      min-conn: 10
      #最大连接数
      max-conn: 100
      #指定seata数据库的全局事务信息表,自动生成,默认即可
      global-table: global_table
      #指定seata数据库的分支信息(事务参与者信息)表,自动生成,默认即可
      branch-table: branch_table
      #指定seata数据库的全局锁表,自动生成,默认即可
      lock-table: lock_table
      #指定seata数据库的分布式锁表,自动生成,默认即可
      distributed-lock-table: distributed_lock
      #最大等待时间
      max-wait: 5000
  #  server:
  #    service-port: 8091 #If not configured, the default is '${server.port} + 1000'

seata.yml

文件位置:nacos访问页面的配置中心/seata.yml

#事务分组
#主要用于解决异地机房停电容错,可以快速切换事务分组。
#default_tx_group:配置事务的分组名称,可以自定义
#default:必须等于application.yml中 seata.registry.nacos.cluster=default
service:
    vgroupMapping:
        default_tx_group: default

store:
    mode: db
    lock:
        mode: db
    session:
        mode: db
    #数据库连接
    db:
        datasource: druid
        dbType: mysql
        #mysql5.x:driverClassName: com.mysql.jdbc.Driver
        driverClassName: com.mysql.cj.jdbc.Driver
        #mysql5.x
        #url: jdbc:mysql://localhost:3306/seata?useUnicode=true&rewriteBatchedStatements=true
        #mysql8.x
        url: jdbc:mysql://localhost:3306/seata?useSSL=false&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true
        user: mysql
        password: mysql
        minConn: 5
        maxConn: 30
        globalTable: global_table
        branchTable: branch_table
        lockTable: lock_table
        distributedLockTable: distributed_lock
        #查询条数
        queryLimit: 100
        #最大等待时间
        maxWait: 5000

修改前的报错:

1、启动Seata服务,报ssl验证失败

原因:mysql8需要关闭验证
解决方法:在mysql连接后加上useSSL=false,例如:

url: jdbc:mysql://localhost:3306/seata?useSSL=false

注:seata配置mysql连接不能用 | 连接,在业务服务中是可以的。

2、启动Seata服务,报Unknown system variable ‘query_cache_size’

原因:mysql8是没有这个配置的,驱动用的是com.mysql.jdbc.Driver驱动,在 seata-server-2.0.0\lib\jdbc 下的驱动,应该是为了兼容低版本的。

mysql-connector-java-5.1.42.jar
mysql-connector-java-8.0.27.jar

解决方法:
把驱动从 com.mysql.jdbc.Driver 改成 com.mysql.cj.jdbc.Driver

mysql连接属性参考

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: |
      #MySQL数据库链接
        jdbc:mysql://localhost:3306/test?
      #关闭安全验证,5.7版本以后必须加,之前的版本默认为false
        useSSL=false&
      #指定所处理字符解码的格式 
        useUnicode=true&
      #指定所处理字符编码的格式 
        characterEncoding=utf8&
      #指定时区
        serverTimezone=GMT%2B8&
      #允许客户端从服务器获取公钥,mysql8以后要添加,防止报错
        allowPublicKeyRetrieval=true&
      #mybatis允许多行sql执行
        allowMultiQueries=true&
      #打开批处理配置,对insert/update/delete有效,默认是false
        rewriteBatchedStatements=true&
      #Java把零值日期转换为null值
        zeroDateTimeBehavior=convertToNull
    username: mysql
    password: mysql
    maximum-pool-size:  5

nacos配置中心配置数据库连接参考

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: > 
      jdbc:mysql://localhost:3306/test?
      useSSL=false&
      useUnicode=true&
      characterEncoding=utf8&
      serverTimezone=GMT%2B8&
      allowPublicKeyRetrieval=true&
      allowMultiQueries=true&
      rewriteBatchedStatements=true&
      zeroDateTimeBehavior=convertToNull
    username: mysql
    password: mysql
    maximum-pool-size:  5

注:
  不能使用 | 连接
  不能使用 # 注释,会被编译

nacos配置中心自建seata配置

​ 访问nacos配置页面:http://localhost:8848/nacos/

​ 新建配置:

​   命名空间:public

​   Data ID:seata.yaml

​   Group:SEATA_GROUP

​   配置格式:yaml

注:也可以建properties文件,nacos配置中心默认就是properties文件,如果是properties文件时Data ID可以不需要后缀的文件扩展名,seata配置方便使用properties、txt,使用不同类型的时候seata不需要增加文件类型,只需要使用 application.ymlseata.config.nacos.data-id=seata.yaml 指定到nacos配置中心配置好的文件名称就好了。

总结

  还是有点尴尬的,我还以为默认的配置mysql8也可以使用,所以才开始就是用的默认配置,驱动也是看到他们说的seata的报错可能是没驱动,换了个驱动就好了。配置不写那么多注释了哈,参考就好,我能看懂的也不多,很多都很清晰。(◕ᴗ◕✿)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值