首页 > 数据库 > > 13.7 数据库管理语句(3)
13.7.5.23 SHOW MASTER STATUS 语法
SHOW MASTER STATUS
该语句提供有关主站的二进制日志文件的状态信息。 它需要SUPER或REPLICATION CLIENT权限。
当全局事务ID正在使用时,Executed_Gtid_Set显示已在主服务器上执行的事务的GTID集合。 这与此服务器上gtid_executed系统变量的值以及此服务器上SHOW SLAVE STATUS输出中的Executed_Gtid_Set的值相同。
13.7.5.24 show open tables 语法
SHOW OPEN TABLES
[{FROM | IN} db_name]
[LIKE 'pattern' | WHERE expr]
SHOW OPEN TABLES列出当前在表缓存中打开的非TEMPORARY表。 FROM子句(如果存在)将显示的表限制为存在于db_name数据库中的表。 LIKE子句(如果存在)指示要匹配哪些表名。
SHOW OPEN TABLES输出包含以下列:
包含该表的数据库。
表名
表中有表锁或锁请求的数量。 例如,如果一个客户端使用LOCK TABLE t1 WRITE获取表的锁,则In_use将为1.如果在表保持锁定状态时另一客户端发出LOCK TABLE t1 WRITE,则客户端将阻止等待锁,但锁请求 导致In_use为2.如果计数为零,表已打开,但当前未被使用。 HANDLER ... OPEN语句也增加了In_use,并且由HANDLER ... CLOSE而降低。
表名是否被锁定。 名称锁定用于诸如删除或重命名表等操作。
如果您没有表权限,则不会显示在SHOW OPEN TABLES的输出中。
13.7.5.25 SHOW PLUGINS 语法
SHOW PLUGINS
SHOW PLUGINS显示有关服务器插件的信息。 插件信息也可在INFORMATION_SCHEMA.PLUGINS表中找到。
SHOW PLUGINS输出具有以下列:
对于使用INSTALL PLUGIN安装的插件, Name和Library 的值值也在mysql.plugin表中被注册。

13.7.5.29 SHOW PROCESSLIST 语法
SHOW [FULL] PROCESSLIST
SHOW PROCESSLIST显示哪些线程正在运行。 您还可以从INFORMATION_SCHEMA PROCESSLIST表或mysqladmin processlist命令中获取此信息。 如果你有PROCESS权限,你可以看到所有的线程。 否则,您只能看到自己的线程(即与您正在使用的MySQL帐户关联的线程)。 如果您不使用FULL关键字,则每个语句的前100个字符将显示在“info”字段中。
进程信息也可以从performance_schema.threads表中获得。 但是,对 threads的访问不需要mutex,并且对服务器性能的影响最小。 INFORMATION_SCHEMA.PROCESSLIST和SHOW PROCESSLIST有负面的性能影响,因为它们需要mutex。 threads还显示有关后台线程的信息,其中INFORMATION_SCHEMA.PROCESSLIST和SHOW PROCESSLIST没有。 这意味着可以使用 threads来监视其他线程信息源无法进行的活动。
SHOW PROCESSLIST语句是非常有用的,如果你得到“ too many connections”的错误信息,并想知道发生了什么。 MySQL保留一个额外的连接供具有SUPER特权的帐户使用,以确保管理员应该始终能够连接并检查系统(假设您没有将此特权授予所有用户)。
线程可以用KILL语句杀死
SHOW PROCESSLIST生产的列具有以下含义:
连接标识符。 这是在INFORMATION_SCHEMA.PROCESSLIST表的ID列,Performance Schema的 threads 表的PROCESSLIST_ID列中显示CONNECTION_ID()函数返回的相同类型的值。
发布该语句的MySQL用户。 如果这是系统用户,它指由服务器派生的非客户线程来处理内部任务。 这可能是复制slave服务器上使用的I / O或SQL线程或延迟行处理程序。 未经身份验证的用户是指已与客户端连接关联但客户端用户的身份验证尚未完成的线程。 event_scheduler引用监视预定事件的线程。 对于 system user, Host 列中没有指定主机。
发出该语句的客户端的主机名(除没有主机的系统用户外)。 SHOW PROCESSLIST以host_name:client_port格式报告TCP / IP连接的主机名,以便更容易确定哪个客户端正在做什么。
线程正在执行的命令的类型。 此列的值对应于客户端/服务器协议和Com_xxx状态变量的COM_xxx命令。
线程处于当前状态的时间(以秒为单位)。 对于slave SQL线程,该值是上次复制事件的时间戳与slave机器的实时之间的秒数。
指示线程正在执行的动作,事件或状态
大多数州相当于非常快速的操作。 如果一个线程停留在一个给定的状态很多秒,可能有一个问题需要调查。
对于SHOW PROCESSLIST语句,State的值为NULL。
线程正在执行的语句,如果它没有执行任何语句,则为NULL。 该语句可能是发送给服务器的语句,或者是语句执行其他语句时的最内层语句。 例如,如果CALL语句执行正在执行SELECT语句的存储过程,则Info值将显示SELECT语句。
13.7.5.30 SHOW PROFILE 语法
SHOW PROFILE和SHOW PROFILES语句显示分析信息,该信息指示当前会话期间执行的语句的资源使用情况。
注意:
这些语句已被弃用,并将在未来的MySQL版本中删除。 改用 Performance Schema;
分析由分析会话变量控制,该分析会话变量的默认值为0(OFF)。 通过将分析设置为1或ON来启用分析:
mysql> SET profiling = 1;
--有点像 oracle 开启 autotrace的意思
SHOW PROFILES显示发送到服务器的最新报表的列表。 列表大小由profiling_history_size会话变量控制,该变量的默认值为15.最大值为100.将该值设置为0具有禁用分析的实际效果。
除了SHOW PROFILE和SHOW PROFILES之外,所有语句都进行了概要分析,因此您不会在概要文件列表中找到这些语句。 格式错误的语句被描述。 例如,SHOW PROFILING是一个非法的语句,如果您尝试执行它,则会出现语法错误,但会显示在概要分析列表中。
SHOW PROFILE显示单个语句的详细信息。 如果没有FOR QUERY n子句,则输出属于最近执行的语句。 如果包含FOR QUERY n,SHOW PROFILE显示语句n的信息。 n的值对应于由SHOW PROFILES显示的Query_ID值。
可以给出LIMIT row_count子句以将输出限制为row_count行。 如果给出LIMIT,则可以添加OFFSET offset ,将偏移行从开始输出到全部行集合中。
默认情况下,SHOW PROFILE显示状态和持续时间列。 状态值与SHOW PROCESSLIST显示的状态值相似,但对于某些状态值的两个语句的解释可能存在一些细微差异(请参见第8.14节“检查线程信息”)。
可以指定可选的type值来显示特定的其他类型的信息:
每次会话都启用分析。 会话结束时,其分析信息将丢失。
注意:
分析仅在某些体系结构上部分可用。 对于依赖于getrusage()系统调用的值,在不支持该调用的系统(如Windows)上返回NULL。 另外,分析是按进程进行的,而不是针对每个线程。 这意味着服务器中除您自己以外的线程上的活动可能会影响您看到的时间信息。
您还可以从INFORMATION_SCHEMA中的PROFILING表中获取分析信息。 例如,以下查询产生相同的结果:
SHOW PROFILE FOR QUERY 2;
SELECT STATE, FORMAT(DURATION, 6) AS DURATION FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID = 2 ORDER BY SEQ;
13.7.5.32 SHOW RELAYLOG EVENTS 语法
SHOW RELAYLOG EVENTS
[IN 'log_name']
[FROM pos]
[LIMIT [offset,] row_count]
[channel_option]
channel_option:
FOR CHANNEL channel
显示复制 slave 的中继日志中的事件。 如果您不指定'log_name',则会显示第一个relay 日志。 该语句对master没有影响。
LIMIT子句与SELECT语句的语法相同。
注意:
发出不带LIMIT子句的SHOW RELAYLOG事件可能启动耗时非常耗时的过程,因为服务器向客户端返回中继日志的完整内容(包括修改从站接收到的数据的所有语句)。
可选的FOR CHANNEL通道子句使您可以命名该语句应用于哪个复制通道。 提供FOR CHANNEL通道子句将语句应用于特定的复制通道。 如果没有通道被命名并且不存在额外的通道,则该语句适用于默认通道。
使用多个复制通道时,如果SHOW RELAYLOG EVENTS语句没有使用FOR CHANNEL通道子句定义的通道,则会生成错误。
正在列出的文件的名称。
事件发生的位置。
描述事件类型的标识符。
发生事件的服务器的服务器ID。
主事件二进制日志中此事件的End_log_pos值。
有关事件类型的更多详细信息。 这些信息的格式取决于事件类型。
某些与设置用户和系统变量有关的事件不包括在SHOW RELAYLOG EVENTS的输出中。 要获得完整的中继日志中事件,请使用mysqlbinlog。
13.7.5.33 SHOW SLAVE HOSTS 语法
SHOW SLAVE HOSTS
显示当前在主站中注册的复制从站列表。
SHOW SLAVE HOSTS应该在充当复制master的服务器上执行。 该语句显示有关已连接或已连接为复制slave服务器的服务器的信息,每行结果对应于一个从服务器,如下所示:
slave 服务器的唯一服务器标识,在从服务器的选项文件中配置,或在命令行上使用--server-id = value。
使用--report-host选项指定的从服务器的主机名。 这可能与操作系统中配置的计算机名称不同。
slave 服务器用户名称,在slave 设备上用--report-user选项指定。 仅当主服务器使用--show-slave-auth-info选项启动时,语句输出才包含此列。
slave 服务器密码为,使用--report-password选项在slave 上指定。 仅当主服务器使用--show-slave-auth-info选项启动时,语句输出才包含此列。
slave 服务器正在监听的master上的端口,具有--report-port选项的slave站上指定。
此列中的零表示未设置从端口(--report-port)。
slave 服务器复制的master服务器的唯一服务器标识。 这是执行SHOW SLAVE HOSTS的服务器的服务器ID,因此结果中每行都列出相同的值。
13.7.5.34 SHOW SLAVE STATUS 语法
SHOW SLAVE STATUS [FOR CHANNEL channel]
此语句提供有关从属线程基本参数的状态信息。 它需要SUPER或REPLICATION CLIENT权限。
如果您使用mysql客户端发出此语句,则可以使用\G语句终止符而不是分号来获得更易读的垂直布局:
性能方案提供了公开复制信息的表。 这与SHOW SLAVE STATUS语句中的信息类似,但以表形式表示。
以下列表描述了SHOW SLAVE STATUS返回的字段。
从属I/O线程的SHOW PROCESSLIST输出的状态字段的副本。 这会告诉你线程正在做什么:尝试连接到主服务器,等待来自主服务器的事件,重新连接到主服务器等等。 有关可能状态的列表,请参见第8.14.5节“复制从I / O线程状态”。
主机与主机连接。
用于连接到主服务器的帐户的用户名。
用于连接到主站的端口。
连接重试之间的秒数(默认值为60)。 这可以使用CHANGE MASTER TO语句来设置。
I/O线程当前正在读取的主二进制日志文件的名称。
I/O线程读取的当前主二进制日志文件中的位置。
SQL线程当前正在读取和执行的中继日志文件的名称。
SQL线程读取并执行的当前中继日志文件中的位置。
包含由SQL线程执行的最新事件的主二进制日志文件的名称。
I/O线程是否已启动并已成功连接到主站。 在内部,该线程的状态由以下三个值之一表示:
从I/O线程未运行。 对于此状态,Slave_IO_Running是 NO。
slave I/O线程正在运行,但未连接到复制主节点。 对于此状态,Slave_IO_Running正在连接。
从I/O线程正在运行,并连接到复制master服务器。 对于此状态,Slave_IO_Running为Yes。
Slave_running系统状态变量的值与此值相对应。
SQL线程是否启动。
使用--replicate-do-db和--replicate-ignore-db选项指定的数据库列表(如果有)。
使用--replicate-do-table,--replicate-ignore-table,--replicate-wild-do-table和--replicate-wild-ignore-table选项指定的表的列表(如果有)。
这些列是Last_SQL_Errno和Last_SQL_Error的别名。
发出RESET MASTER或RESET SLAVE将重置这些列中显示的值。
注意:
当从属SQL线程收到错误时,它首先报告错误,然后停止SQL线程。 这意味着即使Slave_SQL_Running 仍然显示YES,SHOW SLAVE STATUS仍会显示Last_SQL_Errno为非零值的时间窗口。
sql_slave_skip_counter系统变量的当前值。
SQL线程已读取并执行的当前主二进制日志文件中的位置,标记要处理的下一个事务或事件的开始。 从现有的slave启动新的slave时,可以使用CHANGE MASTER TO语句的MASTER_LOG_POS选项来使用该值,以便新的从站从该点读取数据。 主站二进制日志中的(Relay_Master_Log_File,Exec_Master_Log_Pos)给出的坐标对应于中继日志中的(Relay_Log_File,Relay_Log_Pos)给出的坐标。
来自中继日志的已执行的事务序列中的不一致可能导致此值成为“低水位标记”。 换句话说,出现在位置之前的事务被保证提交,但位置之后的事务可能已经提交或没有提交。 如果需要纠正这些差距,请使用 START SLAVE UNTIL SQL_AFTER_MTS_GAPS.。
所有现有中继日志文件的总大小。
START SLAVE语句的UNTIL子句中指定的值。
Until_Condition具有以下值:
Until_Log_File和Until_Log_Pos指示定义SQL线程停止执行的坐标的日志文件名称和位置。
这些字段显示从设备连接到主设备时使用的SSL参数(如果有的话)。
Master_SSL_Allowed 有如下值:
其他SSL相关字段的值与CHANGE MASTER TO语句的MASTER_SSL_CA,MASTER_SSL_CAPATH,MASTER_SSL_CERT,MASTER_SSL_CIPHER,MASTER_SSL_CRL,MASTER_SSL_CRLPATH,MASTER_SSL_KEY和MASTER_SSL_VERIFY_SERVER_CERT选项的值相对应。
该字段表示slave“late”的情况:
本质上,该字段用于度量slave SQL线程和slave I/O线程之间的时间差(以秒为单位)。 如果主站和从站之间的网络连接速度很快,则从站I / O线程与主站非常接近,所以此字段很好地近似了从站SQL线程与主站进行比较的时间。 如果网络很慢,这不是一个好的近似; 从属SQL线程可能经常被慢速读取slave I/O线程干扰,所以即使I/O线程比主节点晚,Seconds_Behind_Master通常也会显示值0。 换句话说,这一列仅适用于快速网络。
即使master 时间和slave 时间 的时钟时间不相同,只要从I/O线程启动时计算出的时间差从此保持不变,即使有时间差也能正常工作。 任何更改(包括NTP更新)都可能导致时钟偏移,从而使得Seconds_Behind_Master的计算可能性降低。
在MySQL 5.7中,如果slave SQL线程未运行,或者SQL线程已占用所有中继日志且slave I/O线程未运行,则此字段为NULL(未定义或未知)。 (在较旧版本的MySQL中,如果slave SQL线程或slave I / O线程未运行或未连接到主服务器,则此字段为NULL。)如果I/O线程正在运行但中继日志耗尽, Seconds_Behind_Master设置为0。
Seconds_Behind_Master的值基于存储在事件中的时间戳,这些事件通过复制保存。 这意味着如果主M1本身就是slave M0,任何来一M0的二进制日志的M1的二进制日志的任何事件都有M0的时间戳。 这使MySQL能够成功复制TIMESTAMP。 但是,Seconds_Behind_Master的问题在于,如果M1也收到来自客户端的直接更新,则Seconds_Behind_Master值随机波动,因为有时来自M1的最后一个源自M0的事件,有时是M1上的直接更新的结果。
在使用多线程slave时,请记住该值基于Exec_Master_Log_Pos,因此可能不会反映最近提交的事务的位置。
导致I/O线程停止的最新错误的错误号和错误消息。 错误编号0和空字符串的消息表示“ no error”。如果Last_IO_Error值不为空,错误值也出现在从站的错误日志中。
如果从站是多线程的,则SQL线程是工作线程的协调器。 在这种情况下,Last_SQL_Error字段显示了Performance Schema 中replication_applier_status_by_coordinator表中显示的Last_Error_Message列的确切内容。 字段值被修改以表明其他工作线程中可能存在更多故障,这可以在显示每个工作线程状态的replication_applier_status_by_worker表中看到。 如果该表不可用,则可以使用从站错误日志。
I/O错误信息包括显示最近发生I/O线程错误的时间戳。 此时间戳使用格式YYMMDD HH:MM:SS,并出现在Last_IO_Error_Timestamp列中。
发出RESET MASTER或RESET SLAVE将重置这些列中显示的值。
在MySQL 5.7中,您使用CHANGE MASTER TO语句的IGNORE_SERVER_IDS选项将一个slave设置忽略来自0个或更多master的事件。 默认情况下,它是空白的,并且通常仅在使用循环或其他多主复制设置时才进行修改。 在非空白时为Replicate_Ignore_Server_Ids显示的消息包含一个或多个数字的逗号分隔列表,指示要忽略的服务器ID。 例如:
Replicate_Ignore_Server_Ids: 2, 6, 9
注意:
Ignored_server_ids还显示要忽略的服务器标识,但是是以空格分隔的列表,其前面是要忽略的服务器标识总数。 例如,如果发出包含IGNORE_SERVER_IDS =(2,6,9)选项的CHANGE MASTER TO语句以告诉从服务器忽略具有服务器ID为2,6或9的主服务器,则该信息如下所示:
Ignored_server_ids: 3, 2, 6, 9
第一个数字(在本例中为3)显示被忽略的服务器ID的数量。
Replicate_Ignore_Server_Ids过滤由I/O线程执行,而不是由SQL线程执行,这意味着被过滤掉的事件不会写入中继日志。 这与服务器选项(如适用于SQL线程的--replicate-do-table)所采用的筛选操作不同。
来自master服务器的server_id值。
master服务器的server_uuid值。
http://master.info文件的位置。
slave必须滞后master的秒数。
当Slave_SQL_Running_State在主执行事件后等待MASTER_DELAY秒时,此字段包含剩余延迟秒数。 在其他时候,这个字段是NULL。
SQL线程的状态(类似于Slave_IO_State)。 该值与SHOW PROCESSLIST显示的SQL线程的状态值相同。 第8.14.6节“复制从SQL SQL线程状态”提供了可能状态的列表
在连接丢失的情况下,从设备可以尝试重新连接到主设备的次数。 可以使用CHANGE MASTER TO语句的MASTER_RETRY_COUNT选项(首选)或旧的--master-retry-count服务器选项(仍支持向后兼容性)来设置此值。
从站绑定的网络接口(如果有的话)。 这是使用CHANGE MASTER TO语句的MASTER_BIND选项设置的。
YYMMDD HH:MM:SS格式的时间戳,显示最近发生I/O错误的时间。
YYMMDD HH:MM:SS格式的时间戳,显示最后一次SQL错误发生的时间。
全局事务标识的集合对应于该slave收到的所有事务。 如果GTID未被使用,则为空。
这是relay日志中存在或已存在的所有GTID的集合。 一旦收到Gtid_log_event,就会添加每个GTID。 这可能会导致部分传输的事务将其GTID包含在集合中。
当由于执行RESET SLAVE或CHANGE MASTER TO或由于--relay-log-recovery选项的影响而导致所有relay日志丢失时,该组将被清除。 当relay_log_purge = 1时,最新的relay日志始终保持不变,并且该集合未被清除。
写在二进制日志中的一组全局事务ID。 这与此服务器上全局gtid_executed系统变量的值以及此服务器上SHOW MASTER STATUS输出中的Executed_Gtid_Set的值相同。 如果GTID未被使用,则为空。
1如果自动定位正在使用中; 否则为0。
Replicate_Rewrite_DB值显示指定的任何复制过滤规则。 例如,如果设置了以下复制筛选器规则:
CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB=((db1,db2), (db3,db4));
Replicate_Rewrite_DB值显示:
Replicate_Rewrite_DB: (db1,db2),(db3,db4)
正在显示的复制通道。 总是有一个默认的复制通道,可以添加更多的复制通道。
主设备上使用的TLS版本。 有关TLS版本信息。
13.7.5.35 SHOW STATUS 语法
SHOW [GLOBAL | SESSION] STATUS [LIKE 'pattern' | WHERE expr]
SHOW STATUS提供服务器状态信息(参见第5.1.7节“服务器状态变量”)。 该声明不需要任何权限。 它只需要连接到服务器的能力。
状态变量信息也可以从这些来源获得:
对于SHOW STATUS,LIKE子句(如果存在)指示要匹配哪些变量名称。 可以使用WHERE子句来使用更一般的条件来选择行。
SHOW STATUS接受一个可选的GLOBAL或SESSION变量作用域修饰符:
每次调用SHOW STATUS语句都会使用一个内部临时表并增加全局的Created_tmp_tables值。
13.7.5.36 SHOW TABLE STATUS 语法
SHOW TABLE STATUS [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr]
SHOW TABLE STATUS works喜欢SHOW TABLES,但提供了大量有关每个非TEMPORARY表的信息。 您也可以使用mysqlshow --status db_name命令获取此列表。 LIKE子句(如果存在)指示要匹配哪些表名。 可以使用WHERE子句来使用更一般的条件来选择行,如第24.34节“SHOW语句的扩展”所述。
该声明还显示有关视图的信息。
SHOW TABLE STATUS输出包含以下列:
表的名称
表的存储引擎
表的.frm文件的版本号。
行存储格式(Fixed, Dynamic, Compressed,Redundant, Compact)。 对于MyISAM表,Dynamic对应于myisamchk -dvv报告为Packed的内容。 InnoDB表格格式在使用Antelope文件格式时为 Redundant 或 Compact 型,或者在使用 Barracuda 文件格式时为 Compressed 或 Dynamic 。
行数。 一些存储引擎(如MyISAM)存储确切的计数。 对于其他存储引擎,如InnoDB,这个值是一个近似值,可能会与实际值相差40%到50%。 在这种情况下,使用SELECT COUNT(*)来获得准确的计数。
INFORMATION_SCHEMA数据库中的表的行值为NULL。
平均行长。
对于MyISAM,Data_length是数据文件的长度,以字节为单位。
对于InnoDB,Data_length是为聚簇索引分配的近似内存量,以字节为单位。 具体而言,聚合索引大小(以页面为单位)乘以InnoDB页面大小。
有关其他存储引擎的信息,请参阅本节末尾的注释
对于MyISAM,Max_data_length是数据文件的最大长度。 在给定使用的数据指针大小的情况下,这是可以存储在表中的数据的总字节数。
未用于InnoDB。
有关其他存储引擎的信息,请参阅本节末尾的注释。
对于MyISAM,Index_length是索引文件的长度,以字节为单位。
对于InnoDB,Index_length是为非聚集索引分配的近似内存量(以字节为单位)。 具体来说,它是非聚集索引大小的总和,以页面为单位,乘以InnoDB页面大小。
有关其他存储引擎的信息,请参阅本节末尾的注释。
已分配但未使用的字节数。
这些信息也显示在InnoDB表中(以前,它在comment值中)。 InnoDB表报告该表所属表空间的可用空间。 对于位于共享表空间中的表,这是共享表空间的可用空间。 如果您使用多个表空间并且该表具有自己的表空间,则可用空间仅适用于该表。 可用空间意味着完全空闲范围内的字节数减去安全余量。 即使可用空间显示为0,只要不需要分配新扩展数据块,就可以插入行。
对于分区表,这个值只是一个估计值,可能不是绝对正确的。 在这种情况下获取此信息的更准确的方法是查询INFORMATION_SCHEMA.PARTITIONS表,如下例所示:
SELECT SUM(DATA_FREE) FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA = 'mydb' AND TABLE_NAME = 'mytable';
下一个AUTO_INCREMENT值。
表创建的时间。
数据文件上次更新时。 对于某些存储引擎,此值为NULL。 例如,InnoDB在其系统表空间中存储多个表,并且数据文件时间戳不适用。 即使每个InnoDB表在单独的.ibd文件中使用文件每表模式,更改缓冲也会延迟写入数据文件,因此文件修改时间与最后一次插入,更新或删除时间不同。 对于MyISAM,使用数据文件时间戳; 但是,在Windows上,时间戳不会被更新更新,因此该值不准确。
表最后一次被检查时。 并非所有存储引擎都会更新,在这种情况下,值始终为NULL。
表的字符集和排序规则。
现场校验和值(如果有的话)。
与CREATE TABLE一起使用的额外选项。 调用CREATE TABLE时提供的原始选项将保留,此处报告的选项可能与活动表格设置和选项不同。
创建表时使用的注释(或者为什么MySQL无法访问表信息的信息)。
注意:
对于SHOW VARIABLES,LIKE子句(如果存在)指示要匹配哪些变量名称。 可以使用WHERE子句来使用更一般的条件来选择行
SHOW VARIABLES接受一个可选的GLOBAL或SESSION变量作用域修饰符:
SHOW VARIABLES受限于版本相关的显示宽度限制。 对于非常长的值未完全显示的变量,请使用SELECT作为解决方法。 例如:
SELECT @@GLOBAL.innodb_data_file_path;
大多数系统变量可以在服务器启动时设置(只读变量,如version_comment是例外)。 许多可以在运行时使用SET语句进行更改。
要获取名称与模式匹配的变量列表,请在LIKE子句中使用%通配符:
SHOW VARIABLES LIKE '%size%';
SHOW GLOBAL VARIABLES LIKE '%size%';
通配符可以在要匹配的模式中的任何位置使用。 严格来说,因为_是与任何单个字符匹配的通配符,所以您应该将其作为\ _来匹配它。 在实践中,这很少遇到。
13.7.5.40 show warnings 语法
SHOW WARNINGS [LIMIT [offset,] row_count]
SHOW COUNT(*) WARNINGS
SHOW WARNINGS是一个诊断语句,显示有关在当前会话中执行语句所产生的条件(错误,警告和注释)的信息。 为DML语句(如INSERT,UPDATE和LOAD DATA INFILE)以及DDL语句(如CREATE TABLE和ALTER TABLE)生成警告。
LIMIT子句与SELECT语句的语法相同。
SHOW WARNINGS也在EXPLAIN之后使用,以显示EXPLAIN生成的扩展信息。
SHOW WARNINGS(显示警告)显示有关在当前会话中执行最新的非诊断语句所产生的条件的信息。 如果最近的语句在解析过程中导致错误,则SHOW WARNINGS会显示结果条件,而不管语句类型(诊断或不可诊断)。
SHOW COUNT(*)WARNINGS诊断语句显示错误,警告和注释的总数。 您也可以从warning_count系统变量中检索这个数字:
SHOW COUNT(*) WARNINGS;
SELECT @@warning_count;
这些语句的不同之处在于,第一个是没有清除消息列表的诊断语句。 第二,因为它是一个SELECT语句被认为是不可诊断的并且清除消息列表。
相关的诊断语句SHOW ERRORS仅显示错误条件(不包括警告和注释),SHOW COUNT(*)ERRORS语句显示错误总数。
max_error_count系统变量控制服务器存储信息的错误,警告和注释消息的最大数量,从而控制SHOW WARNINGS显示的消息数量。 要更改服务器可以存储的消息数量,请更改max_error_count的值。 默认值是64。
max_error_count只控制存储多少条消息,而不是统计多少条消息。 即使生成的消息数量超过max_error_count,warning_count的值也不受max_error_count的限制。
要禁用消息存储,请将max_error_count设置为0.在此情况下,warning_count仍指示发生了多少个警告,但消息未存储并且无法显示。
sql_notes系统变量控制注释消息是否增加warning_count以及服务器是否存储它们。 默认情况下,sql_notes为1,但如果设置为0,则notes不会增加warning_count,并且服务器不会存储它们。
MySQL服务器向每个客户端发送一个计数,指示由该客户端执行的最新语句产生的错误,警告和注释的总数。 从C API中,可以通过调用mysql_warning_count()来获取该值。
在mysql客户端中,可以分别使用 warnings 和nowarning命令或其快捷键\ W和\w来启用和禁用自动警告显示(请参见第4.5.1.2节“mysql命令”)。 例如:
mysql> \W
Show warnings enabled.
mysql> SELECT 1/0;
+------+
| 1/0 |
+------+
| NULL |
+------+ 1 row in set, 1 warning (0.03 sec)
Warning (Code 1365): Division by 0
mysql> \w Show warnings disabled.
13.7.6 其他的管理语句
13.7.6.1 BINLOG 语法
BINLOG 'str'
BINLOG是一个内部使用语句。 它由mysqlbinlog程序生成,作为二进制日志文件中某些事件的可打印表示。 (请参见第4.6.7节“mysqlbinlog - 处理二进制日志文件的实用程序”。)'str'值是一个基本的64编码字符串,该服务器解码以确定相应事件指示的数据更改。 该声明需要SUPER特权。
该语句只能执行格式描述事件和行事件。
13.7.6.2 CACHE INDEX 语法
CACHE INDEX tbl_index_list [, tbl_index_list] ...
[PARTITION (partition_list | ALL)]
IN key_cache_name tbl_index_list:
tbl_name [[INDEX|KEY] (index_name[, index_name] ...)]
partition_list:
partition_name[, partition_name][, ...]
CACHE INDEX语句将表索引分配给特定的键缓存。 它仅用于MyISAM表。 在索引分配后,如果需要,可以使用LOAD INDEX INTO CACHE将它们预加载到高速缓存中。
以下语句将表t1,t2和t3中的索引分配给名为hot_cache的键缓存:
mysql> CACHE INDEX t1, t2, t3 IN hot_cache;
+---------+--------------------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+---------+--------------------+----------+----------+
| test.t1 | assign_to_keycache | status | OK |
| test.t2 | assign_to_keycache | status | OK |
| test.t3 | assign_to_keycache | status | OK |
+---------+--------------------+----------+----------+
CACHE INDEX的语法使您可以指定只有来自表的特定索引应分配给缓存。 当前实现将所有表的索引分配给缓存,因此没有理由指定除表名之外的任何其他内容。
在CACHE INDEX语句中引用的键缓存可以通过使用参数设置语句或在服务器参数设置中设置其大小来创建。 例如:
mysql> SET GLOBAL keycache1.key_buffer_size=128*1024;
key 缓存参数可以作为结构化系统变量的成员进行访问。
在为其分配索引之前,key缓存必须存在:
mysql> CACHE INDEX t1 IN non_existent_cache; ERROR 1284 (HY000): Unknown key cache 'non_existent_cache'
默认情况下,表索引分配给在服务器启动时创建的主(默认)键缓存。 当key缓存被破坏时,分配给它的所有索引将再次分配给默认键缓存。
索引分配会全局影响服务器:如果一个客户端将索引分配给给定缓存,则无论哪个客户端发出查询,该缓存都将用于涉及索引的所有查询。
在MySQL 5.7中,分区MyISAM表也支持该语句。 您可以将一个,多个或所有分区的一个或多个索引分配给给定的键缓存。 例如,您可以执行以下操作:
CREATE TABLE pt (c1 INT, c2 VARCHAR(50), INDEX i(c1)) ENGINE=MyISAM PARTITION BY HASH(c1) PARTITIONS 4;
SET GLOBAL kc_fast.key_buffer_size = 128 * 1024;
SET GLOBAL kc_slow.key_buffer_size = 128 * 1024;
CACHE INDEX pt PARTITION (p0) IN kc_fast;
CACHE INDEX pt PARTITION (p1, p3) IN kc_slow;
前一组语句执行以下操作:
如果您希望将表pt中的所有分区的索引分配给名为kc_all的单个键缓存,则可以使用以下两种语句之一:
CACHE INDEX pt PARTITION (ALL) IN kc_all;
CACHE INDEX pt IN kc_all;
刚才显示的两个语句是等同的,发布其中一个具有完全相同的效果。 换句话说,如果您希望将分区表的所有分区的索引分配给相同的键缓存,则PARTITION(ALL)子句是可选的。
将多个分区的索引分配给key缓存时,分区不必是连续的,并且不需要按任何特定顺序列出其名称。 未明确分配给key缓存的任何分区的索引自动使用服务器的默认key缓存。
在MySQL 5.7中,分区MyISAM表也支持索引预加载。
13.7.6.3 FLUSH 语法
FLUSH [NO_WRITE_TO_BINLOG | LOCAL] {
flush_option [, flush_option] ...
| tables_option
}
flush_option: {
BINARY LOGS
| DES_KEY_FILE
| ENGINE LOGS
| ERROR LOGS
| GENERAL LOGS
| HOSTS
| LOGS
| PRIVILEGES
| OPTIMIZER_COSTS
| QUERY CACHE
| RELAY LOGS [FOR CHANNEL channel]
| SLOW LOGS
| STATUS
| USER_RESOURCES
}
tables_option: {
TABLES
| TABLES tbl_name [, tbl_name] ...
| TABLES WITH READ LOCK
| TABLES tbl_name [, tbl_name] ... WITH READ LOCK
| TABLES tbl_name [, tbl_name] ... FOR EXPORT
}
FLUSH语句有几种变体形式,用于清除或重新加载各种内部缓存,刷新表或获取锁。 要执行FLUSH,您必须具有RELOAD权限。 如后面所述,特定的刷新选项可能需要额外的权限。
注意:
在存储的函数或触发器中不可能发出FLUSH语句。 但是,您可以在存储过程中使用FLUSH,只要这些不从存储函数或触发器中调用。
默认情况下,服务器将FLUSH语句写入二进制日志,以便它们复制到复制从服务器。 要禁止日志记录,请指定可选的NO_WRITE_TO_BINLOG关键字或其别名LOCAL。
注意:
FLUSH LOGS,FLUSH TABLES WITH READ LOCK(带或不带表 list)和FLUSH TABLES tbl_name ... FOR EXPORT在任何情况下都不会写入二进制日志,因为如果复制到从属服务器会导致问题。
flush 语句会导致一个隐式的提交。
mysqladmin实用程序使用诸如flush-hosts,flush-logs,flush-privileges,flush-status和flush-tables等命令为某些刷新操作提供命令行界面。
向服务器发送SIGHUP信号会导致发生几次类似于各种形式的FLUSH语句的刷新操作。
以下列表描述了允许的FLUSH语句flush_option值。
关闭并重新打开服务器正在写入的任何二进制日志文件。 如果启用二进制日志记录,则二进制日志文件的序列号会相对于前一个文件增加1。
在服务器启动时,使用--des-key-file选项指定的文件重新加载DES密钥。
注意:
DES_ENCRYPT()和DES_DECRYPT()函数从MySQL 5.7.6开始不推荐使用,将在未来的MySQL版本中删除,不应再使用。 因此,--des-key-file和DES_KEY_FILE也被弃用,并将被删除。
关闭并重新打开安装的存储引擎的任何可刷新的日志。 这导致InnoDB将其日志刷新到磁盘。
关闭并重新打开服务器正在写入的任何错误日志文件。
关闭并重新打开服务器正在写入的任何常规查询日志文件。
清空主机缓存。 如果某些主机更改了IP地址,或者主机'host_name'被阻止,则会发生来自合法主机的连接,请刷新主机缓存。当连接到MySQL服务器时给定主机连续发生超过max_connect_errors错误时,MySQL会认为出现问题并阻止主机进一步连接 要求。 刷新主机缓存可启用主机的更多连接尝试。 max_connect_errors的默认值为100.要避免此错误消息,请将max_connect_errors设置为较大值的服务器启动。
关闭并重新打开服务器正在写入的任何日志文件。 如果启用二进制日志记录,则二进制日志文件的序列号会相对于前一个文件增加1。 如果启用中继日志记录,则中继日志文件的序列号会相对于前一个文件增加1。
FLUSH LOGS对用于常规查询日志或慢查询日志的表没有影响
重新读取成本模型表,以便优化器开始使用存储在其中的当前成本估算值。 服务器向错误日志中写入任何无法识别的条目的警告。 此操作仅影响在刷新后开始的会话。 现有会话继续使用开始时的当前成本估算。
重新加载mysql系统数据库中授予表的权限。
由于GRANT,CREATE USER,CREATE SERVER和INSTALL PLUGIN语句,服务器缓存内存中的信息。 此内存不会由相应的REVOKE,DROP USER,DROP SERVER和UNINSTALL PLUGIN语句释放,因此对于执行导致高速缓存的多个语句实例的服务器,内存使用量会增加。 这个缓存的内存可以通过FLUSH PRIVILEGES来释放。
对查询缓存进行碎片整理以更好地利用其内存。 与FLUSH TABLES或RESET QUERY CACHE不同,FLUSH QUERY CACHE不会从缓存中删除任何查询。
注意:
查询缓存从MySQL 5.7.20开始已弃用,并在MySQL 8.0中删除。 弃用包括FLUSH QUERY CACHE。
关闭并重新打开服务器正在写入的任何中继日志文件。 如果启用中继日志记录,则中继日志文件的序列号会相对于前一个文件增加1。
FOR CHANNEL通道子句使您能够命名该语句应用于哪个复制通道。 执行FLUSH RELAY LOGS FOR CHANNEL通道刷新特定复制通道的中继日志。 如果没有通道被命名并且不存在额外的复制通道,则该语句适用于默认通道。 如果没有通道被命名并且存在多个复制通道,则该语句适用于所有复制通道。
关闭并重新打开服务器正在写入的任何慢速查询日志文件。
注意:
show_compatibility_56系统变量的值影响此选项的操作。
该选项将当前线程的会话状态变量值添加到全局值,并将会话值重置为零。 一些全局变量也可以重置为零。 它还会将密钥缓存的计数器(默认和已命名)重置为零,并将Max_used_connections设置为当前打开的连接数。 调试查询时可能会使用此信息。
将所有每小时用户资源重置为零。 这使已达到每小时连接,查询或更新限制的客户端立即恢复活动。 FLUSH USER_RESOURCES不适用于由max_user_connections系统变量控制的最大同时连接限制。
FLUSH TABLES 语法
FLUSH TABLES刷新表,并根据所使用的变体获取锁定。 在FLUSH语句中使用的任何TABLES变体必须是唯一使用的选项。 FLUSH TABLE是FLUSH TABLES的同义词。
注意:
这里的描述表明,通过关闭它们来刷新表会对InnoDB产生不同的影响,InnoDB会将表格内容刷新到磁盘上,但会将其打开。 这仍然允许表文件在表格打开时被复制,只要其他活动不修改它们即可。
关闭所有打开的表,强制所有正在使用的表被关闭,并刷新查询缓存和准备语句缓存。 FLUSH TABLES还会从查询缓存中删除所有查询结果,如RESET QUERY CACHE语句。
当存在活动的LOCK TABLES ... READ时,不能使用FLUSH TABLES。 要刷新和锁定表,请改用FLUSH TABLES tbl_name ... WITH READ LOCK。
关闭所有打开的表并锁定全局读取锁定的所有数据库的所有表。 如果您拥有可以及时拍摄快照的文件系统(如Veritas或ZFS),则这是一种非常方便的备份方式。 使用UNLOCK TABLES释放锁。
FLUSH TABLES WITH READ LOCK获取全局读取锁而不是表锁,因此它与表锁和隐式提交相关的行为与LOCK TABLES和UNLOCK TABLES不同:
FLUSH TABLES WITH READ LOCK 与XA事务不兼容。
FLUSH TABLES WITH READ LOCK 不会阻止服务器将行插入日志表中
此语句刷新并获取指定表的读锁。 该语句首先获取这些表的独占元数据锁,因此它会等待这些表打开的事务完成。 然后,语句清除表缓存中的表,重新打开表,获取表锁(如LOCK TABLES ... READ),并将元数据锁从独占式降级到共享式。 在语句获取锁并降级元数据锁之后,其他会话可以读取但不能修改表。
由于此语句获取表锁,因此除了使用任何FLUSH语句所需的RELOAD权限之外,还必须为每个表拥有LOCK TABLES权限。
该语句仅适用于现有的基础(非临时)表。如果名称引用基表,则使用该表。如果它引用了TEMPORARY表,它将被忽略。如果名称适用于视图,则会发生ER_WRONG_OBJECT错误。否则,会发生ER_NO_SUCH_TABLE错误。
使用UNLOCK TABLES释放锁,LOCK TABLES释放锁并获取其他锁,或使用START TRANSACTION释放锁并开始新事务。
这种FLUSH TABLES变体可以使表在一次操作中被刷新并锁定。它提供了一个解决方法,以便在存在活动的LOCK TABLES ... READ时不允许FLUSH TABLES。
该语句不执行隐式UNLOCK TABLES,因此如果在有任何活动的LOCK TABLES时使用该语句,或者在没有首先释放所获取的锁的情况下再次使用它,则会导致错误。
如果用HANDLER打开被刷新的表,处理程序将被隐式刷新并丢失其位置。
这个FLUSH TABLES变体适用于InnoDB表。 它确保对指定表的更改已刷新到磁盘,以便在服务器运行时可以创建二进制表副本。
FLUSH TABLES ... FOR EXPORT语句要求您具有每个表的SELECT权限。由于此语句获取表锁,除了使用任何FLUSH语句所需的RELOAD权限外,还必须为每个表拥有LOCK TABLES权限。
13.7.6.4 kill 语法
KILL [CONNECTION | QUERY] processlist_id
与mysql的每个连接都在一个单独的线程中运行。 您可以使用KILL processlist id语句杀死一个线程。
线程进程列表标识符可以从INFORMATION_SCHEMA.PROCESSLIST表的ID列,SHOW PROCESSLIST输出的Id列和Performance Schema线程表的PROCESSLIST_ID列确定。 当前线程的值由CONNECTION_ID()函数返回。
KILL允许使用可选的CONNECTION或QUERY修饰符:
如果你有PROCESS权限,你可以看到所有的线程。 如果您拥有SUPER权限,则可以终止所有线程和语句。 否则,你只能看到并杀死你自己的线程和语句。
您也可以使用mysqladmin processlist和mysqladmin kill命令来检查和终止线程。
注意:
由于嵌入式服务器仅在主机应用程序的线程内运行,因此不能将KILL与嵌入式MySQL服务器库结合使用。 它不创建任何自己的连接线程。
当你使用KILL时,为线程设置一个线程特定的kill标志。 在大多数情况下,线程可能需要一些时间才能死掉,因为kill标志只在特定的时间间隔被检查:
KILL语句无需等待确认即可返回,但kill标志检查会在相当短的时间内中止操作。 中止操作以执行任何必要的清理也需要一些时间。
警告:
在MyISAM表中杀死REPAIR TABLE或OPTIMIZE TABLE操作会导致表损坏且无法使用。 对这样的表进行任何读取或写入操作都会失败,直到您再次优化或修复(无中断)为止。
13.7.6.6 RESET 语法
RESET reset_option [, reset_option] ...
reset_option: { MASTER | QUERY CACHE | SLAVE }
RESET语句用于清除各种服务器操作的状态。 您必须拥有RELOAD权限才能执行RESET。
RESET充当FLUSH语句的更强版本
RESET语句会导致隐式提交。
在MySQL 5.7.1中,在发布此语句之前,必须将gtid_next设置为AUTOMATIC。 这个限制不适用于MySQL 5.7.2或更高版本。 (bug#16062608,bug#16715809,bug#69045)
以下列表描述了允许的RESET语句reset_option值:
删除索引文件中列出的所有二进制日志,将二进制日志索引文件重置为空,并创建一个新的二进制日志文件。
从查询缓存中删除所有查询结果。
注意:
查询缓存从MySQL 5.7.20开始已弃用,并在MySQL 8.0中删除。 弃用包括RESET QUERY CACHE。
使slave忘记其在主二进制日志中的复制位置。 还通过删除任何现有的中继日志文件并重新开始新的中继日志来重置中继日志。
13.7.6.7 shutdown 语法
shutdown
这个语句停止MySQL服务器。 它需要SHUTDOWN特权。
SHUTDOWN在MySQL 5.7.9中添加。 它使用mysqladmin shutdown命令或mysql_shutdown()C API函数为可用的相同功能提供SQL级别的接口。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946831/viewspace-3160355/ ,如需转载,请注明出处,否则将追究法律责任。