gpt4 book ai didi

mysql - 如何捕获MySQL Client发出的系统命令的返回值

转载 作者:行者123 更新时间:2023-11-29 02:27:43 26 4
gpt4 key购买 nike

我正在使用 MySQL 客户端连接发出 FLUSH TABLES WITH READ LOCK,然后创建 LVM 快照。我希望更高级别的脚本 (Ruby) 捕获快照创建的返回代码,但无法确定如何在 MySQL 客户端中捕获它。简化:

mysql> system pwd
/root

我希望 system 返回 0。

mysql> system foo
sh: 1: foo: not found

我希望 system 在 bash 等中返回 127。

有没有什么方法可以在 MySQL 客户端中检索错误代码并在 MySQL 客户端退出时将其返回,将其写入文件以供控制脚本读取等。

最佳答案

要在同时运行系统命令的上下文中运行 FTWRL并且它们相互依赖,表明您想要刷新,然后快照,然后决定在释放表锁之前基于此做什么。

您需要在同一个脚本中执行此操作以确保它们一起工作,并且您正在尝试在 SQL 脚本中执行此操作。通过从系统脚本内部运行 SQL 脚本,以相反的方式进行操作要容易得多,因为您是根据 shell 条件而不是 SQL 条件做出决策。

这是我的做法(在 Perl 中):

#!/usr/bin/perl -w
use DBI;
my $d = DBI->connect('dbi:mysql:mysql','root','***');
$d->do('FLUSH TABLES WITH READ LOCK') or die ("Can't flush tables in MySQL");
# Here's the important bit: Capture the status in $s and branch on the result
my $s = system('lvm lvcreate -s -n lv_datadirbackup -L 4G /dev/VG_MYSQL/lv_datadir');
if($s == 0) {
print ("Snapshot created.\n");
$d->do('UNLOCK TABLES') or die("Can't unlock tables");
... # etc

这样您就可以创建表锁来获取快照,并使用您的脚本根据快照状态控制接下来发生的事情。

关于mysql - 如何捕获MySQL Client发出的系统命令的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18563452/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com