龙空技术网

MySQL自带宝藏库

质量技术知识 116

前言:

而今兄弟们对“mysql内置方法”大约比较看重,兄弟们都想要分析一些“mysql内置方法”的相关资讯。那么小编在网络上搜集了一些对于“mysql内置方法””的相关资讯,希望同学们能喜欢,小伙伴们一起来学习一下吧!

使用mysql,你是不是曾经有过想知道所有表信息,表结构,是否有死锁,是否有慢查询等等呢?这些使用mysql自带的宝藏库就能帮你妥妥解决。

MySQL自带库mysql数据库information_schema数据库performance_schema数据库sys数据库mysql数据库:

mysql数据库是MySQL中最重要的一个数据库,它存储了MySQL用户和管理员的信息,以及数据库的核心配置信息。这个数据库包含了以下几个表:

1.users表:存储MySQL用户账号的信息,包括用户名、密码、用户权限等。

1.1表结构:

Host: 存储允许连接的主机名或IP地址。可以使用通配符 '%' 表示所有主机。

User: 存储用户的名称。每个用户在特定主机上必须具有唯一的用户名。

Password: 存储用户的密码。密码以加密形式存储,使用MySQL的加密函数进行处理。

Select_priv: 指示用户是否具有SELECT权限。

Insert_priv: 指示用户是否具有INSERT权限。

Update_priv: 指示用户是否具有UPDATE权限。

Delete_priv: 指示用户是否具有DELETE权限。

Create_priv: 指示用户是否具有CREATE权限。

Drop_priv: 指示用户是否具有DROP权限。

Grant_priv: 指示用户是否具有GRANT权限。

References_priv: 指示用户是否具有REFERENCES权限。

Index_priv: 指示用户是否具有INDEX权限。

Alter_priv: 指示用户是否具有ALTER权限。

Create_tmp_table_priv: 指示用户是否具有CREATE TEMPORARY TABLES权限。

Lock_tables_priv: 指示用户是否具有LOCK TABLES权限。

Create_view_priv: 指示用户是否具有CREATE VIEW权限。

Show_view_priv: 指示用户是否具有SHOW VIEW权限。

Create_routine_priv: 指示用户是否具有CREATE ROUTINE权限。

Alter_routine_priv: 指示用户是否具有ALTER ROUTINE权限。

Execute_priv: 指示用户是否具有EXECUTE权限。

Event_priv: 指示用户是否具有EVENT权限。

Trigger_priv: 指示用户是否具有TRIGGER权限。

Create_user_priv: 指示用户是否具有CREATE USER权限。

1.2权限控制:通过在"users"表中插入新的行,可以创建新用户并为其分配相应的权限。每个用户可以在特定主机上具有不同的权限。权限以二进制形式存储在各个权限列中,为1表示具有相应的权限,为0表示没有。

1.3修改用户和权限:可以使用INSERT、UPDATE和DELETE语句来插入、更新和删除"users"表中的行,从而管理用户和权限。可以使用GRANT和REVOKE语句来授予和撤销用户的特定权限。

1.4示例:向"users"表插入一条数据,创建一个本地访问的用户并赋予数据库新建和表新建权限

INSERT INTO mysql.user (Host, User, Password, Create_priv, CreateTable_priv)VALUES ('localhost', 'admin1', PASSWORD('password'), 'Y', 'Y');FLUSH PRIVILEGES;

2.db表:存储数据库的信息,包括数据库名、数据库权限等。

2.1表结构:

Host: 存储允许连接的主机名或IP地址。可以使用通配符 '%' 表示所有主机。

Db: 存储数据库名称。每个数据库在特定主机上必须具有唯一的名称。

User: 存储用户的名称。该列指定了具有特定权限的用户。

Select_priv: 指示用户是否具有SELECT权限。

Insert_priv: 指示用户是否具有INSERT权限。

Update_priv: 指示用户是否具有UPDATE权限。

Delete_priv: 指示用户是否具有DELETE权限。

Create_priv: 指示用户是否具有CREATE权限。

Drop_priv: 指示用户是否具有DROP权限。

Grant_priv: 指示用户是否具有GRANT权限。

References_priv: 指示用户是否具有REFERENCES权限。

Index_priv: 指示用户是否具有INDEX权限。

Alter_priv: 指示用户是否具有ALTER权限。

Create_tmp_table_priv: 指示用户是否具有CREATE TEMPORARY TABLES权限。

Lock_tables_priv: 指示用户是否具有LOCK TABLES权限。

Create_view_priv: 指示用户是否具有CREATE VIEW权限。

Show_view_priv: 指示用户是否具有SHOW VIEW权限。

Create_routine_priv: 指示用户是否具有CREATE ROUTINE权限。

Alter_routine_priv: 指示用户是否具有ALTER ROUTINE权限。

Execute_priv: 指示用户是否具有EXECUTE权限。

Event_priv: 指示用户是否具有EVENT权限。

Trigger_priv: 指示用户是否具有TRIGGER权限。

2.2示例:为特定用户admin1授予mysqlTestDB数据库的管理员权限

INSERT INTO mysql.db (Host, Db, User, Select_priv, Insert_priv)VALUES ('localhost', 'mysqlTestDB', 'admin1', 'Y', 'Y');

2.3示例:更新用户admin1在数据库mysqlTestDB的权限,将DELETE权限取消

UPDATE mysql.dbSET Delete_priv = 'N'WHERE Host = 'localhost' AND Db = 'mysqlTestDB' AND User = 'admin1';

3.host表:存储MySQL远程访问的信息,包括主机名、访问权限等。

3.1表结构:

Host: 存储MySQL服务器的主机名或IP地址。可以使用通配符 '%' 表示所有主机。

Db: 存储数据库名称。每个数据库在特定主机上必须具有唯一的名称。

Select_priv: 指示主机是否具有SELECT权限。

Insert_priv: 指示主机是否具有INSERT权限。

Update_priv: 指示主机是否具有UPDATE权限。

Delete_priv: 指示主机是否具有DELETE权限。

Create_priv: 指示主机是否具有CREATE权限。

Drop_priv: 指示主机是否具有DROP权限。

Grant_priv: 指示主机是否具有GRANT权限。

References_priv: 指示主机是否具有REFERENCES权限。

Index_priv: 指示主机是否具有INDEX权限。

Alter_priv: 指示主机是否具有ALTER权限。

Create_tmp_table_priv: 指示主机是否具有CREATE TEMPORARY TABLES权限。

Lock_tables_priv: 指示主机是否具有LOCK TABLES权限。

Create_view_priv: 指示主机是否具有CREATE VIEW权限。

Show_view_priv: 指示主机是否具有SHOW VIEW权限。

Create_routine_priv: 指示主机是否具有CREATE ROUTINE权限。

Alter_routine_priv: 指示主机是否具有ALTER ROUTINE权限。

Execute_priv: 指示主机是否具有EXECUTE权限。

Event_priv: 指示主机是否具有EVENT权限。

Trigger_priv: 指示主机是否具有TRIGGER权限。

3.2常见功能:

授予主机权限:使用"host"表可以为特定主机或主机组授予数据库的权限。通过插入新的行或更新现有行,可以分配不同级别的权限,如SELECT、INSERT、UPDATE、DELETE、CREATE、DROP等。可以根据需要定制主机的数据库权限。撤销主机权限:如果需要撤销特定主机对数据库的访问权限,可以使用DELETE语句从"host"表中删除相应的行。这样可以限制特定主机的访问和操作范围。查询主机权限:通过查询"host"表,可以查看特定主机或主机组在数据库级别的权限。可以使用SELECT语句根据主机的条件获取主机在数据库中所具备的权限信息。这对于了解主机的权限以及进行权限审计和安全性检查非常有用。管理多个主机权限:"host"表适用于管理多个主机的权限。通过添加不同的行和设置不同的权限,可以为每个主机指定不同的数据库权限。这样可以灵活地控制不同主机对数据库的权限。更新主机权限:如果需要更改特定主机在数据库级别的权限,可以使用UPDATE语句来更新"host"表中的相应行。这样可以根据需求随时调整主机的访问和操作权限。information_schema数据库:

information_schema数据库包含了存储MySQL服务器运行时所需信息的表,这些表主要用来描述数据库中的对象和数据结构。以下是其中的一些主要表:

SCHEMAS:存储数据库的信息,包括数据库名、数据库描述等。TABLES:存储表的信息,包括表名、表类型、表的列数、索引数等。COLUMNS:存储表中的列信息,包括列名、列类型、列长度等。KEY_COLUMN_USAGE:存储表中的键信息,包括主键、外键等。ROUTINES:存储存储过程和函数的信息,包括过程名、函数名、参数等。EVENTS:存储MySQL事件的信息,包括事件名、事件类型等。performance_schema数据库:

performance_schema数据库是为了提高MySQL的性能而设计的,它包含了一系列仪表和统计信息,可以帮助管理员更好地了解和优化MySQL的性能状况。以下是其中的一些主要表:

1.TABLE_IO_WAITS表:存储表的I/O等待信息,包括I/O等待类型、等待时间等。

TABLE_IO_WAITS 是 performance_schema 中一个的表,用于收集关于表 I/O 等待的信息。

在 MySQL 中,I/O 等待是指数据库服务器等待对表的 I/O 操作完成的时间。这可能包括读取或写入数据文件、索引文件或其他相关文件。当数据库服务器需要访问某个表时,它需要等待 I/O 操作完成才能继续执行查询或其他操作。

TABLE_IO_WAITS 表包含以下列:

OBJECT_NAME:表名。

OBJECT_TYPE:表类型,可以是 TABLE、INDEX 或 SEQUENCE。

COUNT:等待次数,即对表执行 I/O 操作的次数。

SUM_TIMER_WAIT:等待总时间,即对表执行 I/O 操作所花费的总时间。

MAX_TIMER_WAIT:最长等待时间,即对表执行最长 I/O 等待时间。

CURRENT_TL:当前事务的等待时间。

AVERAGE_TIMER_WAIT:平均等待时间,即等待总时间除以等待次数。

通过查询 TABLE_IO_WAITS 表,你可以了解数据库服务器对各个表的 I/O 等待情况。你可以根据这些信息来识别性能瓶颈,找出哪些表的 I/O 操作时间较长,从而采取相应的优化措施,如优化表结构、增加索引、调整存储引擎参数等,以提高数据库的性能和响应速度。

1.1 查询 TABLE_IO_WAITS 表,了解表的 I/O 等待情况:

SELECT OBJECT_NAME, OBJECT_TYPE, COUNT, SUM_TIMER_WAIT, MAX_TIMER_WAIT, CURRENT_TL, AVERAGE_TIMER_WAIT  FROM performance_schema.TABLE_IO_WAITS;
根据查询结果识别哪些表的 I/O 等待时间较长。

2.TABLE_LOCK_WAITS表:存储表的锁等待信息,包括锁等待类型、等待时间等。

TABLE_LOCK_WAITS 是 performance_schema 中一个表,用于收集关于表锁等待的信息。

在 MySQL 中,锁是用于保护数据库数据一致性和避免并发问题的一种机制。当多个事务需要访问同一个表或数据时,MySQL 会为每个事务分配一个锁来确保数据的一致性。然而,当多个事务同时请求同一个表的锁时,就可能会发生锁等待的情况。

TABLE_LOCK_WAITS 表包含以下列:

OBJECT_NAME:表名。

OBJECT_TYPE:表类型,可以是 TABLE、INDEX 或 SEQUENCE。

COUNT:等待次数,即对表执行锁等待操作的次数。

SUM_TIMER_WAIT:等待总时间,即对表执行锁等待操作所花费的总时间。

MAX_TIMER_WAIT:最长等待时间,即对表执行最长锁等待时间。

CURRENT_TL:当前事务的等待时间。

AVERAGE_TIMER_WAIT:平均等待时间,即等待总时间除以等待次数。

通过查询 TABLE_LOCK_WAITS 表,你可以了解数据库服务器对各个表的锁等待情况。你可以根据这些信息来识别性能瓶颈,找出哪些表的锁等待时间较长,从而采取相应的优化措施,如优化事务处理逻辑、调整锁机制参数等,以提高数据库的性能和响应速度。

2.1TABLE_LOCK_WAITS 表的示例:

通过该表识别表的锁等待情况,并采取相应的优化措施:

查询 TABLE_LOCK_WAITS 表,了解表的锁等待情况:

SELECT OBJECT_NAME, OBJECT_TYPE, COUNT, SUM_TIMER_WAIT, MAX_TIMER_WAIT, CURRENT_TL, AVERAGE_TIMER_WAIT  FROM performance_schema.TABLE_LOCK_WAITS;
根据查询结果识别哪些表的锁等待时间较长。假设通过查询发现某个表(如 mydatabase.mytable)的锁等待时间较长。

标签: #mysql内置方法 #mysql内置函数 #mysql自带库 #mysql显示库