MySQL 的 sys 库(sys Schema)

MySQL 的 sys 库(sys Schema) 是从 MySQL 5.7 开始引入的一个系统辅助库,由 MySQL 官方提供,用来帮助 DBA 和开发者更方便地查看性能、监控状态、诊断问题。

它本质上是一个**“可读性更强的 performance_schema + information_schema 的包装层”**。


✅ 一句话总结

sys 库 = 对 performance_schema 的复杂监控数据进行美化 + 预处理,提供易懂的视图、函数和过程,用于性能分析与故障诊断。


📌 一、sys 库的用途

sys 库主要解决两个问题:

1)让 performance_schema(PFS)更容易用

performance_schema 提供了非常详细的监控数据,但表多、字段多、语句复杂。

sys 库基于 PFS 做了:

  • 封装(使用视图简化)
  • 美化(格式化数字、人类可读)
  • 聚合(按照线程、用户、主机、表、SQL 分类)
  • 性能分析(热点表、慢 SQL、锁等待)

举例:

功能sys 中的视图描述
找最耗时 SQLstatements_with_runtimes_in_95th_percentile找耗时前 5% 的 SQL
找 IO 热点表io_global_by_file_by_bytes查看哪些表最耗 IO
找 CPU 使用高的线程session_account_connect_attrs看哪些 session 很忙
查看 InnoDB 缓冲池热点innodb_buffer_stats_by_table哪些表在内存中最热
查看锁等待innodb_lock_waits直接看到谁锁住了谁
找出使用最多资源的用户user_summary_by_statement_latency用户维度性能分析

📌 二、sys 库包含哪些内容?

sys 库里主要有四类对象:

✔ 1)视图(views)

帮助你用简单 SQL 查询复杂监控信息
例如:

  • host_summary
  • user_summary
  • schema_table_statistics
  • statements_with_errors_or_warnings
  • io_by_thread_by_latency
  • memory_by_thread_by_current_bytes

✔ 2)存储过程(procedures)

  • ps_setup_enable
  • ps_setup_disable
  • ps_setup_reset
  • ps_setup_reload

用于:

  • 启用或禁用 performance_schema 的监控
  • 重置或刷新 PFS 配置

✔ 3)函数(functions)

返回:

  • 可读性格式(human readable)
  • 比如把字节转换成 KB、MB、GB

例如:

  • format_bytes(bytes)
  • format_time(microseconds)
  • format_statement(sql)

📌 三、什么时候使用 sys 库?

✔ 场景 1:排查 CPU 飙高

select * from sys.user_summary_by_statement_latency;

看到哪个用户/SQL 消耗 CPU 最多。


✔ 场景 2:排查 IO 和慢查询

select * from sys.statements_with_runtimes_in_95th_percentile;

✔ 场景 3:发现热点表

select * from sys.schema_table_statistics;

✔ 场景 4:发现锁等待链

select * from sys.innodb_lock_waits;

✔ 场景 5:看哪些线程/用户最忙

select * from sys.host_summary;
select * from sys.user_summary;

📌 四、sys 库是否可以删除?

❌ 千万不要删除(MySQL 官方强烈不建议删除)

删除后你将无法使用许多性能分析视图,而且升级或重建困难。


📌 五、总结

项目说明
sys 库是什么?performance_schema 的易用封装层
用途性能分析、监控、诊断
包含视图、函数、存储过程
是否可删除❌ 不建议删除
使用场景CPU、IO、锁、慢 SQL、线程等分析

<think>嗯,用户的问题是关于如何恢复或重新创建MySQL中被误删的sys。首先,我需要回忆一下MySQLsys的作用。sysMySQL5.7之后引入的系统数据库,主要用于提供性能监控的视图,帮助DBA进行性能分析。如果被删除了,可能会影响某些监控工具或查询的性能数据。接下来,我需要考虑恢复或重建的方法。根据之前提供的引用内容,用户可能已经尝试过一些备份恢复的方法,比如使用完全备份和差异备份,但可能没有成功,因为恢复后只有部分表存在。这可能是因为备份不完整或者恢复步骤有误。然后,引用中提到了一些其他方法,比如使用XBK工具恢复文件,或者重新配置MySQL实例。用户还提到误删sys等内部角色的问题,可能需要从data目录复制数据库文件,或者重新创建用户和权限,比如mysql.infoschema用户。此外,引用5中提到了通过MySQLServerInstance ConfigWizard重新配置实例,甚至重新安装MySQL的可能步骤。 可能的解决方案包括: 1.使用备份恢复sys。如果用户有完整的备份,可以通过恢复备份文件来恢复sys。但需要确认备份是否包含sys的数据。 2.重新创建sysMySQL提供了mysql_upgrade命令,该命令会检查并安装缺失的系统数据库和表。在较新版本中,可能需要使用mysql--upgrade=FORCE命令。 3.手动安装sys。因为sys实际上是基于performance_schema的视图,可能需要从官方脚本重新安装。例如,使用提供的SQL脚本重新创建。4.重新安装MySQL。如果其他方法都失败,可能需要卸载并重新安装MySQL,但这应该是最后的手段,因为它会导致数据丢失,需要提前备份其他数据库。还需要考虑用户的MySQL版本,不同版本的处理方法可能不同。例如,在MySQL8.0中,初始化时会自动创建系统表,而mysql_upgrade的功能可能被整合到服务器启动过程中。 另外,用户提到的引用中有提到权限问题,比如恢复mysql.infoschema用户的权限,这可能与sys的访问有关,需要确保用户权限正确。 需要验证这些步骤的正确性,比如执行mysql_upgrade是否需要停止服务,或者如何获取sys的安装脚本。同时,提醒用户在操作前备份现有数据,防止进一步的数据丢失。最后,生成相关问题,帮助用户深入理解sys的作用、其他系统的恢复方法,以及备份策略的重要性。</think>### MySQL误删sys的恢复与重建方法 #### 一、sys的核心作用 sysMySQL 5.7及以上版本的系统数据库,提供基于$performance\_schema$的预定义视图,用于性能监控和优化[^1]。若误删可能导致以下问题: - 部分性能分析工具(如$sys\_schema$相关查询)失效 - 监控系统依赖的视图丢失 --- #### 二、恢复/重建方案 ##### 1. **通过mysql_upgrade重建** 适用于MySQL 5.7及以上版本: ```bash # 停止MySQL服务 systemctl stop mysqld # 执行升级重建(自动生成系统mysql_upgrade -u root -p --force # 重启服务 systemctl start mysqld ``` *说明*:此命令会重新生成缺失的$sys$表结构,但不会恢复用户自定义数据[^4]。 --- ##### 2. **手动安装sys脚本** 若自动重建失败,可手动执行官方SQL脚本: ```bash # 查找脚本路径(MySQL 8.0示例) find / -name "sys_57.sql" # 登录MySQL执行脚本 mysql -u root -p < /usr/share/mysql/sys_57.sql ``` *注意*:不同版本脚本路径可能为$sys\_schema.sql$或$sys\_80.sql$[^3]。 --- ##### 3. **从备份恢复** 若存在完整备份(如XBK物理备份): ```bash # 恢复整个数据目录(包含sys) innobackupex --copy-back /path/to/backup ``` *关键点*:需确保备份包含$sys$文件(位于$mysql/data/sys$目录)[^4]。 --- ##### 4. **重装MySQL系统** 极端情况下可重新初始化: ```bash # 备份现有数据(重要!) cp -r /var/lib/mysql /tmp/mysql_backup # 删除系统残留 rm -rf /var/lib/mysql/mysql /var/lib/mysql/sys # 重新初始化 mysqld --initialize --user=mysql ``` *风险*:此操作会重置$root$密码,需谨慎操作[^5]。 --- #### 三、验证恢复结果 ```sql -- 检查sys视图 USE sys; SHOW TABLES LIKE 'schema%'; ``` 若输出包含$schema\_table\_statistics$等视图,则恢复成功[^1]。 --- #### 四、预防措施 1. **禁止直接操作系统**:通过权限控制限制对$sys$、$mysql$的写操作 2. **定期备份**:使用`mysqldump --databases sys`或物理备份工具 3. **启用回收箱插件**:MySQL 8.0支持`RECYCLE BIN`功能(需安装插件) ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值