在Linux中使用Percona的MySQL备份工具XtraBackup的时候,你可能需要如题所示,检查【xtrabackup】的版本信息。

在检查完成这个需求的时候,有很多方法,下面简单列举一下。

一、通过YUM

二、通过【xtrabackup】命令本身的版本信息选项

三、上面两种方案存在的差异与问题

乍看之下,觉得以上两种方法都可以解决查看【xtrabackup】版本的问题。

但是,如果是通过脚本程序获取【xtrabackup】的版本信息,以供接下来的判断,那么就会遇到问题:通过【xtrabackup -v】的方式,在脚本中,无法拿到命令行的返回值;具体如下。

1)使用xtrabackup自身的命令行选项的场景

语言:Python

语言:SHELL

可以通过上面的结果看到,不论Python,或者SHELL,均无法得到xtrabackup的版本信息。

2)使用【yum info】获得xtrabackup的版本信息

语言:Python

语言:SHELL

虽然,SHELL的方式拿到的版本信息的格式都乱掉了(都排成了一行);但是,可以看到,使用【yum info】的方式,不论Python,或者SHELL,都可以拿到xtrabackup的版本信息。

四、为什么xtrabackup的返回结果无法拿到呢?

为什么xtrabackup的返回结果无法拿到呢?
这种表现和Linux系统中,其他的命令的表现很不一样。
在Linux中,有命令或方法处理这种情况吗?

后来,为了研究这个问题,我做了一个实验。

代码:SHELL:

在Linux中,命令运行的时候都会打开三个文件:
1. 标准输入文件(stdin),标准输入文件描述符为【0】,Unix默认从【stdin】读取数据
2. 标准输出文件(stdout),标准输出文件的描述符是【1】,Unix默认向【stdout】输出数据
3. 标准错误文件(stderr),标准错误文件的描述符为【2】,Unix默认向【stderr】写入错误信息

通常,我们有以下的两种写法:
1. 【command > file】,表示将【stdout】重定向到文件
2. 【command < file】,表示将【stdin】的起点设为文件
3. 【command 2> file】,表示将【stderr】重定向到文件

因此,在上面的命令行截图中,可以看到:
1. 标准输入无法得到【xtrabackup -v】的结果
2. 但是命令行的反馈信息确实包含版本信息
3. 命令行反馈的版本信息,其实是【错误信息】
4. 在标准错误重定向之后,命令执行后反馈的版本信息,就没有显示在终端(Terminal)中了,而是被重定向到文件【version】中了

因此,如果我们需要通过命令【xtrabackup】的参数获得版本信息,我们可以通过将【标准错误】重定向到【标准输出】来实现,具体做法如下:

语言:SHELL

语言:Python

可以看到,这时候,不论用SHELL,还是Python,都可以拿到【xtrabackup】的版本信息了。

至此,关于【xtrabackup -v】的问题已经得到解决了;
不过,这种设定很奇怪;不知道在【xtrabackup】后续的版本中是否会被修正。

说点什么

avatar

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

  Subscribe  
提醒
隐藏
变装