一招解决MySQL中DDL语句被阻塞的问题场景

mysql> use test;<br>Database changed<br><br>mysql> CREATE TABLE `test` (<br>    ->   `id` int(11) AUTO_INCREMENT PRIMARY KEY,<br>    ->   `name` varchar(10)<br>    -> );<br>Query OK, 0 rows affected (0.01 sec)<br><br># 插入数据<br>mysql> insert into test values (1,'aaa'),(2,'bbb'),(3,'ccc'),(4,'ddd');<br>Query OK, 1 row affected (0.01 sec)<br><br>mysql> begin;<br>Query OK, 0 rows affected (0.01 sec)<br><br><br>mysql> select * from test;<br>+----+------+<br>| id | name |<br>+----+------+<br>|  1 | aaa  |<br>|  2 | bbb  |<br>|  3 | ccc  |<br>|  4 | ddd  |<br>+----+------+<br>4 rows in set (0.00 sec)<br><br># 模拟元数据锁阻塞<br># 会话 1<br>mysql> lock tables test read;<br>Query OK, 0 rows affected (0.00 sec)<br><br># 会话 2<br>mysql> alter table test add c1 varchar(25);<br>阻塞中<br><br># 会话 3<br><br>mysql> show processlist;<br>+-------+-------------+---------------------+------+------------------+--------+---------------------------------------------------------------+-------------------------------------+<br>| Id    | User        | Host                | db   | Command          | Time   | State                                                         | Info                                |<br>+-------+-------------+---------------------+------+------------------+--------+---------------------------------------------------------------+-------------------------------------+<br>|    1  | universe_op | 127.0.0.1:28904     | NULL | Sleep            |     12 |                                                               | NULL                                |<br>|    2  | universe_op | 127.0.0.1:28912     | NULL | Sleep            |     12 |                                                               | NULL                                |<br>|  5752 | universe_op | 10.186.64.180:51808 | NULL | Binlog Dump GTID | 605454 | Master has sent all binlog to slave; waiting for more updates | NULL                                |<br>| 28452 | root        | 10.186.65.110:10756 | test | Sleep            |     73 |                                                               | NULL                                |<br>| 28454 | root        | 10.186.64.180:45674 | test | Query            |      7 | Waiting for table metadata lock                               | alter table test add c1 varchar(25) |<br>| 28497 | root        | 10.186.64.180:47026 | test | Query            |      0 | starting                                                      | show processlist                    |<br>+-------+-------------+---------------------+------+------------------+--------+---------------------------------------------------------------+-------------------------------------+<br>