Mysql Exportar a configuração atual para um arquivo

11

Perdemos nosso arquivo my.cnf e estávamos nos perguntando se existe uma maneira de exportar uma cópia da instância mysql atualmente em execução.

Obrigado!

samspot
fonte

Respostas:

16

Três (3) Opções

OPÇÃO 1: De dentro do cliente mysql

mysql -uroot -A -e"SHOW GLOBAL VARIABLES;" > MySQLCurrentSettings.txt

Isso capturará todas as opções no arquivo de texto.

OPÇÃO 2: Na linha de comando do Linux

ps -ef | grep mysqld | grep -v grep

Isso mostrará as opções que o mysqld iniciou com como definido no mysqld_safe

OPÇÃO 3: perguntar diretamente ao servidor

mysqld --help --verbose

Na parte inferior da tela 'mysqld --help --verbose', você verá as configurações atuais do mysqld carregadas no my.cnf ou no padrão.

RolandoMySQLDBA
fonte
-1 Desculpe, mas isso não faz sentido. Por que você está despejando SHOW VARIABLES em um arquivo de texto e, em seguida, cumprimenta a lista de processos e não faz nada com seus resultados, dizendo dizendo leia o sinalizador de ajuda para o mysqld?
Coops
@ Cooper - São três coisas separadas. O primeiro captura as MOSTRAR VARIÁVEIS em um arquivo de texto. O segundo permite ver quais opções são especificadas pelo /etc/init.d/mysql na inicialização do mysql. A terceira permite ver na metade inferior da tela com o que o mysqld está operando atualmente. Cabe ao samspot fazer o trabalho básico de definir essas opções no /etc/my.cnf a partir desses monitores. Deveria ter escrito algo para automatizar e regenerar o /etc/my.cnf?
RolandoMySQLDBA
Sua linha de abertura é "faça o seguinte", sugerindo que você forneça um guia passo a passo para obter uma resposta para a pergunta. Você também não explica o que cada etapa faz ou como ela responde à pergunta, aumentando a confusão! :-)
Coops
Desculpe por qualquer confusão causada pela maneira como escrevi minha resposta originalmente.
RolandoMySQLDBA
Mesmo que a regeneração do my.cnf seja o melhor caso (eu esperava que o mysql pudesse fazer isso), essa é realmente uma ótima informação para recuperarmos. Eu tentei pesquisar essas informações no Google, mas tudo o que pude encontrar foram artigos sobre o backup do banco de dados. Obrigado!
samspot 14/08
3

Estas instruções são para o estoque mariadb no centos 7.1.

A seguir, mostramos como fazer backup ou replicar as configurações atuais de uma máquina para uma nova instalação, presente ou futura.

Na máquina da qual queremos copiar as configurações, podemos executar:

/usr/libexec/mysqld --help --verbose > mysql_current_settings.txt

Em outra máquina, podemos instalar o mariadb-server e executar:

/usr/libexec/mysqld --help --verbose > mysql_default_settings.txt

Em seguida, colocamos os dois arquivos em um diretório, que neste exemplo é "/ a /".

Então nós corremos:

comm -3 <(sort /a/mysql_current_settings.txt) <(sort /a/mysql_default_settings.txt)

Se não houver saída, os dois arquivos são idênticos. O que significa que todas as configurações, nas duas máquinas, estão no padrão.

Se houver alguma saída, algumas linhas não serão recuadas, enquanto outras serão recuadas.

As linhas não recuadas estão presentes apenas no primeiro arquivo, que aqui é /a/mysql_current_settings.txt.

As linhas de indentenda estão presentes apenas no segundo arquivo, que aqui é /a/mysql_default_settings.txt.

Agora conhecemos todas as configurações, exceto algumas que são definidas na linha de comando que iniciou o mysqld. Essas configurações podem vir dos arquivos /etc/my.cnf ou /etc/my.cnf.d/*, ou um script personalizado ou um alias, etc. Em qualquer caso, podemos vê-los com o seguinte comando:

ps -ef | grep mysqld

Agora sabemos as poucas configurações que precisamos alterar em uma nova instalação para configurá-la como antiga.


Aqui seguem alguns outros detalhes.

No centos 7.1, o comando a seguir mostra todas as configurações atuais, exceto algumas configurações definidas na linha de comando que iniciou o mysqld:

/usr/libexec/mysqld --help --verbose

No total, mostra:

na primeira parte, as configurações que podemos usar como primeiro parâmetro após o "mysqld" quando o iniciamos;

na segunda parte, as configurações definidas no tempo de compilação;

na terceira parte, as configurações atuais.

Mesmo que a última linha de sua saída diga: para ver quais valores um servidor MySQL em execução está usando, digite:

    mysqladmin variables -uroot -p

esse comando não mostra, fe, endereço de ligação, mesmo que o alteremos em /etc/my.cnf e reinicie o mysql.

Além disso, o comando a seguir mostra muitas configurações, mas não o "endereço de ligação":

mysql -uroot -p -e"SHOW VARIABLES;"

Note que, no centos 7.1, o mysqld não está no $ PATH.

salvador
fonte
2

Aqui está minha maneira favorita de gerar um my.cnf atual:

{ echo -e "# MYSQL VARIABLES {{{1\n##\n# MYSQL `mysql -V|sed 's,^.*\(V.*\)\, for.*,\1,'` - By: `logname`@`hostname -f` on `date +%c`\n##"; for l in {a..z}; do echo '#'; mysql -NBe "SHOW GLOBAL VARIABLES LIKE '${l}%'" | sed 's,\t,^= ,' | column -ts^ | tr "\n" '@' | eval $(echo "sed '" "s,@\("{a..u}{a..z}"\),\n\n\1,;" "'") | eval $(echo "sed '" "s,@\(innodb_"{a..z}{a..z}"\),\n\n\1,;" "'") | tr '@' "\n" | sed 's,^,# ,g'; done; echo -e "#\n##\n# MYSQL VARIABLES }}}1"; } | tee ~/mysql-variables.log

No entanto, isso não funciona de maneira confiável no Mac OS X.

Isso produzirá um log de variáveis ​​limpas, comentado, pronto para importar para o my.cnf.

Fonte original: http://www.askapache.com/mysql/view-mysql-variables-my-cnf.html

Ryan
fonte
Algumas notas: 1. bsdmainutils precisam ser instalados 2. Aviso: ele grava versão do cliente mysql, não servidor
gadelat
Para a versão servidor do comando é mysqld -V|sed 's,^.*\(V.*\)\ for.*,\1,'. Não tenho certeza se importa, pois acho que o cliente e o servidor estão instalados juntos. Qual é o propósito {{{1e 1}}}?
beppe9000