Mysqldump lançado pelo cron e segurança de senha

Eu escrevi um script para fazer backup dos meus bancos de dados MySQL usando:

mysqldump --opt --all-databases -u user -pmypassword > myDump.sql 

Um cron o lança todas as noites e scp o resultado para outro servidor. mypassword aparece em claro no meu script, todos podem vê-lo com os direitos apropriados. Fui informado sobre os problemas / proc também (onde a execução do cmd pode ser vista).

A documentação do MySQL diz:

A especificação de uma senha na linha de comando deve ser considerada insegura. Veja a Seção 7.6, “Mantendo sua senha segura”.

Eu não encontrei esta mágica 7,6 seções em qualquer lugar.

Qual é a boa prática para lidar com a segurança automática do mysqldump e senha?

Citando os documentos do MySQL ( http://dev.mysql.com/doc/refman/5.1/en/password-security-user.html ):

Armazene sua senha em um arquivo de opções. Por exemplo, no Unix você pode listar sua senha na seção [client] do arquivo .my.cnf no seu diretório home:

 [client] password=your_pass 

Para manter a senha segura, o arquivo não deve estar acessível a ninguém além de você mesmo. Para garantir isso, configure o modo de access ao arquivo para 400 ou 600. Por exemplo:

 shell> chmod 600 .my.cnf 

Para nomear a partir da linha de comando um arquivo de opções específico contendo a senha, use a opção --defaults-file=file_name , em que file_name é o nome completo do caminho para o arquivo.

para adicionar a resposta de Sahil acima, use –defaults-extra-file

–defaults-extra-file é usado para dizer a um programa para ler um único arquivo de opções específico, além dos arquivos de opções padrão.

enquanto que –defaults-arquivo é lido em vez do arquivo my.cnf padrão.

Confira Mantendo as senhas seguras para uma boa resposta. Você pode armazenar sua senha no arquivo my.cnf alterando as permissions nesse arquivo para manter a senha segura.

Você também pode verificar o último comentário nesta página:

MYSQL_PWD = “tinkerbell” mysqldump – backup – todos os bancos de dados> dump.sql

Todas as respostas aqui estão em pedaços, então compartilhando um comando completo que fará o requerido e deve ser usado se o database for pesado em tamanho, --single-transaction e --lock-tables são muito importantes aqui

 mysqldump --defaults-extra-file=/home/dangi/.my.cnf -u root --single-transaction --quick --lock-tables=false --all-databases (or) DATABASE | gzip > OUTPUT.gz; 

Nota: Resposta é em adição de Avibodha e sahil resposta, eles já fizeram o ponto. Eu estou apenas colocando sua resposta em um único pedaço de código com important measure should be taken at time of backing up live database

O método a seguir funciona para mim em uma máquina Windows, se você tiver duas versões do MySQL instaladas e não tiver certeza de qual my.ini é usado ao executar o mysqldump, isso também ajudará:

1, C: \ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini, bem [cliente], substitua-o por:

 [client] user=my_user password=my_password 

2, use este comando:

C: \ Arquivos de Programas \ MySQL Server 5.6 \ bin> mysqldump –default-extra-file = “Servidor C: \ ProgramData \ MySQL \ MySQL 5.6 \ my.ini” -u my_user db_to_export> db_to_export.sql

A resposta aceita armazena a senha em um arquivo de texto simples, que pode ser lido por qualquer pessoa com access administrativo (raiz). Se o seu database estiver em um ambiente de hospedagem compartilhada, isso é indesejável.

Uma opção melhor seria usar mysql_config_editor para criar um caminho de login criptografado chamado mysqldump . De acordo com a documentação do MySQL :

mysql_config_editor criptografa o arquivo .mylogin.cnf para que ele não possa ser lido como texto não criptografado, e seu conteúdo quando descriptografado por programas clientes é usado apenas na memory. Dessa forma, as senhas podem ser armazenadas em um arquivo em formato não-texto não criptografado e usadas mais tarde sem precisarem ser expostas na linha de comando ou em uma variável de ambiente.

O seguinte comando irá criar o seu caminho de login do mysqldump :

 mysql_config_editor set --login-path=mysqldump --host=your_hostname --user=your_username --password 

Você será solicitado a digitar sua senha e o caminho de login que você criou será armazenado em formato criptografado. mysqldump usará automaticamente esse caminho de login sempre que você chamá-lo no futuro, a menos que você especifique um caminho de login diferente com a opção de linha de comando --login-path .

Aqui está como você chamaria mysqldump depois de criar um caminho de login criptografado:

 mysqldump database_name > output_file