iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Mycat的使用 - 04.事务支持
  • 833
分享到

Mycat的使用 - 04.事务支持

2024-04-02 19:04:59 833人浏览 八月长安
摘要

03全局序列号篇详细介绍了分片表, 业务在使用分片表时, 很自然的可能会遇到一个事务中操作的数据分布在多个分片节点上, 即分布式事务. 先来直观感受下Mycat处理事务的过程.登陆tb3表的dnTest2节

03全局序列号篇详细介绍了分片表, 业务在使用分片表时, 很自然的可能会遇到一个事务中操作的数据分布在多个分片节点上, 即分布式事务. 先来直观感受下Mycat处理事务的过程.


登陆tb3表的dnTest2节点主机, 操作如下.

Mysql> set global innodb_lock_wait_timeout = 5;

Query OK, 0 rows affected (0.00 sec)


mysql> start transaction;

Query OK, 0 rows affected (0.00 sec)


mysql> select user_name from tb3 where user_id = 59 for update;

+-----------+

| user_name |

+-----------+

| mnop_f    |

+-----------+

1 row in set (0.00 sec)


登陆Mycat, 开启一个事务, 结合日志看下该过程.

mysql> start transaction;

Query OK, 0 rows affected (0.01 sec)


mysql> update tb3 set user_name = 'igkl_2f' where user_id = 4;

Query OK, 1 row affected (0.01 sec)

Rows matched: 1  Changed: 1  Warnings: 0


mysql> update tb3 set user_name = 'mnop_2f' where user_id = 59;

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

mysql> commit;

ERROR 1003 (HY000): Transaction error, need to rollback.

mysql> rollback;

Query OK, 0 rows affected (0.00 sec)


关键日志如下.

03/27 12:07:09.189  DEBUG [$_NIOReactOR-1-RW] (ServerQueryHandler.java:56) -ServerConnection [id=2, schema=testdb, host=192.168.4.184, user=test_user,txIsolation=3, autocommit=true, schema=testdb]begin

03/27 12:16:33.019  DEBUG [$_NIOREACTOR-2-RW] (ServerQueryHandler.java:56) -ServerConnection [id=6, schema=testdb, host=192.168.4.184, user=test_user,txIsolation=3, autocommit=false, schema=testdb]update tb3 set user_name = 'igkl_2f' where user_id = 4

03/27 12:16:33.021  DEBUG [$_NIOREACTOR-2-RW] (NonBlockingSession.java:113) -ServerConnection [id=6, schema=testdb, host=192.168.4.184, user=test_user,txIsolation=3, autocommit=false, schema=testdb]update tb3 set user_name = 'igkl_2f' where user_id = 4, route={

   1 -> dnTest1{update tb3 set user_name = 'igkl_2f' where user_id = 4}

03/27 12:16:33.021  DEBUG [$_NIOREACTOR-2-RW] (MySQLConnection.java:459) -con need syn ,total syn cmd 3 commands SET names utf8;SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;SET autocommit=0;schema change:false con:MySQLConnection [id=8, lastTime=1522124193021, user=appacc, schema=test1, old shema=test1, borrowed=true, fromSlaveDB=false, threadId=28, charset=utf8, txIsolation=0, autocommit=true, attachment=dnTest1{update tb3 set user_name = 'igkl_2f' where user_id = 4}, respHandler=SinglenodeHandler [node=dnTest1{update tb3 set user_name = 'igkl_2f' where user_id = 4}, packetId=0], host=192.168.4.235, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=true]

03/27 12:16:52.795  DEBUG [$_NIOREACTOR-2-RW] (ServerQueryHandler.java:56) -ServerConnection [id=6, schema=testdb, host=192.168.4.184, user=test_user,txIsolation=3, autocommit=false, schema=testdb]update tb3 set user_name = 'mnop_2f' where user_id = 59

03/27 12:16:52.796  DEBUG [$_NIOREACTOR-2-RW] (NonBlockingSession.java:113) -ServerConnection [id=6, schema=testdb, host=192.168.4.184, user=test_user,txIsolation=3, autocommit=false, schema=testdb]update tb3 set user_name = 'mnop_2f' where user_id = 59, route={

   1 -> dnTest2{update tb3 set user_name = 'mnop_2f' where user_id = 59}

03/27 12:16:52.797  DEBUG [$_NIOREACTOR-2-RW] (MySQLConnection.java:459) -con need syn ,total syn cmd 3 commands SET names utf8;SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;SET autocommit=0;schema change:false con:MySQLConnection [id=20, lastTime=1522124212797, user=appacc, schema=test2, old shema=test2, borrowed=true, fromSlaveDB=false, threadId=8, charset=utf8, txIsolation=0, autocommit=true, attachment=dnTest2{update tb3 set user_name = 'mnop_2f' where user_id = 59}, respHandler=SingleNodeHandler [node=dnTest2{update tb3 set user_name = 'mnop_2f' where user_id = 59}, packetId=0], host=192.168.4.151, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=true]

03/27 12:16:58.800   WARN [$_NIOREACTOR-1-RW] (SingleNodeHandler.java:232) -execute  sql err : errno:1205 Lock wait timeout exceeded; try restarting transaction con:MySQLConnection [id=20, lastTime=1522124212784, user=appacc, schema=test2, old shema=test2, borrowed=true, fromSlaveDB=false, threadId=8, charset=utf8, txIsolation=3, autocommit=false, attachment=dnTest2{update tb3 set user_name = 'mnop_2f' where user_id = 59}, respHandler=SingleNodeHandler [node=dnTest2{update tb3 set user_name = 'mnop_2f' where user_id = 59}, packetId=1], host=192.168.4.151, port=3306, statusSync=org.opencloudb.mysql.nio.MySQLConnection$StatusSync@52530466, writeQueue=0, modifiedSQLExecuted=true] frontend host:192.168.4.184/59858/test_user

03/27 12:17:05.660  DEBUG [$_NIOREACTOR-2-RW] (ServerQueryHandler.java:56) -ServerConnection [id=6, schema=testdb, host=192.168.4.184, user=test_user,txIsolation=3, autocommit=false, schema=testdb]commit

03/27 12:17:08.868  DEBUG [$_NIOREACTOR-2-RW] (ServerQueryHandler.java:56) -ServerConnection [id=6, schema=testdb, host=192.168.4.184, user=test_user,txIsolation=3, autocommit=false, schema=testdb]rollback

03/27 12:17:08.870  DEBUG [$_NIOREACTOR-2-RW] (RollbackNodeHandler.java:79) -rollback job run for MySQLConnection [id=20, lastTime=1522124212784, user=appacc, schema=test2, old shema=test2, borrowed=true, fromSlaveDB=false, threadId=8, charset=utf8, txIsolation=3, autocommit=false, attachment=dnTest2{update tb3 set user_name = 'mnop_2f' where user_id = 59}, respHandler=SingleNodeHandler [node=dnTest2{update tb3 set user_name = 'mnop_2f' where user_id = 59}, packetId=1], host=192.168.4.151, port=3306, statusSync=org.opencloudb.mysql.nio.MySQLConnection$StatusSync@52530466, writeQueue=0, modifiedSQLExecuted=true]

03/27 12:17:08.870  DEBUG [$_NIOREACTOR-2-RW] (RollbackNodeHandler.java:79) -rollback job run for MySQLConnection [id=8, lastTime=1522124193010, user=appacc, schema=test1, old shema=test1, borrowed=true, fromSlaveDB=false, threadId=28, charset=utf8, txIsolation=3, autocommit=false, attachment=dnTest1{update tb3 set user_name = 'igkl_2f' where user_id = 4}, respHandler=SingleNodeHandler [node=dnTest1{update tb3 set user_name = 'igkl_2f' where user_id = 4}, packetId=1], host=192.168.4.235, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=true]


Mycat目前对于未分片的节点, 是可以保证事务的完整性的; 若是多个分片节点, 在执行事务时, 遇到任何分片出错, 也是能保证所有分片回滚的, 即上边展示的情况. 可是应用一旦进入commit过程, 若此时出现问题, 其就无能为力了, 这也是Mycat称之为弱XA的原因.


上述commit过程是指: InnoDB prepare, write/sync Binlog, InnoDB commit(其历经5.5至5.7版本的多次迭代优化, 这块内容也是精彩纷呈). 虽该阶段一般不会出现问题, 这也正暗示了Mycat在特殊情况下还不能保证分布式事务安全. 那应用架构中又如何实现可靠的分布式事务呢, 这又是另一个宏大的话题了...


若感兴趣可关注订阅号”数据库最佳实践”(DBBestPractice).

Mycat的使用 - 04.事务支持

您可能感兴趣的文档:

--结束END--

本文标题: Mycat的使用 - 04.事务支持

本文链接: https://www.lsjlt.com/news/42283.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MyCat不支持的SQL语句总结
    已知的MyCat不支持的SQL语句类型如下: SELECT: 跨分片(实体库)的交叉查询 跨节点的联合查询 (如用户库的表和平台库的表做联合查询) INSERT: 插入的字段不包含分片字段 (如...
    99+
    2024-04-02
  • redis中支不支持事务
    小编给大家分享一下redis中支不支持事务,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Redis是一个开源的使用ANSI C语...
    99+
    2024-04-02
  • Cassandra支持事务吗
    是的,Cassandra支持事务,但是它的事务模型与传统的关系数据库管理系统(RDBMS)有所不同。在Cassandra中,原子性只...
    99+
    2024-04-09
    Cassandra
  • Couchbase支持事务吗
    是的,Couchbase在最新的版本中支持事务。从Couchbase 6.5版本开始,Couchbase引入了事务性应用程序开发模型...
    99+
    2024-04-09
    Couchbase
  • MongoDB事务支持详解
    目录事务简介如何使用事务事务语法API 区别实际使用事务调优时间限制oplog 大小限制事务简介 事务是数据库中处理的逻辑单元,每个事务中包括一个或多个数据库操作,既可以是读操作,也...
    99+
    2022-12-26
    mongodb是否支持事务 mongodb支持事务 MongoDB中的事务支持
  • MongoDB 事务支持详解
    目录事务简介如何使用事务事务语法API 区别实际使用事务调优时间限制oplog 大小限制事务简介 事务是数据库中处理的逻辑单元,每个事务中包括一个或多个数据库操作,既可以是读操作,也可以是写操作。 ACID 是一个&ld...
    99+
    2022-12-26
    mongodb是否支持事务 mongodb支持事务 MongoDB中的事务支持
  • Redis事务支持ACID吗
    小编给大家分享一下Redis事务支持ACID吗,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!什么是事务的 ACID鬼吹灯之《云南...
    99+
    2024-04-02
  • DynamoDB支持事务管理吗
    是的,DynamoDB 支持原子事务操作,可以确保多个操作要么全部成功,要么全部失败,这样可以确保数据的一致性。您可以使用 Dyna...
    99+
    2024-04-02
  • Couchbase支持事务处理吗
    是的,Couchbase支持事务处理。在Couchbase 6.5版本及以上,引入了事务功能,可以在一个或多个文档上执行原子性操作。...
    99+
    2024-04-09
    Couchbase
  • MySQL支不支持事务嵌套的案例分析
    MySQL支不支持事务嵌套的案例分析?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!最近开发中遇到了使用MySQL,多次开启...
    99+
    2024-04-02
  • SQLite是否支持事务处理
    是的,SQLite支持事务处理。SQLite使用事务来确保数据的一致性和完整性。事务可以帮助在多个操作之间保持数据的一致性,并且可以...
    99+
    2024-04-09
    SQLite
  • mongodb为什么不支持事务
    MongoDB不支持事务的主要原因是为了追求高性能和可伸缩性。事务需要锁定数据,并保证数据的一致性,这会限制并发性能和增加系统的复杂...
    99+
    2023-09-04
    mongodb
  • FMDB支持的事务类型有哪些
    这篇文章主要为大家展示了“FMDB支持的事务类型有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“FMDB支持的事务类型有哪些”这篇文章吧。FMDB支持的事务类型在数据库中,事务可以保证数据操...
    99+
    2023-06-04
  • Couchbase的事务支持是如何工作的
    Couchbase不支持传统的SQL事务,因为它是一个分布式的非关系型数据库。但是,Couchbase提供了一些机制来实现类似于事务...
    99+
    2024-04-02
  • Samza是否支持分布式事务
    是的,Samza支持分布式事务。它提供了由Kafka事务管理器管理的端到端事务保证,可以确保消息的精确一次性传递,并实现了精确一次性...
    99+
    2024-04-02
  • vuejs支持的事件有哪些
    本篇内容介绍了“vuejs支持的事件有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • Cassandra怎么支持事务性操作
    Cassandra是一个分布式数据库系统,它支持原子性、一致性、隔离性和持久性(ACID)事务性操作。在Cassandra中,可以使...
    99+
    2024-03-15
    Cassandra
  • Mycat监控工具Mycat-web的使用方法
    本篇文章为大家展示了Mycat监控工具Mycat-web的使用方法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Mycat-web下载地址:http://dl.my...
    99+
    2024-04-02
  • HBase是否支持事务管理功能
    HBase本身并不直接支持事务管理功能。在HBase中,数据以行为单位进行存储,并支持原子性的读写操作,但不提供事务级别的一致性和隔...
    99+
    2024-03-11
    HBase
  • Redis事务为什么不支持回滚
    目录前言Redis 有事务吗Redis 事务实现原理Redis 事务 ACID 特性A - 原子性 C - 一致性I - 隔离性D - 持久性watch 命令watch 命...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作