为什么要使用 MySQL“系统”命令?

Jer*_*ams 6 mysql command-line

我能做到用MySQL客户端的system命令?它为什么存在?

我见过的最有效的用途是查看文件系统(例如,记住要 SOURCE 或 LOAD FILE 的文件名)。

mysql> system ls /tmp
backup.sql 
mysql> source /tmp/backup.sql
Query OK, 1 row affected (0.02 sec)

mysql>
Run Code Online (Sandbox Code Playgroud)

就我所知,您不能将查询结果传递给命令的 STDIN,也不能将命令的 STDOUT 传递到 MySQL 查询中......它似乎没有广泛的用处。

小智 9

对于 SYSTEM 命令,实际上有一个比简单地执行ls来查看当前目录内容更有用的应用程序:

正如文档中所提到的(并通过评论进行了详细说明),这是进行备份的方法:

echo "FLUSH TABLES WITH READ LOCK; SYSTEM snapshot.sh; UNLOCK TABLES;" | mysql
Run Code Online (Sandbox Code Playgroud)

snapshot.sh 包含使用 LVM、ZFS 或 btrfs 功能制作 mysql 表的原子快照的代码。您不能从 shell 脚本将其拆分为多个命令,因为一旦 mysql 会话关闭,表锁就会被释放。


Der*_*ney 6

我用它来检查系统统计信息,而无需离开 mysql 提示符的舒适。在调试性能问题时非常有用,不必保持单独的窗口打开,或登录和退出 mysql 提示:

mysql> \! top
mysql> \! free -m
mysql> \! iostat -xd 3 6
Run Code Online (Sandbox Code Playgroud)

请注意,这\!是 mysql 命令行中“系统”的别名。


Rol*_*DBA 6

您可以随时使用该\q命令退出 mysql 命令行客户端。但是,如果您只想从命令行快速执行某些操作,您可以打开另一个系统 shell,然后通过退出 shell 返回到 MySQL 客户端。

这可以节省时间而不是退出 MySQL,因为当您再次启动 MySQL 客户端时,您不需要再次登录。否则,您将终止数据库连接并关闭您使用CREATE TEMPORARY TABLE.

您还可以执行整个 bash shell 并一直停留在 shell 中,直到您决定键入exit并按回车键。

mysql> \! bash
[root@**** ~]# exit
exit
mysql>
Run Code Online (Sandbox Code Playgroud)

当然,不要在该 shell 中停留的时间超过wait_timeout 中列出的秒数或interactive_timeout 中