Got error -1 when reading table

环境:Percona Server for MySQL 5.5.18

模拟三个Terminal,实现当引用锁定表的查询被杀死时,错误日志中出现的Got error -1 when reading table

Terminal A

mysql> set session autocommit=0;
Query OK, 0 rows affected (0.00 sec)

mysql> create table t1(i1 int not null primary key, v2 varchar(20)) engine =innodb;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t1 values(1,'a'),(2, 'b'),(3, 'c'),(4,'d');
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> commit;
Query OK, 0 rows affected (0.01 sec)

mysql> select * from t1 where i1 = 2 for update;
+----+------+
| i1 | v2   |
+----+------+
|  2 | b    |
+----+------+
1 row in set (0.00 sec)

mysql> select * from t1 where i1 = 4 for update;
+----+------+
| i1 | v2   |
+----+------+
|  4 | d    |
+----+------+
1 row in set (0.00 sec)

Terminal B

mysql> set session autocommit=0;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from t1 where i1 = 4 for update; 此时的查询会因为 Terminal A未提交而等待

Terminal C

mysql> show processlist;
+----+------+-----------+------+---------+------+------------+------------------------------------------+
| Id | User | Host      | db   | Command | Time | State      | Info                                  |
+----+------+-----------+------+---------+------+------------+------------------------------------------+
|  1 | root | localhost | test | Query   |    6 | statistics | select * from t1 where i1 = 4 for update |
|  3 | root | localhost | NULL | Query   |    0 | NULL       | show processlist                         |
|  5 | root | localhost | test | Sleep   |  328 |            | NULL                                  |
+----+------+-----------+------+---------+------+------------+------------------------------------------+
3 rows in set (0.00 sec)

mysql> kill query 1;  杀掉Terminal B 的Query
Query OK, 0 rows affected (0.00 sec)

查看日志
171111  0:17:04 [ERROR] Got error -1 when reading table './test/t1'
posted @ 2017-11-11 14:58  Coye  阅读(444)  评论(0编辑  收藏  举报