MySQL复制中“system user”的作用是什么

这篇文章的重点是理解为什么在 SHOW PROCESSLIST 和复制从站的 information_schema.PROCESSLIST 视图中可以看到“system user”。

系统用户不是真正的用户,仅用于显示目的,以表明它是执行任务的系统。
它由复制从属服务器上的 I/O 和 SQL 线程(连接和应用程序线程)使用。
这些线程由系统处理,而不是由登录用户处理。

例如,可以在 SHOW PROCESSLIST 或者 information_schema.PROCESSLIST 视图的输出中看到系统用户:

mysql> SHOW PROCESSLIST;
+----+-----------------+-----------------+--------------------+---------+-------
| Id | User            | Host            | db                 | Command | Time  | State                                                  | Info             |
+----+-----------------+-----------------+--------------------+---------+-------
|  2 | system user     |                 | NULL               | Connect | 10103 | Waiting for master to send event                       | NULL             |
|  3 | event_scheduler | localhost       | NULL               | Daemon  | 10102 | Waiting on empty queue                                 | NULL             |
|  8 | root            | localhost:33356 | performance_schema | Query   |     0 | starting                                               | SHOW PROCESSLIST |
| 10 | system user     |                 | NULL               | Connect |     0 | Slave has read all relay log; waiting for more updates | NULL             |
| 11 | system user     |                 | NULL               | Connect |     0 | System lock                                            | NULL             |
mysql> SELECT * FROM information_schema.PROCESSLIST;
+----+-----------------+-----------------+--------------------+---------+-------
| ID | USER            | HOST            | DB                 | COMMAND | TIME  | STATE                                       | INFO                                         |
+----+-----------------+-----------------+--------------------+---------+-------
|  3 | event_scheduler | localhost       | NULL               | Daemon  | 10173 | Waiting on empty queue                      | NULL                                         |
| 12 | system user     |                 | NULL               | Connect |     3 | System lock                                 | NULL                                         |
| 14 | system user     |                 | NULL               | Connect |     3 | Waiting for an event from Coordinator       | NULL                                         |
| 13 | system user     |                 | NULL               | Connect |     3 | System lock                                 | NULL                                         |
|  2 | system user     |                 | NULL               | Connect | 10174 | Waiting for master to send event            | NULL                                         |
|  8 | root            | localhost:33356 | performance_schema | Query   |     0 | executing                                   | SELECT * FROM information_schema.processlist |
| 16 | system user     |                 | NULL               | Connect |     3 | Waiting for an event from Coordinator       | NULL                                         |

Performance Schema 不会显示“系统用户”,而是显示这些连接的 root@localhost。
sys 模式将改为显示线程名称。
例如使用 performance_schema.threads 表和 sys.session 视图:

mysql> SELECT THREAD_ID, NAME, PROCESSLIST_ID, PROCESSLIST_USER, PROCESSLIST_HOST, PROCESSLIST_TIME, PROCESSLIST_STATE FROM performance_schema.threads WHERE TYPE = 'foreground';
+-----------+--------------------------------------+--------
| THREAD_ID | NAME                                 | PROCESSLIST_ID | PROCESSLIST_USER | PROCESSLIST_HOST | PROCESSLIST_TIME | PROCESSLIST_STATE                                      |
+-----------+--------------------------------------+----------------+------------------+----
|        77 | thread/sql/slave_io                  |              2 | NULL             | NULL             |            10111 | Waiting for master to send event                       |
|        78 | thread/sql/event_scheduler           |              3 | NULL             | NULL             |             NULL | Waiting on empty queue                                 |
|        81 | thread/sql/compress_gtid_table       |              4 | NULL             | NULL             |            10110 | Suspending                                             |
|        83 | thread/thread_pool/tp_one_connection |              8 | root             | localhost        |                0 | Sending data                                           |
|        85 | thread/sql/slave_sql                 |             10 | root             | localhost        |                0 | Slave has read all relay log; waiting for more updates |
|        86 | thread/sql/slave_worker              |             11 | root             | localhost        |                0 | System lock                                            |
|        87 | thread/sql/slave_worker              |             12 | root             | localhost        |
mysql> SELECT thd_id, conn_id, user, state, time FROM sys.session;
+--------+---------+---------------------+---------------------------------------------+-------+
| thd_id | conn_id | user                | state                                       | time  |
+--------+---------+---------------------+---------------------------------------------+-------+
|     77 |       2 | sql/slave_io        | Waiting for master to send event            | 10378 |
|     83 |       8 | root@localhost      | Sending data                                |     0 |
|     86 |      11 | sql/slave_worker    | System lock                                 |     0 |
|     87 |      12 | sql/slave_worker    | System lock                                 |     0 |
|     88 |      13 | sql/slave_worker    | Waiting for an event from Coordinator       |     0 |
|     89 |      14 | sql/slave_worker    | Waiting for an event from Coordinator       |     0 |
|     90 |      15 | sql/slave_worker    | System lock                                 |     0 |
|     91 |      16 | sql/slave_worker    | Waiting for an event from Coordinator       |     0 |
|     92 |      17 | sql/slave_worker    | Waiting for an event from Coordinator       |     0 |
|     93 |      18 | sql/slave_worker    | Waiting for an event from Coordinator       |     0 |
|     85 |      10 | sql/slave_sql       | Waiting for dependent transaction to commit |     0 |
|     78 |       3 | sql/event_scheduler | Waiting on empty queue                      |  NULL |
+--------+---------+---------------------+---------------------------------------------+-------+
12 rows in set (0.42 sec)
日期:2020-09-17 00:11:17 来源:oir作者:oir