Eu preciso chamar mysqldump programaticamente com certos parâmetros. Eu tento usar a --source-data
opção ou a --master-data
opção.
Há a seguinte frase na documentação:
A partir do MySQL 8.0.26, use
--source-data
, e antes do MySQL 8.0.26, use--master-data
Para usar o parâmetro correto, preciso determinar a versão do cliente MySQL. Mas aqui eu enfrento um problema. Eu executei o comando mysqldump --version em servidores diferentes e descobri que a versão não está formalizada e é produzida em formatos diferentes em servidores diferentes.
Em um servidor, obtive o seguinte resultado:
mysqldump Ver 8.0.28-0ubuntu0.20.04.3 for Linux on x86_64 ((Ubuntu))
E o seguinte no outro servidor:
mysqldump Ver 10.13 Distrib 5.7.37, for Linux (x86_64)
O formato é obviamente diferente. Neste caso, a versão está em posições diferentes. Na primeira versão do servidor é 8.0.28
, na outra é 5.7.37
. Talvez existam outros formatos? Como faço para obter a versão do cliente simplesmente no major.minor.path
formato?
Parece que a expressão regular \d*\.\d*\.\d*
é uma opção apropriada. Mas, por outro lado, parece uma solução não confiável, pois pode haver mais formatos de saÃda da versão do cliente MySQL.
Encontrei três opções de como obter a versão.
No Linux
Você pode descobrir a versão do
mysql-client
pacote instalado:Aqui o formato da versão é o mesmo para todos.
A versão pode ser extraÃda por uma linha:
No Windows
A maneira mais fácil é pegar a versão do
mysql.exe
próprio arquivo:mais detalhes sobre como fazer isso programaticamente (c#):
https://learn.microsoft.com/en-us/dotnet/api/system.diagnostics.fileversioninfo.fileversion?view=net-6.0
Alternativo
Você pode simplesmente descobrir se o comando é suportado por uma determinada versão do cliente executando
mysql --help
e verificando se o parâmetro desejado no texto de saÃda.