Restaurando MySQL com informações de progresso

Uma das formas mais comuns de realização de Backup de uma base de Dados MySQL é através do mydqldump, porém quando necessita restaurar uma base de dados você fica sem um status de quanto ja foi processado para saber a final quanto tempo levará o processo todo.

Este artigo entende que fizemos o backup com mysqldump e o arquivo está compactado com Zgip.

Sendo assim a forma mais comum de realizar um restore é com um dos comandos abaixo:

cat backup.sql.gz | grep gunzip | mysql -u usuario -p
ou
zcat backup.sql.gz | mysql -u usuario -p

Porém nestes casos não temos nenhum status de quanto ja foi restaurado, sendo assim podemos usar a ferramenta DD (ja abordada em outro post aqui) para realizar a leitura do arquivo, e assim utilizar um sinal do linux para saber o quanto o DD ja leu o arquivo. Confuso? Então vamos aos comandos que tudo ficará mais claro.

Comando de restauração:

dd if=backup.sql.gz | grep gunzip | mysql -u usuario -p

Até aqui nenhuma novidade, só substituímos o cat pelo DD, a novidade vem agora, podemos usar o sinal -USR1 no processo do DD que ele imprimirá em tela o quanto ja leu do arquivo backup.sql.gz.

Primeiramente vamos descobrir o Process ID (PID) do DD com o comando:

ps aux | grep -i "command\|dd if" | grep -v mysql | grep -v grep

O Resultado do comando será algo parecido com a imagem abaixo:
ps

Agora de posse do PID podemos executar o comando mágico que trará quanto o nosso DD ja leu do arquivo

kill -USR1 26711

Quando executado este comando, na janela em que está sendo executado o DD ele irá trazer um resultado semelhante a imagem abaixo:
kill

Agora para fechar com chave de outro vamos criar um comando que fica enviando este sinal a nosso processo de tempo em tempo.

 while :; do kill -USR1 26711; sleep 30; done

Criando usuário no MySQL

Criando usuário

CREATE USER 'nome_do_usuario'@'localhost' IDENTIFIED BY 'senha_do_usuario';

Este exemplo demostra como criar um usuário que terá permissão de acesso somente da própria maquina (localhost) e definindo sua senha.

Veremos no próximo exemplo como criar um usuário que tenha permissão de acesso (como origem do acesso) vindo de qualquer endereço IP.

CREATE USER 'nome_do_usuario'@'%' IDENTIFIED BY 'senha_do_usuario';

Definindo permissão de acesso a uma base de dados

Neste primeiro exemplo veremos como definir as permissões para que o usuário tenha acesso total porém somente a uma base de dados e o acesso vindo da própria maquina.

GRANT ALL PRIVILEGES ON database_name.* TO 'nome_do_usuario'@'localhost';

Seguindo a mesma lógica, será definido a permissão porém para acesso a partir de qualquer IP.

GRANT ALL PRIVILEGES ON database_name.* TO 'nome_do_usuario'@'%';

Definindo permissão de acesso como root

Por fim veremos como dar permissão como root a este usuário mas com o acesso vindo da própria maquina.

GRANT ALL PRIVILEGES ON *.* TO 'nome_do_usuario'@'localhost';

Seguindo a mesma lógica, será definido a permissão porém para acesso a partir de qualquer IP.

GRANT ALL PRIVILEGES ON *.* TO 'nome_do_usuario'@'%';

Resgatando tamanho das bases de dados MySQL

Segue abaixo o comando para listar todas as bases de dados do MySQL com seu respectivo tamanho e espaço livre.

SELECT table_schema "Data Base Name",
sum( data_length + index_length ) / 1024 /
1024 "Data Base Size in MB",
sum( data_free )/ 1024 / 1024 "Free Space in MB"
FROM information_schema.TABLES
GROUP BY table_schema;