Algumas vezes eu preciso rodar um banco mysql que eu copiei de um computador para outro e existem alguns detalhes que se você não prestar atenção você pode acabar perdendo muito tempo em pequenas besteiras.
Primeiro só utilize as dicas deste post caso você tenha um banco de dados muito grande, onde dump do banco leve bastante tempo para ser gerado.
Caso contrário basta você digitar o comando:
mysqldump -u user -p password database_name > database_dump.sql
no computador que você quer extrair o dump e depois o comando abaixo:
mysql database_name < database_dump.sql
no computador que você deseja armazenar o novo banco de dados.
Mas se este não é o seu caso e você possui uma base de 10gb ou mais, gerar o dump de uma bases dessas é muito complicado, pois demora muito e as vezes copiar todo o banco num pendrive e substituir os arquivos no novo computador vale mais a pena.
Então para isso basta copiar a pasta '/var/lib/mysql' para um pendrive, e tem que ser um pendrive grande já que isso só é aconselhável quando se está manipulando bases muito grandes
, e depois substituir a pasta '/var/lib/mysql' do servidor no qual você quer que o banco de dados rode por esta pasta copiada.
É aconselhável fazer um bakcup da pasta /var/lib/mysql antes de substituir os arquivos. Assim você poderá repetir este processo e rodar o antigo banco de dados novamente.
No meu caso ficou assim:
No computador 1
root@barker:~/$ cp -r /var/lib/mysql /media/disk-1
No computador 2
root@smurf:~/$ mv /var/lib/mysql /var/lib/mysql.orig
root@smurf:~/$ cp -r /media/disk-4/mysql /var/lib
Antes de rodar este comando no ‘Computador 2′ pare o apache.
/etc/init.d/apache stop
Observe que para fazer a cópia dos arquivos você terá que ter acesso ao root do computador.
Ao realizar a cópia, as pastas terão permissão somente para o usuário root, então rode o comando:
chown mysql.mysql /var/lib/mysql -R
Agora o usuário mysql terá permissão para acessar os arquivos.
Se você tentar inicializar o apache novamente terá o seguinte problema:
root@smurf:/var/lib# /etc/init.d/mysql start
Starting MySQL database server: mysqld ..
Checking for corrupt, not cleanly closed and upgrade needing tables..
/usr/bin/mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)'
root@smurf:/var/lib# ERROR 1045 (28000): Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)
Este erro ocorre pois você copiou a pasta do mysql de um outro computador que possuía configurações específicas daquele computador. Neste caso a configuração em questão é a senha do usuário do banco debian-sys-maint que é o usuário que o sistema operacional utiliza para realizar algumas operações no banco.
O usuário debian-sys-maint é como se fosse o usuário root do banco. Ele é utilizado para realizar executar certos scripts de manutenção no Debian.
Abaixo segue uma breve descrição deste usuário encontrada no arquivo README.Debian:
* MYSQL WON’T START OR STOP?:
=============================You may never ever delete the special mysql user “debian-sys-maint”.
This user together with the credentials in /etc/mysql/debian.cnf are used by the init scripts to stop the server as they would require knowledge of the mysql root users password else.
Então para que o banco possa inicializar corretamente eu preciso dar acesso ao usuário debian-sys-maint ao banco. O Debian utiliza este usuário com a senha definida no arquivo ‘/etc/mysql/debian.cnf’.
[client]
host = localhost
user = debian-sys-maint
password = ********************
socket = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
user = debian-sys-maint
password = ********************
socket = /var/run/mysqld/mysqld.sock
basedir = /usr
Então precisamos modificar a senha do usuário ‘debian-sys-maint’ pela senha contida neste arquivo.
Se você não tiver nenhum acesso ao banco, ou seja, nenhum login e senha de usuário para poder modificar a senha do usuário debian-sys-maint então continue lendo o post caso contrário leia também
.
Reinicie o mysql com o comando:
/usr/bin/mysqld_safe --skip-grant-tables &
Logue no console mysql:
root@smurf:# mysql
E modifique as permissões do usuário ‘root’ e do usuário ‘debian-sys-maint’. Assim você terá acesso ao banco com o usuário ‘root’ também.
mysql> UPDATE mysql.user SET Password=PASSWORD('password') WHERE User='root';
mysql> FLUSH PRIVILEGES;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
Substitua a palavra password pelo password que você encontrou no arquivo ‘/etc/mysql/debian.cnf’
Agora basta derrubar o servidor e carregá-lo novamente.
/etc/init.d/mysql stop
/etc/init.d/mysql start
Não use o comando ‘/etc/init.d/mysql restart’ pois o mysql poderá iniciar com a opção ‘–skip-grant-tables’ e você não quer isso
E tudo funcionará bem agora, pelo menos em teoria
Eu utilizo o gitosis para gerenciar os meus repositórios git e dei os meus primeiros passos para configurá-lo da forma correta seguido o tutorial hosting-git-repositories-the-easy-and-secure-way.
Antigamente ao adicionar um repositório novo eu tinha um problema.
Eu seguia todos os passos descritos no tutorial para adicionar um novo repositório, e ao dar um pull eu recebia a seguinte mensagem de erro:
smurf@smurf:~/safernet/projetos/snscripts$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.master.merge' in
your configuration file does not tell me either. Please
name which branch you want to merge on the command line and
try again (e.g. 'git pull
See git-pull(1) for details on the refspec.
If you often merge with the same branch, you may want to
configure the following variables in your configuration
file:
branch.master.remote =
branch.master.merge =
remote.
remote.
Abrindo o arquivo de configuração do git (.git/config) eu notei que não existiam as informações do branch master que eu estava trabalhando no momento.
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@host.com.br:project_name.git
fetch = +refs/heads/*:refs/remotes/origin/*
Então eu editei o arquivo .git/config adicionando as informações do branch master:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = git@host.com.br:project_name.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
Pronto.
Agora será possível dar um pull normalmente.
smurf@smurf:~/safernet/projetos/snscripts$ git pull
Already up-to-date.
Não sei se esta é a melhor forma de resolver o problema, mas é a que eu utilizo.
Espero que seja útil para alguém
Eu não gosto muito de fazer trabalhos repetitivos, então quando eu percebo que alguma atividade tem o potencial de se tornar repetitiva e entediante trato de arranjar um jeito de automatizar o processo
Claro que algumas vezes eu acabo levando mais tempo automatizando a tarefa do que repentindo-a. Entretanto no somatório de de tempo que seria gasto para se realizar a tarefa quando o tempo tende a infinito, eu acabo economizando muito tempo de minha vida que seria gasto em coisas não tão interessantes
A bola da vez é a necessidade de se executar o comando ’ssh’ diversas vezes com diversos parâmetros diferentes.
Pesquisando um pouco encontrei um forma de otimizar meu tempo.
Se você criar um arquivo de nome ‘config’ na pasta ‘.ssh’ no seu home o ssh carrega este arquivo e procura por opções de configuração que você deseje criar.
Então:
mkdir "~/.ssh"
vim "~/.ssh/config"
Agora basta configurar o arquivo de acordo com a sua necessidade.
No meu caso utilizei os seguintes parâmetros de configuração:
Host leandro
User smurf
Port 22
HostName leandronunes.net
Host servidor
User root
Port 3021
HostName servidor.com.br
Host proxy
User smurf
Port 2299
HostName app.dcc.ufba.br
LocalForward 3128 app.dcc.ufba.br:8080
No primeiro caso:
Host leandro
User smurf
Port 22
HostName leandronunes.net
Eu ganho a possibilidade de acessar meu servidor apenas digitando o comando:
ssh leandro
O ssh lerá o arquivo ‘~/.ssh/config’ e saberá que eu quero acessar o servidor leandronunes.net, com o usuário smurf e utilizando a porta 22.
O segundo caso é semelhante ao caso anterior só que desta vez eu escolho outra porta para acessar o meu servidor cujo host é servidor.com.br
Eu acesso o servidor com o comando:
ssh servidor
O terceiro e último exemplo é mais legalzinho.
Host proxy
User smurf
Port 2139
HostName ufba.br
LocalForward 2148 ufba.br:7070
Eu posso acessar o servidor da UFBa, que utilizo como proxy para acessar o periódicos da capes de casa, com o seguinte comando:
ssh proxy
Somente com isso, o ssh já entende que é para fazer um tunel ssh da minha porta ‘2148′ para a porta ‘7070′ do meu host ‘ufba.br’, que eu acesso utilizando o usuário ’smurf’ na porta ‘2139′.
Seria algo equivalente ao comando:
ssh -p 2139 app.dcc.ufba.br -L 2148:app.dcc.ufba.br:7070
É claro que você precisa configurar o seu navegador ( que eu espero que seja o firefox
) para utilizar o proxy.
Existem muitas outras opções que podem ser realizadas utilizando esta técnica.
Se divirta!