金沙js29992

Mysql主从同步错误

四月 13th, 2019  |  金沙js29992

*************************** 2. row
***************************

1.1.1. show  master status

作用:查询master的Binary Log状态。

mysql> show master status

    -> ;

+——————+———-+————–+——————+——————-+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
Executed_Gtid_Set |

+——————+———-+————–+——————+——————-+

| mysql-bin.000007 |     2246 |              |                  |
                  |

+——————+———-+————–+——————+——————-+

1 row in set (0.00 sec)

 

这个命令需要super或者replication client权限,否则出现下面的拒绝访问错误。

 

mysql> show master status;

ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER,
REPLICATION CLIENT privilege(s) for this operation

 

金沙js29992 1

+—————————-+—————+—————–+—————————-+

1.1.8. 连接状态

 

使用性能数据库中的复制相关数据表,可以查看复制相关的性能数据。

 

mysql> use performance_schema;

Database changed

 

复制连接配置表:

mysql> select * from replication_connection_configuration\G

*************************** 1. row
***************************

                 CHANNEL_NAME: master111

                         HOST: 192.168.197.111

                         PORT: 3306

                         USER: repl

            NETWORK_INTERFACE:

                AUTO_POSITION: 1

                  SSL_ALLOWED: NO

                  SSL_CA_FILE:

                  SSL_CA_PATH:

              SSL_CERTIFICATE:

                   SSL_CIPHER:

                      SSL_KEY:

SSL_VERIFY_SERVER_CERTIFICATE: NO

                 SSL_CRL_FILE:

                 SSL_CRL_PATH:

    CONNECTION_RETRY_INTERVAL: 60

       CONNECTION_RETRY_COUNT: 86400

           HEARTBEAT_INTERVAL: 30.000

                  TLS_VERSION:

*************************** 2. row
***************************

                 CHANNEL_NAME: master110

                         HOST: 192.168.197.110

                         PORT: 3306

                         USER: repl

            NETWORK_INTERFACE:

                AUTO_POSITION: 1

                  SSL_ALLOWED: NO

                  SSL_CA_FILE:

                  SSL_CA_PATH:

              SSL_CERTIFICATE:

                   SSL_CIPHER:

                      SSL_KEY:

SSL_VERIFY_SERVER_CERTIFICATE: NO

                 SSL_CRL_FILE:

                 SSL_CRL_PATH:

    CONNECTION_RETRY_INTERVAL: 60

       CONNECTION_RETRY_COUNT: 86400

           HEARTBEAT_INTERVAL: 30.000

                  TLS_VERSION:

2 rows in set (0.00 sec)

 

 

 

 

复制连接状态表:

 

mysql> select * from replication_connection_status\G

*************************** 1. row
***************************

             CHANNEL_NAME: master111

               GROUP_NAME:

              SOURCE_UUID: a2392929-6dfb-11e7-b294-000c29b1c111

                THREAD_ID: 35

            SERVICE_STATE: ON

COUNT_RECEIVED_HEARTBEATS: 36

 LAST_HEARTBEAT_TIMESTAMP: 2017-08-18 12:54:09

 RECEIVED_TRANSACTION_SET: a2392929-6dfb-11e7-b294-000c29b1c111:1-11

        LAST_ERROR_NUMBER: 0

       LAST_ERROR_MESSAGE:

     LAST_ERROR_TIMESTAMP: 0000-00-00 00:00:00

*************************** 2. row
***************************

             CHANNEL_NAME: master110

               GROUP_NAME:

              SOURCE_UUID: a2392929-6dfb-11e7-b294-000c29b1c110

                THREAD_ID: 33

            SERVICE_STATE: ON

COUNT_RECEIVED_HEARTBEATS: 35

 LAST_HEARTBEAT_TIMESTAMP: 2017-08-18 12:54:03

 RECEIVED_TRANSACTION_SET: a2392929-6dfb-11e7-b294-000c29b1c110:1-6

        LAST_ERROR_NUMBER: 0

       LAST_ERROR_MESSAGE:

     LAST_ERROR_TIMESTAMP: 0000-00-00 00:00:00

2 rows in set (0.00 sec)

 

在从库中查看表performance_schema.replication_applier_status_by_worker
select * from
performance_schema.replication_applier_status_by_worker\G

该表中记录从库线程延迟复制的配置参数(延迟复制的线程被称为普通线程,比如CHANNEL_NAME和DESIRED_DELAY字段记录某个复制通道是否需要执行延迟复制,如果是MGR集群,则记录组复制从节点的延迟复制配置参数),该表中的记录在Server运行时可以使用CHANGE
MASTER
TO语句进行更改,我们先来看看表中记录的统计信息是什么样子的。

1.1.3. show  slave  status

作用:查询slave的状态。

mysql> show slave status\G

*************************** 1. row
***************************

               Slave_IO_State: Waiting for master to send event
                

  Master_Host: mysql101.coe2coe.me

                  Master_User: repl

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: mysql-bin.000007

          Read_Master_Log_Pos: 2781

               Relay_Log_File: mysql102-relay-bin.000016

                Relay_Log_Pos: 2994

        Relay_Master_Log_File: mysql-bin.000007

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

              Replicate_Do_DB:

          Replicate_Ignore_DB:

           Replicate_Do_Table:

       Replicate_Ignore_Table:

      Replicate_Wild_Do_Table:

  Replicate_Wild_Ignore_Table:
mysql.%,information_schema.%,performance_schema.%,sys.%

                   Last_Errno: 0

                   Last_Error:

                 Skip_Counter: 0

          Exec_Master_Log_Pos: 2781

              Relay_Log_Space: 3370

              Until_Condition: None

               Until_Log_File:

                Until_Log_Pos: 0

           Master_SSL_Allowed: No

           Master_SSL_CA_File:

           Master_SSL_CA_Path:

              Master_SSL_Cert:

            Master_SSL_Cipher:

               Master_SSL_Key:

        Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

                Last_IO_Errno: 0

                Last_IO_Error:

               Last_SQL_Errno: 0

               Last_SQL_Error:

  Replicate_Ignore_Server_Ids:

             Master_Server_Id: 101

                  Master_UUID: a2392929-6dfb-11e7-b294-000c29b1c101

             Master_Info_File: /opt/mysql/data/master.info

                    SQL_Delay: 0

          SQL_Remaining_Delay: NULL

      Slave_SQL_Running_State: Slave has read all relay log; waiting
for more updates

           Master_Retry_Count: 86400

                  Master_Bind:

      Last_IO_Error_Timestamp:

     Last_SQL_Error_Timestamp:

               Master_SSL_Crl:

           Master_SSL_Crlpath:

           Retrieved_Gtid_Set:

            Executed_Gtid_Set:

                Auto_Position: 0

         Replicate_Rewrite_DB:

                 Channel_Name:

           Master_TLS_Version:

1 row in set (0.00 sec)

 

 

几个重要的条目的含义如下:

Slave_IO_Running: slave上的和master的用于复制的网络连接的IO线程是否在运行中,用于接收来自master的Binary Log,并保存到slave本地的Relay Log中。

Master_Log_File: mysql-bin.000007 读取master上的这个Binary Log文件。

Read_Master_Log_Pos: 2781 读取的master上的Binary Log的位置。

Relay_Log_File: mysql102-relay-bin.000016 本地保存的Relay Log文件。

Relay_Log_Pos: 2994  本地保存的Relay Log的位置。

 

Slave_SQL_Running: slave上的SQL线程是否在运行中,用于读取slave本地的Relay Log,并执行其中的数据库操作,然后保存到slave本地的Binary Log中。

Relay_Master_Log_File: mysql-bin.000007 正在同步master上的Binary Log文件。

Exec_Master_Log_Pos: 2781 正在同步的位置。

 

Seconds_Behind_Master:slave的SQL线程执行的事件的时间戳和IO线程已保存的事件的时间戳的差值。此值为0表示复制性能良好。此值用于描述slave相对于master的延迟的秒数,但是实际上在特殊情况下只能反映出slave的IO线程和SQL线程之间的延迟。在slave和master之间的网络通讯情况不佳时,此值为0,但是slave和master之间可能早已不同步了。

 

 

*************************** 2. row
***************************
CHANNEL_NAME:
WORKER_ID: 2
THREAD_ID: NULL
SERVICE_STATE: OFF
LAST_SEEN_TRANSACTION: ANONYMOUS
LAST_ERROR_NUMBER: 1168
LAST_ERROR_MESSAGE: Worker 2 failed executing transaction ‘ANONYMOUS’
at master log mysql-bin.005656, end_log_pos 4529152; Error executing
row event: ‘Uerlying table which is differently defined or of non-MyISAM
type or doesn’t exist’
LAST_ERROR_TIMESTAMP: 2017-12-01 08:57:55

COUNT_HANDSHAKE_ERRORS: 0

1.1.7. reset master

reset master命令将删除在mysql-bin.index文件中列出的所有的Binary Log文件;同时还会清空gtid_purged这个只读的系统变量;同时还会清空mysql.gtid_executed数据表。这个操作使得slave将从开始位置重新进行与master的同步。

 

mysql> reset master;

Query OK, 0 rows affected, 1 warning (0.04 sec)

 

 

去主库查找binlog日志,看看发生了什么事情(日志定位方式有点挫)
mysqlbinlog –start-position=4529152 –stop-position=4539152
mysql-bin.005656 | more
这条命令是从4529152位置开始,但是我们出错的位置(end_log_pos)是这个位置结束,所以刚好错过,再往前一点就好
了。
通过这条命令看到日志时间是2017-12-01 01:47:41,所以我用了另外一条命令
mysqlbinlog –start-datetime=2017-12-01 01:47:41
–stop-datetime=2017-12-01 01:47:50 mysql-bin.005656 | more
找到日志:

admin@localhost : performance_schema 11:01:51> select * from
global_status limit 5;

1.1.2. show  slave hosts

作用:查询已经注册到master上的slave的信息。

mysql> show slave hosts;

+———–+——+——+———–+————————————–+

| Server_id | Host | Port | Master_id | Slave_UUID
                          |

金沙js29992,+———–+——+——+———–+————————————–+

|       103 |      | 3306 |       101 |
a2392929-6dfb-11e7-b294-000c29b1c103 |

|       102 |      | 3306 |       101 |
a2392929-6dfb-11e7-b294-000c29b1c102 |

+———–+——+——+———–+————————————–+

2 rows in set (0.00 sec)

 

Server_id:slave上的MySQL的server_id。

Host:slave的主机名。

Port:slave上的MySQL的端口号。

Master_id:master上的MySQL的server_id。

Slave_UUID:slave上的MySQL的UUID。

 

查看这个ID为332的这张表,发现这张表是自动创建的,创建的时候没有指定存储引擎,所以主从都出错了

3. replication_applier_status_by_coordinator表

1.1.6. reset  slave

作用:清除slave上设置的复制关系。

语法:RESET SLAVE [ALL]

 

reset slave命令将清除slave上的关于master的复制信息,比如slave保存在master.info文件中的master上的Binary Log文件的位置;还会删除slave本地的Relay Log文件。

reset slave命令并不会清除mysql.gtid_executed数据表或gtid_purged系统变量;reset slave命令也不会清除关于slave和master的连接参数,比如master的IP地址和端口。

reset slave all除了清除reset slave清除掉的内容之外,还会清除slave和master的连接参数。

 

mysql> stop slave;

Query OK, 0 rows affected (0.01 sec)

 

mysql> reset slave all;

Query OK, 0 rows affected (0.00 sec)

 

Coordinator stopped because there were error(s) in the worker(s). The
most recent failure being: Worker 2 failed executing transaction
‘ANONYMOUS’ at master log mysql-bin.005656, end_log_pos 4529152. See
error log and/or
performance_schema.replication_applier_status_by_worker table for
more details about this failure or others, if any.

*************************** 2. row
***************************

1.1.4. start slave

作用:启动slave复制相关线程,包括IO线程和SQL线程,也可以单独启动IO线程或者单独启动SQL线程。

语法:

START SLAVE [thread_types] [until_option] [connection_options]
[channel_option]

 

thread_types:指定要启动的线程类型。

    [thread_type [, thread_type] … ]

 

线程类型包括IO_THREAD和SQL_THREAD。

 

until_option:指定复制结束位置。

    UNTIL {   {SQL_BEFORE_GTIDS | SQL_AFTER_GTIDS} = gtid_set

          |   MASTER_LOG_FILE = ‘log_name’, MASTER_LOG_POS =
log_pos

          |   RELAY_LOG_FILE = ‘log_name’, RELAY_LOG_POS = log_pos

          |   SQL_AFTER_MTS_GAPS  }

 

使用Binary Log方式的复制时,指定MASTER_LOG_FILE和MASTER_LOG_POS参数,使用GTID方式的复制时,指定SQL_BEFORE_GTIDS和SQL_AFTER_GTIDS参数。

 

mysql> start slave;

Query OK, 0 rows affected (0.02 sec)

 

image.png

LAST _ERROR_TIMESTAMP: 0000-00-00 00:00:00

1.1. 复制的监控

 

注意:对于replication_connection_configuration表,不允许执行TRUNCATE
TABLE语句。

1.1.5. stop slave

作用:停止slave上的复制相关线程。

语法:

STOP SLAVE [thread_types]

thread_types:

    [thread_type [, thread_type] … ]

 

thread_type: IO_THREAD | SQL_THREAD

 

 

mysql>   stop slave;

Query OK, 0 rows affected (0.00 sec)

 

 

AUTO_POSITION: 1

|THREAD_ID | VARIABLE_NAME |VARIABLE_VALUE |

HOST: <NULL>

  • global_status:执行truncate会重置线程、帐户、主机、用户相关的全局状态变量值,但不会重置一些从不重置的全局状态变量值,同时会影响到status_by_account表中的状态变量值
  • session_status:不支持执行truncate语句
  • status_by_thread:将所有线程的状态变量值聚合到全局状态变量表(global_status)和帐户状态变量表(status_by_account),然后重置线程状态变量表。如果不收集帐户相关的统计信息,则会在status_by_user和status_by_host中单独收集主机和用户的状态变量值,是否收集host,user,account的状态变量值,可以使用系统变量performance_schema_accounts_size,performance_schema_hosts_size和performance_schema_users_size在server启动之前分别进行设置,设置为0,则表示不收集,大于0则表示要收集(注意,这些系统变量原本是用于控制accounts、hosts、users表中的行数,但是status_by_account,status_by_user,status_by_host中的account,user,host值是来自于accounts、hosts、users表,so…你懂的)

| group_replication_recovery |0| NULL |OFF | |0| |0000- 00-
0000:00:00|

root@localhost : performance _schema 12:55:26> select * from
replication_connection_statusG

|CHANNEL_NAME | WORKER_ID |THREAD_ID | SERVICE_STATE
|LAST_SEEN_TRANSACTION | LAST_ERROR_NUMBER |LAST_ERROR_MESSAGE |
LAST_ERROR_TIMESTAMP |

PS:

– END –返回搜狐,查看更多

+———–+————————-+————————————–+

+———–+—————————————–+—————-+

…………

COUNT_PROXY_USER_ACL_ERRORS: 0

CHANNEL _NAME: group_replication_applier

| CHANNEL_NAME |SERVICE_STATE | REMAINING_DELAY
|COUNT_TRANSACTIONS_RETRIES |

…….

2 rows in set (0.00 sec)

1row inset ( 0. 00sec)

  • THREAD_ID:会话级别系统变量对应的线程ID
  • VARIABLE_NAME:会话级别系统变量名
  • VARIABLE_VALUE:会话级别系统变量值

表中各字段含义及与show slave
status输出字段对应关系如下:

  • CHANNEL_NAME:组复制架构中使用的通道名称,通道名称为:group_replication_applier
  • MEMBER_ID:组复制架构中,组成员的ID,与组成员实例的server UUID相同
  • MEMBER_HOST:组复制架构中,组成员的网络地址(主机名或IP地址,与成员实例的hostname或report_host系统变量的值相同)
  • MEMBER_PORT:组复制架构中,组成员的侦听端口,与组成员实例的port或report_port系统变量的值相同
  • MEMBER_STATE:组复制架构中,组成员的状态 有效状态如下: *
    OFFLINE:组复制成员已经安装组复制插件,但未启动 *
    RECOVERING:组复制成员已经加入到组复制架构中,正在从组中接收数据,即正在加入集群 *
    ONLINE:组复制成员处于正常运行状态 *
    PS:组复制架构中,如果组成员的组复制状态发生错误,无法正常从组中接收数据是,可能会变成ERROR状态。如果发生网络故障或者其他成员宕机,那么剩余存活的孤立节点的状态可能会变为UNREACHABLE
  • THREAD_ID:定义变量的会话的线程标识符(ID)
  • VARIABLE_NAME:定义的变量名称,在该表中去掉了@字符的形式显式
  • VARIABLE_VALUE:定义的变量值

+————–+———–+———–+—————+———————–+——————-+——————–+———————-+

  • status_by_thread表仅包含前台线程的状态变量信息。该表记录数量自动计算,不建议手工指定系统变量perform_schema_max_thread_instances的值,如果手工指定,务必要大于后台线程数量*2,否则可能造成因为该变量的限制没有足够的intruments
    thread
    instances容量导致无法创建,进而无法监控前台线程的状态变量统计信息,如果无法监控前台线程的状态变量统计信息时,该表为空
  • show_compatibility_56系统变量的值会影响这些表中的信息记录
  • performance_schema执行状态变量收集时,对于全局级别的状态变量,如果threads表中INSTRUMENTED列值为“yes”则执行收集,否则不收集。但对于会话级别的状态变量,无论threads表的INSTRUMENTED字段值是否为yes,始终执行收集
  • performance_schema不会在状态变量表中收集Com_xxx状态变量的统计信息。要获取全局和每个会话语句的相关执行计数,请分别使用events_statements_summary_global_by_event_name和events_statements_summary_by_thread_by_event_name表进行查询。例如:SELECT
    EVENT_NAME, COUNT_STAR FROM
    events_statements_summary_global_by_event_name WHERE
    EVENT_NAME LIKE ‘statement/sql/%’;
  • 对于按帐户,主机名和用户名聚合的状态变量信息。详见下文。

admin@localhost : performance_schema 01:50:16> select * from
user_variables_by_thread;

IP: 192 .168.2.122

对于replication_connection_status表,不允许执行TRUNCATE
TABLE语句。

| CHANNEL_NAME |WORKER_ID | THREAD_ID |SERVICE_STATE |
LAST_SEEN_TRANSACTION |LAST_ERROR_NUMBER | LAST_ERROR_MESSAGE
|LAST_ERROR_TIMESTAMP |

+—————————-+———–+———–+—————+————————————————+——————-+——————–+———————-+

#
单线程、多线程主从复制时表中记录的内容相同,如果是多主复制,则每个复制通道各自有一行记录信息

SERVICE_STATE: ON

performance_schema记录系统变量的这些表不支持TRUNCATE
TABLE语句

COUNT _RECEIVED_HEARTBEATS: 136

|group_replication_applier | 91 |ON | 0 || 0000-00-00 00:00:00 |

COUNT_NAMEINFO_PERMANENT_ERRORS: 1

# 如果是MGR集群,则该表中会记录类似如下MGR集群信息

1.replication_applier_configuration表

| |4| 47 |ON | |0| |0000- 00- 0000:00:00|

1row inset ( 0. 00sec)

SSL_ALLOWED: NO

SSL_CERTIFICATE:

COUNT _TRANSACTIONS_ROWS_VALIDATING: 0

  • 在执行CHANGE MASTER TO之前,这些表是空的
  • 执行CHANGE MASTER
    TO之后,在配置参数表replication_applier_configuration和replication_connection_configuration中可以查看到配置信息了。此时,由于并没有启动复制,所以表中THREAD_ID列为NULL,SERVICE_STATE列的值为OFF(这两个字段存在与表replication_applier_status、replication_applier_status_by_coordinator、replication_applier_status_by_worker、replication_connection_status几个表中)
  • 执行START
    SLAVE后,可以看到连接线程和协调器线程,工作线程状态表中的THREAD_ID字段被分配了一个值,且SERVICE_STATE字段被修改为ON了,THREAD_ID字段值与show
    processlist语句中看到的线程id相同。 *
    如果IO线程空闲或正在从主库接收binlog时,线程的SERVICE_STATE值会一直为ON,THREAD_ID线程记录线程ID值,如果IO线程正在尝试连接主库但还没有成功建立连接时,THREAD_ID记录CONNECTING值,THREAD_ID字段记录线程ID,如果IO线程与主库的连接断开,或者主动停止IO线程,则SERVICE_STATE字段记录为OFF,THREAD_ID字段被修改为NULL
  • 执行 STOP
    SLAVE之后,所有复制IO线程、协调器线程、工作线程状态表中的THREAD_ID列变为NULL,SERVICE_STATE列的值变为OFF。注意:停止复制相关线程之后,这些记录并不会被清理
    ,因为复制意外终止或者临时需要会执行停止操作,可能需要获取一些状态信息用于排错或者其他用途。
  • 执行RESET
    SLAVE之后,所有记录复制配置和复制状态的表中记录的信息都会被清除。但是show
    slave
    status语句还是能查看到一些复制状态和配置信息,因为该语句是从内存中获取,RESET
    SLAVE语句并没有清理内存,而是清理了磁盘文件、表(还包括mysql.slave_master_info和mysql.slave_relay_log_info两个表)中记录的信息。如果需要清理内存里报错的复制信息,需要使用RESET
    SLAVE ALL;语句
  • 注意:对于replication_applier_status_by_worker、replication_applier_status_by_coordinator表(以及mysql.slave_wroker_info表)来说,如果是以单线程复制运行,则replication_applier_status_by_worker表记录一条WORKER_ID=0的记录,replication_applier_status_by_coordinator表与mysql.slave_wroker_info表为空(使用多线程复制,该表中才有记录)。即,如果slave_parallel_workers系统变量大于0,则在执行START
    SLAVE时这些表就被填充相应多线程工作线程的信息

admin@localhost : performance _schema 02:51:00> select * from
replication_connection_configurationG;

+—————————-+—————+

表中各字段含义以及与change master
to语句的选项对应关系如下:

+———–+————————-+—————-+

# status_by_account表

LAST _ERROR_MESSAGE:

05

17 rows inset (0.00 sec)

VIEW_ID: 15287289928409067:1

  • THREAD_ID:与该状态变量相关联的线程ID
  • VARIABLE_NAME:有会话级别的状态变量名称
  • VARIABLE_VALUE:与线程ID相关的会话级别状态变量值

+————–+———–+———–+—————+———————–+——————-+——————–+———————-+

  • status_by_account:终止的会话在account聚合表中的状态变量值将被聚合到用户和主机聚合表中的状态变量计数器中,然后重置帐户聚合表中的状态变量值
  • status_by_host:终止的会话对应的状态变量被重置
  • status_by_user:终止的会话对应的状态变量被重置

*************************** 1. row
***************************

5 rows inset (0.00 sec)

COUNT _TRANSACTIONS_CHECKED: 0

  • VARIABLE_NAME:系统变量名
  • VARIABLE_VALUE:系统变量值。对于global_variables,此列包含全局值。对于session_variables,此列包含当前会话生效的变量值

………….

……

按照帐号、主机、用户统计的状态变量统计表

status variables统计表

+—————————+————————————–+————-+————-+————–+

LAST_ERROR_SEEN: 2017 -12-3022 :34:51

+—————————-+—————-+

THREAD_ID: 101

该表记录组复制架构中,组成员的网络和状态信息。仅在组复制组件运行时表中才会有记录,我们先来看看表中记录的统计信息是什么样子的。

# 如果是MGR集群,则该表中会记录类似如下MGR集群信息

LAST _ERROR_NUMBER: 0

2d623f55-2111-11e8-9cc3-0025905b06da:1-2,

2 rows in set (0.00 sec)

表中各字段含义及与show slave
status输出字段对应关系如下:

LAST_SEEN: 2017 -12-3022 :35:29

表中各字段含义及与show slave
status输出字段对应关系如下:

该表中记录的是从库IO线程的连接状态信息(也记录组复制架构中其他节点的连接信息,组复制架构中一个节点加入集群之前的数据需要使用异步复制通道进行数据同步,组复制的异步复制通道信息在show
slave
status中不可见),我们先来看看表中记录的统计信息是什么样子的。

  • global_status:全局状态变量。如果只需要全局状态变量值的应用程序可以查询此表,中断的会话状态变量值会被聚合在此表中
  • session_status:当前会话的状态变量。如果只希望查询自己会话的所有状态变量值的应用程序可以查询此表(注意:该表包含没有会话级别的全局状态变量),只记录活跃会话,不记录已中断的会话
  • status_by_thread:按照线程ID作为标识符记录每个活跃会话的状态变量。如果需要在某个会话中查询其他会话的状态变量值可以查询此表(注意:该表不包含只具有全局级别的状态变量),只记录活跃会话,不记录中断的会话

admin@localhost : performance_schema 04:08 :36> select * from
status_by_account where USER is notnull limit 5;

表中各字段含义如下:

+—————————+————————————–+————-+————-+————–+

host_cache表保存连接到server的主机相关信息缓存,其中包含客户机主机名和IP地址信息,可以用于避免DNS查找。该表可以使用SELECT语句进行查询,但需要在server启动之前开启performance_schema参数,否则表记录为空。

  • show_compatibility_56系统变量的值会影响这些表中的信息记录
  • 会话变量表(session_variables,variables_by_thread)仅包含活跃会话的信息,已经终止的会话不会记录
  • variables_by_thread表仅包含关于前台线程的会话级别系统变量信息。且只记录拥有会话级别的系统变量,另外,如果在该表中有不能够被记录的会话级别系统变量,那么将增加状态变量Performance_schema_thread_instances_lost的值

不知不觉中,performance_schema系列快要接近尾声了,今天将带领大家一起踏上系列第六篇的征程(全系共6个篇章),在这一期里,我们将为大家全面讲解performance_schema中的复制状态与变量统计表。下面,请跟随我们一起开始performance_schema系统的学习之旅吧~

| group_replication_recovery |OFF | NULL |0|

对于replication_applier_status表,不允许执行TRUNCATE
TABLE语句。

+—————————+———–+—————+——————-+——————–+———————-+

# status_by_host表

03

HOST: <NULL>

4. replication_applier_status_by_worker表

admin@localhost : performance_schema 09:50:52> select * from
variables_by_thread limit 5; # 可以看到比前面两张表多了个THREAD_ID
字段来记录线程ID

SSL _CRL_FILE:

# global_status表

CHANNEL _NAME: group_replication_applier

FLUSH
STATUS语句会把所有活跃会话的状态变量值聚合到全局状态变量值中,然后重置所有活跃会话的状态变量值,并在account,host和user状态变量对应的统计表中重置已断开连接的状态变量聚合值。

# 单线程主从复制时表中记录的内容如下

admin@localhost : performance_schema 09:50:40> select * from
session_variables limit 5;

责任编辑:

MySQL
server维护着许多状态变量,提供有关其内部相关操作的信息。如下一些performance_schema表中记录着状态变量信息:

COUNT _RECEIVED_HEARTBEATS: 0

CHANNEL_NAME:

  • global_variables:全局系统变量。只需要全局系统变量值的应用程序可以从该表中获取
  • session_variables:当前会话的系统变量。只需要获取自己当前会话的系统变量值可以从该表中获取(注意,该表中包含了无会话级别的全局变量值,且该表不记录已断开连接的系统变量)
  • variables_by_thread:按照线程ID为标识符记录的会话系统变量。想要在当前线程中查询其他指定线程ID的会话级别系统变量时,应用程序可以从该表中获取(注意,该表中仅包含有会话级别的系统变量)

| CHANNEL_NAME |THREAD_ID | SERVICE_STATE |LAST_ERROR_NUMBER |
LAST_ERROR_MESSAGE |LAST_ERROR_TIMESTAMP |

SSL _CA_FILE:

PS1:如下系统状态变量被移动到了这些复制状态表中进行记录(MySQL
5.7.5版之前使用以下状态变量查看):

4 rows inset (0.00 sec)

root@localhost : performance_schema 11:03:38> select * from
replication_group_members;

#
单线程复制和多线程复制时表中的记录相同,如果是多主复制,则每个复制通道记录一行信息

5 rows inset (0.00 sec)

1row inset ( 0. 00sec)

按照帐号、主机名、用户名为分组对状态变量进行分类数据,例如:按照帐号表统计的表分组列为host和user列,聚合列当然就是状态变量本身(该功能是MySQL
5.7版本新增的),有如下几张表:

  • VARIABLE_NAME:状态变量名称
  • VARIABLE_VALUE:状态变量值。对于global_status,此列包含全局状态变量值。对于session_status,此列包含当前会话的状态变量值(同时包含无会话级别的全局状态变量值,且只包含活跃会话的状态变量值)。

……

+————–+—————+

  • replication_group_member_stats
  • replication_group_members
  • replication_applier_status
  • replication_connection_status
  • threads

通常,DBA或相关数据库运维人员在查看从库的复制相关的信息,都习惯性的使用show
slave
status语句查看。也许你会说,我也会用performance_schema下的表查看一些复制报错信息什么的。但是,你知道show
slave
status语句、mysql系统库下的复制信息记录表、performance_schema系统库下的复制信息记录表之间有什么区别吗?不知道?别急,本文即将为你详细介绍show
slave
status语句与performance_schema系统库下的复制信息记录表的区别(mysql系统库下的复制表区别详见后续
“mysql系统库全方位介绍”系列)。

金沙js29992 2

  • 当会话终止时收集的account相关状态变量会添加到全局状态变量表的计数器和accounts表的相关计数器中。如果account分类关闭了收集而host和user分类开启了收集,则会针对主机和用户分类聚合相应的状态变量值,同时将会话状态添加到hosts和users表中的相关计数器中
  • 如果将performance_schema_accounts_size,performance_schema_hosts_size和performance_schema_users_size系统变量分别设置为0,则不会收集帐户,主机和用户分类的统计信息
  • show_compatibility_56系统变量的值会影响这些表中的统计信息

| Aborted_connects |0|

+—————————-+———–+———–+—————+————————————————+——————-+——————–+———————-+

COUNT_FORMAT_ERRORS: 0

# variables_by_thread表

# 如果是MGR集群,则该表中会记录类似如下MGR集群信息

*************************** 1. row
***************************

|45| Bytes_sent |2901|

相关文章

标签:

Your Comments

近期评论

    功能


    网站地图xml地图