繁体   English   中英

服务器崩溃后如何提交XA事务

[英]How to commit a XA transaction after server crashed

我在Mint 18上使用MySQL 5.7.19-0ubuntu0.16.04.1,在准备XA事务时发现,然后服务器崩溃了。 服务重启后,我无法再进行交易了。 它仍然锁着桌子。

mysql> xa start'1';

mysql> xa结尾'1';

mysq> xa准备'1';

须藤killall -9 mysqld

sudo服务启动mysqld

mysql> xa commit'1';

错误1399(XAE07):XAER_RMFAIL:当全局事务处于NON-EXISTING状态时,无法执行该命令

mysql> xa start'1';

错误1440(XAE08):XAER_DUPID:XID已存在

bug71352的情况与此类似,但我的版本相距甚远。 我错过了什么吗?

我无法重现该问题:

mysql> \! lsb_release --description
Description:    Linux Mint 18.2 Sonya

mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.7.19    |
+-----------+
1 row in set (0.00 sec)

mysql> DROP TABLE IF EXISTS `t`;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CREATE TABLE IF NOT EXISTS `t` (
    ->   `id` INT
    -> ) ENGINE=InnoDB;
Query OK, 0 rows affected (0.00 sec)

mysql> XA START '1';
Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO `t`
    -> VALUES (1);
Query OK, 1 row affected (0.01 sec)

mysql> XA END '1';
Query OK, 0 rows affected (0.00 sec)

mysql> XA PREPARE '1';
Query OK, 0 rows affected (0.00 sec)

mysql> XA RECOVER;
+----------+--------------+--------------+------+
| formatID | gtrid_length | bqual_length | data |
+----------+--------------+--------------+------+
|        1 |            1 |            0 | 1    |
+----------+--------------+--------------+------+
1 row in set (0.00 sec)

-- Killed mysqld from other session

mysql> \! service mysql status | grep 'Active'
   Active: inactive (dead) since 33s ago

-- Restared mysqld from other session

mysql> \! service mysql status | grep 'Active'
   Active: active (running) since 3s ago

mysql> XA RECOVER;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:
Current database:

+----------+--------------+--------------+------+
| formatID | gtrid_length | bqual_length | data |
+----------+--------------+--------------+------+
|        1 |            1 |            0 | 1    |
+----------+--------------+--------------+------+
1 row in set (0.02 sec)

mysql> SELECT `id` FROM `t`;
Empty set (0.00 sec)

mysql> XA START '1';
ERROR 1440 (XAE08): XAER_DUPID: The XID already exists

mysql> XA COMMIT '1';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT `id` FROM `t`;
+------+
| id   |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

xa启动必须失败,这是预期的,这是未决的XA事务。 您需要先进行xa恢复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM