Use o arquivo de configuração para se conectar mais fácil ao MySQL

O arquivo de configuração do MySQL pode armazenar os parâmetros que você sempre usa para conectar-se ao servidor de banco de dados, o que permite executar a tarefa com uma linha de comando mais enxuta, mais simples.
O arquivo de configuração do MySQL tem o nomemy.cnf. No Linux (Ubuntu), ele fica no diretório /etc/mysql/my.cnf — mas recomendo criar um no seu diretório pessoal: ~/my.cnf, onde você pode ter mais liberdade para editar suas configurações.
No Windows, o arquivo é C:\my.cnf — mas você pode usar também o C:\SYSTEM\my.ini ou o my.cnf, no diretório de dados do servidor.
Captura de tela do arquivo de configuração do MySQL
Os exemplos usados, neste texto, refletem uma instalação típica do MySQL no Ubuntu 14.04 LTS — mas podem ser adaptados a outras distribuições ou sistemas operacionais sem muito esforço.

O arquivo de configuração do MySQL

A melhor maneira de conhecer os arquivos de configuração é in loco e é isto que vamos fazer aqui.
As linhas que começam com # ou com ; (ponto-e-vírgula) são linhas de comentários e não têm efeito algum na execução.

# opções gerais de conexão pro cliente
[client]
host=localhost
user=mysql_user
password=mysql_user_pass
# opções específicas da execução do mysql
[mysql]
no-auto-rehash
# opções específicas do modo interativo do mysql
pager=/usr/bin/less

Entenda o arquivo de configuração do mysql

O arquivo de configuração é composto de várias linhas, em que as opções e parâmetros de execução da conexão ao servidor MySQL são definidas.
As linhas são organizadas em grupos — cada qual contendo configurações concernentes a um detalhe da conexão.
Conheça outros fatos sobre o arquivo de configurações:

  • A primeira linha de cada grupo de opções de configurações contém o nome do grupo dentro de colchetes — como é possível observar no exemplo, onde há 2 grupos: [client] e [mysql].
  • Dentro de cada grupo, as opções se organizam, uma em cada linha. Algumas aceitam parâmetros adicionais, outras não.
    Exemplo: a opção no-auto-rehash, do grupo [mysql], dispensa qualquer parâmetro adicional.
  • Certas opções podem ficar em branco, para deixar o arquivo mais enxuto.
    Por exemplo, a opção host, pode ficar em branco caso você sempre se conecte ao localhost.
  • A linha referente ao username também pode ser omitida, no caso de você usar o mesmo login do Linux no MySQL.
  • Embora você possa abreviar opções na linha de comando, apenas as formas completas devem ser usadas dentro do arquivo de configurações.
    Por exemplo, na linha de comando, é possível usar ambas as variações, que seguem: -h localhost e --host=localhost.
    Dentro do arquivo de configurações, somente a forma host=localhost, como exemplo, é aceitável.
  • Nem todas as opções são referentes à conexão. A opção pager serve para informar qual programa de paginação deve ser usado dentro do modo interativo do MySQL, quando você estiver listando dados.
  • As opções de conexão especificadas no grupo [mysql], dentro do arquivo de configurações, são compartilhadas por outros clientes, como o mysqldump e o mysqladmin. Ou seja, o arquivo facilita mais do que você imagina…
  • O arquivo comporta a possibilidade de adicionar grupos específicos para outros programas clientes MySQL, como os já citados, mysqldump e mysqladmin. Para isto, crie novos grupos com os respectivos nomes dos programas.
  • Para inserir um comentário, comece a linha com um # ou ;.
  • Se você inserir opções duplicadas ou redundantes no arquivo, a última é que será levada em consideração.
  • Os arquivos de configuração precisam estar em formato de texto puro (atenção usuários Windows). Portanto, evite usar processadores de texto para editar ou criá-los.
  • Opções e parâmetros referentes a caminhos para outros arquivos ou programas, devem usar o caractere separador / , mesmo no Windows.

No terminal Linux ou em uma conexão SSH, é possível usar o seguinte comando para determinar quais opções estão valendo para execução da conexão ao MySQL:

mysql --print-defaults

Você também pode usar o aplicativo my_print_defaults para obter informações sobre a configuração vigente.
O exemplo abaixo permite ver a configuração padrão ativa (em uma máquina Ubuntu), dos grupos [client] e [mysql]:

my_print_defaults --defaults-file=/etc/mysql/my.cnf client mysql
--port=3306
--socket=/var/run/mysqld/mysqld.sock

Por fim, para criar uma cópia do arquivo padrão do sistema em seu diretório pessoal, use o seguinte comando:

cp /etc/mysql/my.cnf ~/my.cnf

Faça as alterações desejadas, nesta versão, se quiser. Se algo der errado, basta copiar novamente o arquivo.
Se você estiver tendo dificuldades para encontrar o arquivo de opções do MySQL, use o comando find:

sudo find / -iname my.cnf | grep my.cnf

Como esconder o seu arquivo de configuração dos curiosos

É natural que você queira ser discreto com informações como o seu nome de usuário e sua senha.
No Linux, há um método razoavelmente eficaz, que consiste em alterar as permissões do arquivo, com o comando CHMOD:
Entre no diretório em que se encontra o arquivo de configuração do MySQL e digite o seguinte comando:

chmod 600 my.cnf

Com este comando, o arquivo será passível de leitura apenas por você.

Como fazer backup do seu banco de dados MySQL?

Cluster (Imagem: WikiMedia.)
Cluster (Imagem: WikiMedia.)

A segurança em TI, começa com as cópias de segurança (os backups):

  1. Sempre faça Backup de tudo o que é importante
  2. Teste frequentemente os seus backups — poucas coisas, em sua vida, serão tão frustrantes quanto, ao tentar se recuperar de um desastre, descobrir que não foram feitos adequadamente ou se corromperam
  3. Armazene adequadamente — mantenha as cópias de segurança longe do local em que se encontram os dados originais, para que não corram riscos de sofrer o mesmo incidente (roubo, incêndio, sabotagem etc).

Nenhum ‘esquema’ de segurança está completo se o foco for apenas a prevenção dos eventos sinistros. Política de segurança vai além da prevenção — uma vez que as possibilidades de ser vítima de invasão e acidentes são reais — por isso é fundamental ter um plano eficaz para uma rápida recuperação. Se os danos são inevitáveis, ter um plano B, C… pode minimizar significativamente os prejuízos.

Você é blogueiro? Tem um website ou portal?

Donos de sites e blogueiros têm razões adicionais para se preocupar com backup de todos os seus posts. O provedor pode tirar do ar e remover de seus servidores todo o seu trabalho, se acreditar que termos do seu contrato foram violados.
Veja como se colocar do lado seguro.

O nosso cenário

Neste post, vou mostrar como usar o comando mysqldump para fazer guardar cópias de segurança dos dados armazenados no seu servidor. Se você não se sente à vontade com comandos em modo texto, pode usar uma excelente ferramenta web, chamada phpMyAdmin, que faz o mesmo trabalho com alguns cliques.
Vamos usar algumas variáveis em meio aos comandos, para tentar torná-los mais compreensíveis. Se você não souber como preencher algumas destas variáveis, consulte o administrador do banco de dados. Veja quais são:

  • dbname — o nome do banco de dados
  • dbuser — o nome de usuário que vai acessar o banco. Em alguns casos, vamos usar o root (administrador)
  • dbpass — a senha do usuário do banco
  • dbhost — o servidor em que se encontra o banco. Em uma instalação local, normalmente é localhost

Como fazer backup do banco de dados com o mysqldump

O mysqldump é uma ferramenta eficiente para fazer backup do seu banco de dados na linha de comando, no servidor local ou remoto (via SSH). Ele cria um arquivo .sql com os comandos DROP, CREATE e INSERT. Veja como usar o comando mysqldump como root:

mysqldump -u root -p dbname > backup.sql

No exemplo acima, direcionamos uma cópia integral do banco de dados dbname pro arquivo backup.sql. Todos os comandos sql necessários para a criação de uma nova versão daquele banco, estão incluídos em backup.sql.
Para copiar mais de um banco de dados, separe seus nomes com espaços:

mysqldump -u root -p dbname1 dbname2 dbname3 > backup.sql

Se você quiser fazer backup de todos os bancos de dados do servidor, usar o parâmetro --all-databases torna tudo mais fácil:

mysqldump -u root -p --all-databases > backup-de-tudo.sql

Nota: O comando mysqldump bloqueia o banco de dados enquanto trabalha. Portanto, ele deixa os usuários sem acesso, enquanto está sendo executado. Em casos de bancos de dados muito extensos, ele pode demorar para ser concluído. O bom senso manda avisar os usuários com antecedência e não fazer backups demorados em horários de pico.

Como comprimir o arquivo de backup

Há vários motivos para comprimir o seu arquivo de backup:

  • arquivos de texto .sql grandes, atingem excelentes taxas de compressão;
  • quando comprimidos, podem ser enviados de um ponto a outro na rede muito mais rápido, consumindo muito menos banda;
  • você pode armazenar uma quantidade maior de cópias de segurança em uma mídia física (CD, DVD ou BluRay) ou em uma conta na nuvem.
    • Veja como é fácil realizar este processo, usando o exemplo anterior:

      mysqldump -u root -p --all-databases | gzip -9 > backup-de-tudo.sql.gz 

      Usamos o aplicativo gzip, presente na maioria das distro Linux, com o nível de compressão máximo (9), neste exemplo.
      Para descompactar, posteriormente, use o gunzip:

      gunzip backup-de-tudo.sql.gz

      Como restaurar o backup feito com mysqldump

      Não esqueça de substituir as variáveis pelos valores adequados, a seguir:

      mysql -u dbuser -pdbpass dbname < backup.sql

      Nota: A senha deve ser digitada “grudada” ao parâmetro -p.
      Para restaurar um arquivo de backup comprimido, faça assim:

      gunzip < backup.sql.gz | mysql -u dbuser -pdbpass dbname

      Se você deseja inserir os dados de backup.sql em um banco de dados já existente:

      mysqlimport -u dbuser -pdbpass backup.sql

      Como fazer um backup local e restaurar no servidor remoto

      Aqui, vou descrever o meu modo preferido de fazer backups. O problema é que nem sempre ele é aplicável — alguns provedores proíbem conexões, de fora, ao banco de dados. Ou seja, só aceitam conexões no localhost ou de dentro da sua própria rede. Quando isto ocorre, você recebe a seguinte mensagem ao tentar se conectar:

      mysqldump: Got error: 1045: Access denied for user ... 

      Neste caso, o correto é se conectar ao provedor primeiro. Depois, ao banco de dados. Clique aqui, para saber como se conectar ao MySQL, em um servidor remoto via SSH.
      Uma vez conectado, o mysqldump pode ser usado para realizar o serviço. Veja como:

      mysqldump -u dbuser-local -pdbpass-local dbname-local | mysql -u dbuser-remoto -pdbpass-remoto --host=dbhost-remoto -C dbname-remoto

      Nota: Fique atento, para usar os nomes e senhas corretos. Os valores e nomes locais são possivelmente diferentes dos valores remotos.
      Enfim, muito mais pode ser escrito sobre backups e, com toda certeza, há muitas outras formas de realizá-los para bancos de dados MySQL. O importante, mesmo, é fazê-los com frequência. Não se esqueça disto.