之路教程 https://onitr oad .com

高级安装

在某些情况下,可能需要自定义安装,例如,如果我们使用 RDS 并且无法使用 root@localhost 作为定义者安装 sys 架构。
在这种情况下,我们需要使用 sys 架构源中包含的 generate_sql_file.sh 脚本。
该脚本支持以下参数:

  • -v :此参数是必需的,用于指定要为其创建安装文件的 MySQL 版本。指定不带点和补丁版本号的 MySQL 版本,例如 MySQL 5.6 为 56,MySQL 5.7 为 57.
  • -b :默认情况下,只要过程可能生成二进制日志事件(例如,如果使用临时表),sys 模式就会关闭二进制日志记录。 -b 选项将删除它。如果我们在没有 SUPER 权限的 MySQL 实例上安装 sys 架构,这主要有用,例如对于 RDS。/li>
  • -m :创建与 mysql_install_db 或者 mysqld --bootstrap 兼容的安装文件。
  • -u :更改定义器;例如,这对 RDS 很有用。

例如,考虑是否要使用 myadmin@localhost 作为定义器为 MySQL 5.7 创建安装文件:

shell$ ./generate_sql_file.sh -v 57 -u myadmin@localhost
    Wrote file: /mysql/source/mysql-sys/sys_1.5.0_57_inline.sql
Object Definer: myadmin@localhost
   sql_log_bin: enabled

安装 Sys Schema:MySQL 5.7.6 及更早版本和 MySQL 5.6

如果要在 MySQL 5.7.7 之前的版本中使用 sys 架构,则需要自己下载并安装 sys 架构。
步骤是:

  • 从 MySQL github 存储库下载 sys 架构。无论我们选择哪个分支,安装都是相同的。要考虑的主要分支是:
  • master : 最新的稳定版本
  • 开发:包括所有最新的添加和更改
  • 解压下载的文件
    1. 中创建的目录将包含每个支持的 MySQL 版本的安装文件,名称反映版本。例如 sys_56.sql 是 MySQL 5.6 的安装文件,sys_57.sql 是 MySQL 5.7 的安装文件。要完成安装:
  • 转到包含安装文件的目录(即,将该目录设为 shell 或者提示中的当前目录)。
  • 启动 mysql 命令行客户端。
  • 将此文件的内容导入 MySQL,例如:
mysql> SOURCE sys_57.sql
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
...

或者结合步骤 2. 和 3. 如:

shell$ mysql < sys_57.sql

以上创建了以 root@localhost 作为定义者的所有视图和存储程序。
有关如何使用自定义定义器安装 sys 架构的详细信息,请参阅下面的高级安装。

MySQL Workbench

MySQL Workbench 6.1 及更高版本支持基于 sys 架构中的视图生成性能报告。
作为此支持的一部分,我们还可以使用 MySQL Workbench 安装 MySQL Workbench 附带的 sys 架构版本。
要安装 sys 架构,请参阅 MySQL Workbench 参考手册。

使用 MySQL Workbench 安装 sys 架构的一个缺点是,我们将获得与我们使用的 MySQL Workbench 版本一起提供的版本。
如果我们需要特定版本(例如最新版本)的 sys 架构,我们必须手动安装它。

Sys Schema 和 mysqldump/mysqlpump

如果我们从 MySQL 5.7.8 或者更高版本使用 mysqldump 或者 mysqlpump,默认情况下会跳过 sys 架构。
如果要包含 sys 架构,可以明确指定它,例如备份 sys 和 world 数据库:

shell$ mysqldump --routines --triggers --databases sys world > backup.sql
如何安装和配置 MySQL sys schema

介绍

MySQL sys schema 是视图、存储过程和存储函数的集合,可帮助 MySQL 数据库管理员深入了解 MySQL 正在做什么并帮助使用 Performance Schema。
然而,虽然 sys 架构主要使用性能架构,但它也包括来自信息架构的信息。

可用的视图和存储的程序取决于安装的 sys 架构的版本。
要获取完整的对象列表,请使用以下查询:

(
SELECT TABLE_NAME, TABLE_TYPE
  FROM information_schema.TABLES
 WHERE TABLE_SCHEMA = 'sys'
) UNION (
SELECT ROUTINE_NAME, ROUTINE_TYPE
  FROM information_schema.ROUTINES
 WHERE ROUTINE_SCHEMA = 'sys'
);

sys 架构支持 MySQL 5.6 及更高版本。

视图的命名约定

如果查看 sys 架构中包含的视图列表,我们会发现有两组视图:一组以 x$ 为前缀,另一组没有。
当同一个视图有一个普通版本和一个 x$ 版本时,普通版本的输出会被格式化,而 x$ 版本不会。
例如:

mysql> SELECT TABLE_NAME FROM information_schema.VIEWS WHERE TABLE_SCHEMA = 'sys' AND TABLE_NAME LIKE '%processlist';
+---------------+
| TABLE_NAME    |
+---------------+
| processlist   |
| x$processlist |
+---------------+
2 rows in set (0.00 sec)

这里的两个视图是:

  • processlist 视图包含格式化的输出,例如语句使用 sys.format_statement() 进行格式化,而 Performance Schema 延迟使用 sys.format_time() 进行缩放。
  • x$processlist 视图包含未格式化的输出。例如,如果我们想对输出进行后期处理,例如更改排序或者使用我们自己的格式化功能,这将非常有用。

安装

要验证是否安装了 sys 架构:

mysql> SELECT IF(EXISTS(SELECT 1 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'sys' AND TABLE_NAME = 'version' AND COLUMN_NAME = 'sys_version'), 'YES', 'NO') AS SysSchemaInstalled;
+--------------------+
| SysSchemaInstalled |
+--------------------+
| YES                |
+--------------------+
1 row in set (0.00 sec)

要验证安装的 sys 架构的版本:

mysql> SELECT sys_version FROM sys.version;
+-------------+
| sys_version |
+-------------+
| 1.5.1       |
+-------------+
1 row in set (0.00 sec)

安装系统架构:MySQL 5.7.7 及更高版本

MySQL 5.7.7 及更高版本在初始化 MySQL 或者升级时默认安装了 sys 架构。
如果不想安装 sys 模式,mysql_upgrade 和 mysql_install_db 支持 -skip-sys-schema 选项。

在 MySQL 5.7.6 及更高版本中初始化新 MySQL 安装的推荐方法是使用 mysqld -initialize。
但是,这不支持跳过 sys 架构安装。
从 MySQL 5.7.9 开始,当使用 mysqld -initialize 创建 sys 架构时,将在安装过程中创建 mysql.sys@localhost 用户。
这是一个系统用户,用作 sys 架构中对象的定义者。

配置

sys 模式配置是通过 sys_config 表和用户变量完成的。
sys_config 表用作配置选项的默认值的来源:

mysql> SELECT * FROM sys.sys_config;
+--------------------------------------+-------+---------------------+--------+
| variable                             | value | set_time            | set_by |
+--------------------------------------+-------+---------------------+--------+
| diagnostics.allow_i_s_tables         | OFF   | 2017-08-07 16:08:38 | NULL   |
| diagnostics.include_raw              | OFF   | 2017-08-07 16:08:38 | NULL   |
| ps_thread_trx_info.max_length        | 65535 | 2017-08-07 16:08:38 | NULL   |
| statement_performance_analyzer.limit | 100   | 2017-08-07 16:08:38 | NULL   |
| statement_performance_analyzer.view  | NULL  | 2017-08-07 16:08:38 | NULL   |
| statement_truncate_len               | 64    | 2017-08-07 16:08:38 | NULL   |
+--------------------------------------+-------+---------------------+--------+
6 rows in set (0.00 sec)

对于作为 sys 架构初始安装的一部分设置的值,set_by 的值为 NULL(但是,请参阅错误 26629164),否则触发器会将值设置为插入或者更新行的用户。
set_time 在插入和更新时均默认为当前时间。
例如:

mysql> UPDATE sys.sys_config SET value = 128 WHERE variable = 'statement_truncate_len';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> SELECT * FROM sys.sys_config WHERE variable = 'statement_truncate_len';
+------------------------+-------+---------------------+------------------+
| variable               | value | set_time            | set_by           |
+------------------------+-------+---------------------+------------------+
| statement_truncate_len | 128   | 2017-08-15 13:32:33 | root@localhost   |
+------------------------+-------+---------------------+------------------+
1 row in set (0.00 sec)

如果要为配置选项使用与 sys_config 中指定的值不同的值,但又不想更改默认使用的值,则可以设置相应的用户变量。
约定是用户变量的名称是来自 sys_config 以@sys. 为前缀的变量名称。
要改回使用默认值,请将用户变量设置为 NULL。
例如,将 statement_truncate_len 设置为 26 以便下次使用 sys.format_statement() 然后改回使用来自 sys_config 的值:

mysql> SET @sys.statement_truncate_len = 26;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT sys.format_statement('SELECT ''abcdefghijklmnopqrstuvwxyz''');
+---------------------------------------------------------------+
| sys.format_statement('SELECT ''abcdefghijklmnopqrstuvwxyz''') |
+---------------------------------------------------------------+
| SELECT 'abc ... qrstuvwxyz'                                   |
+---------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SET @sys.statement_truncate_len = NULL;
Query OK, 0 rows affected (0.00 sec)

查看每个存储程序的文档以查看该程序支持哪些配置选项。

日期:2020-09-17 00:11:08 来源:oir作者:oir