Arquivo

Textos com Etiquetas ‘MySQL’

Zimbra: Recuperando MySQL corrompido

10, fevereiro, 2011 Sem comentários

Opa,

Recentemente tive um problema grave com o servidor de colaboração Zimbra, todo o tráfego de e-mail estava parado e, após uma busca nos logs, descobri que o problema estava no banco de dados MySQL que estava com algumas tabelas corrompidas, segue abaixo os passos que foram necessários para fazer um dump de todas as tabelas relacionadas, limpeza da base e importação dos dados.

OBS.: Mantenha sempre um backup, essa opção pode não funcionar em alguns casos! Não me responsabilizo pelo que pode ocorrer ao seu banco, realize esses passos por sua conta e risco!

Primeiro pare os serviços do Zimbra:

[zimbra@meuservidoremail ~]$ zmcontrol stop

Adicione a variável abaixo no arquivo de configuração do banco MySQL dentro da sessão [mysqld]:

[zimbra@meuservidoremail ~]$ vim /opt/zimbra/conf/my.cnf

innodb_force_recovery = 1

Inicie o serviço do MySQL:

[zimbra@meuservidoremail ~]$ mysql.server start

Carregue as variáveis do Zimbra:

[zimbra@meuservidoremail ~]$ source ~/bin/zmshutil ; zmsetvars

Crie uma lista dos bancos de dados existentes:

[zimbra@meuservidoremail ~]$ mysql –batch –skip-column-names -e “show databases” | grep -e mbox -e zimbra > /tmp/mysql.db.list

Crie um diretório na pasta tmp para armazenar os dumps dos bancos:

[zimbra@meuservidoremail ~]$ mkdir /tmp/mysql.sql

Faça o dump dos bancos:

[zimbra@meuservidoremail ~]$ for db in $(cat /tmp/mysql.db.list); do
~/mysql/bin/mysqldump $db -S $mysql_socket -u root –password=$mysql_root_password > /tmp/mysql.sql/$db.sql
echo “Dumped $db”
done

OBS1.: Se forem apresentados erros na execução dos dumps dos bancos, incremente o valor da variável innodb_force_recovery (o valor máximo é 6), reinicie o banco e execute o comando novamente até não obter erros.

OBS2.: Caso tenha problemas em executar os dumps acesse esse link para resetar a senha do banco MySQL.

Remova todos os bancos existentes e possivelmente corrompidos:

[zimbra@meuservidoremail ~]$ for db in $(cat /tmp/mysql.db.list |grep mbox)
do
mysql -u root –password=$mysql_root_password -e “drop database $db”
echo -e “Dropped $db”
done

[zimbra@meuservidoremail ~]$ mysql -u root –password=$mysql_root_password -e “drop database zimbra”

Remova a váriavel innodb_force_recovery do arquivo de configuração do banco MySQL e reinicie o serviço:

[zimbra@meuservidoremail ~]$ vim /opt/zimbra/conf/my.cnf
[zimbra@meuservidoremail ~]$ mysql.server restart

Crie os bancos e importe os dumps:

[zimbra@meuservidoremail ~]$ for db in $(cat /tmp/mysql.db.list)
do
mysql -e “create database $db character set utf8”
echo “Created $db”
done

[zimbra@meuservidoremail ~]$ mysql zimbra < /tmp/mysql.sql/zimbra.sql

[zimbra@meuservidoremail ~]$ for sql in /tmp/mysql.sql/mbox*
do
mysql $(basename $sql .sql) < $sql
echo -e “Updated $(basename $sql .sql) \n”
done

Teste o acesso ao banco e inicie os serviços do Zimbra:

[zimbra@meuservidoremail ~]$ mysql zimbra -e “select * from mailbox order by id desc limit 1”
[zimbra@meuservidoremail ~]$ zmcontrol start

Pronto! Verifique nos logs se os erros continuam e lembre-se de executar backup’s!

Abraço!

Fonte: http://wiki.zimbra.com/index.php?title=Mysql_Crash_Recovery

Categories: Linux Tags: , ,

Lighttpd com PHP + MySQL no CentOS

14, agosto, 2009 11 comentários

Opa,

Já faz algum tempo que eu soube do Lighttpd (através do Enderson), mas sempre utilizei o Apache como serviço de hospedagem Web nos servidores que instalo por uma simples razão, sempre me serviu muito bem, mas ultimamente eu precisava de um simples serviço Web com suporte a PHP e MySQL para hospedar um único sistema, foi quando eu resolvi testar o Lighttpd!

Primeiro, caso ainda não esteja instalado, é necessário instalar os pacotes do MySQL e PHP:

# yum install mysql mysql-server php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc

Ative o serviço do MySQL para iniciar durante o boot e inicie-o no sistema:

# chkconfig mysqld on && /etc/init.d/mysqld start

Agora é necessário alterar a senha do administrador do banco de dados MySQL, portanto execute os comandos abaixo:

# mysqladmin -u root password senha123
# mysqladmin -h hostname.servidor -u root password senha123

OBS.: Lembre-se de alterar a senha123 pela senha que deseja para o adminstrador do MySQL e altere hostname.servidor pelo hostname do seu servidor!

Agora vamos baixar e instalar o Lighttpd, para isso existem 2 formas, baixar os pacotes manualmente do repositório DAG, ou ativar o repositório DAG e instalar via YUM, eu escolhi baixar os pacotes manualmente e instalar via RPM (caso deseje a segunda opção basta dar uma olhada na fonte utilizada neste post). Execute os comandos abaixo:

# cd /tmp/
# wget -c http://dag.wieers.com/rpm/packages/lighttpd/lighttpd-1.4.18-1.el5.rf.x86_64.rpm
# wget -c http://dag.wieers.com/rpm/packages/lighttpd/lighttpd-fastcgi-1.4.18-1.el5.rf.x86_64.rpm
# rpm -Uvh lighttpd-1.4.18-1.el5.rf.x86_64.rpm
# rpm -Uvh lighttpd-fastcgi-1.4.18-1.el5.rf.x86_64.rpm

Agora iremos alterar dois arquivos de configuração, o primeiro é o php.ini que precisamos adicionar a linha abaixo no final do arquivo:

# vim /etc/php.ini

cgi.fix_pathinfo = 1

O segundo é o lighttpd.conf que precisa descomentar as linhas abaixo:

# vim /etc/lighttpd/lighttpd.conf

"mod_fastcgi",

fastcgi.server = ( ".php" =>
( "localhost" =>
(
"socket" => "/tmp/php-fastcgi.socket",
"bin-path" => "/usr/bin/php-cgi"
)
)
)

Inicie o serviço do Lighttpd e ative-o na inicialização do sistema com os comandos abaixo:

# /etc/init.d/lighttpd start
# chkconfig lighttpd on

Pronto! Serviço instalado! Caso deseje crie um arquivo info.php para verificar se tudo está OK:

# vim /srv/www/lighttpd/info.php

Abraço!

Fonte: http://www.howtoforge.com/lighttpd_php5_mysql_centos5.0

Categories: Linux Tags: , , , ,

Replicação MySQL no CentOS

18, junho, 2009 1 comentário

Opa,

Nesse post eu tentarei mostrar como fazer replicação de banco de dados MySQL no CentOS.

Primeiro devemos configurar o servidor MySQL master para “escutar” na rede local comentando as linhas abaixo do arquivo my.cnf (caso existam):

# vim /etc/my.cnf

[mysqld]
#skip-networking
#bind-address            = 127.0.0.1

Agora vamos habilitar o log do banco que desejamos replicar e informar que o servidor MySQL é o servidor master:

# vim /etc/my.cnf

[mysqld]
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db=exampledb
server-id=1

Agora criamos o diretório onde serão armazenados os logs e ajustamos as permissões:

# mkdir /var/log/mysql
# chown mysql: -R /var/log/mysql/

Reiniciamos o serviço (não o servidor):

# /etc/init.d/mysqld restart

É necessário conceder privilégios de replicação para o usuário que será utilizado:

# mysql -u root -p
Enter password:

mysql> GRANT REPLICATION SLAVE ON *.* TO ‘example’@’%’ IDENTIFIED BY ‘senha_example’;
mysql> FLUSH PRIVILEGES;

Aproveite e faça um LOCK nas tabelas para poder realizar o dump (OBS.: Seu banco será “somente leitura” nesse momento):

mysql> USE exampledb;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
+——————+———-+—————+——————+
| File             | Position | Binlog_Do_DB  | Binlog_Ignore_DB |
+——————+———-+—————+——————+
| mysql-bin.000001 |       98   | example |                  |
+——————+———-+—————+——————+

IMPORTANTE: Anote essas informações pois elas serão necessárias para a ativação da replicação.

mysql> quit;

Faça um dump da base para importar no servidor slave (existe outro método para importar os dados com o comando LOAD DATA FROM MASTER;, mas enquanto os dados são replicados o servidor master fará um LOCK nas tabelas até a conclusão da replicação, portanto preferi esse método):

# mysqldump -u root -p –opt exampledb > exampledb.sql
Enter password:

Retire o LOCK das tabelas:

# mysql -u root -p
Enter password:

mysql> UNLOCK TABLES;
mysql> quit;

Com isso a configuração do servidor master está pronta, agora vamos acessar o servidor slave e criar o banco:

# mysql -u  root -p
Enter password:

mysql> create database exampledb;
mysql> quit;

Copie o dump gerado da base no servidor master (no meu caso utilizei o scp e o arquivo estava no home do root):

# scp root@servidor_slave:/root/exampledb.sql .

Importe o dump no servidor slave:

# mysql -u root -p exampledb < exampledb.sql
Enter password:

Agora devemos configurar o servidor MySQL para que ele seja um servidor slave:

# vim /etc/my.cnf

[mysqld]
server-id=2
master-host=192.168.0.100
master-user=example
master-password=senha_example
master-connect-retry=60
replicate-do-db=exampledb

E reiniciar o serviço (novamente, só precisa reiniciar o serviço):

# /etc/init.d/msyqld restart

Acesse o servidor slave e execute os comandos abaixo para ativar a replicação:

# mysql -u root -p
Enter password:

mysql> SLAVE STOP;
mysql> CHANGE MASTER TO MASTER_HOST=’192.168.0.100′, MASTER_USER=’example’, MASTER_PASSWORD=’senha_example’, MASTER_LOG_FILE=’mysql-bin.000001′, MASTER_LOG_POS=98;
mysql> START SLAVE;
mysql> quit;

OBS.: MASTER_LOG_FILE é o nome do arquivo de log (File) que foi exibido no comando SHOW MASTER STATUS no servidor master e MASTER_LOG_POS é a posição (Position) que foi exibida com o mesmo comando.

Verificando no log do servidor slave:

# tail -f /var/log/mysqld.log
—– inicio do log —–
090617 10:17:03 [Note] Slave SQL thread initialized, starting replication in log ‘mysql-bin.000001’ at position 98, relay log ‘/var/run/mysqld/mysqld-relay-bin.000001’ position: 4
090617 10:17:03 [Note] Slave I/O thread: connected to master ‘replica@192.168.0.100:3306’,  replication started in log ‘mysql-bin.000001’ at position 98
—– fim do log —–

Pronto! Provavelmente a replicação já deve estar funcionando, bastando realizar os testes no banco master e verificar se os dados estão sendo replicados no servidor slave.

Fonte: http://www.howtoforge.com/mysql_database_replication

Categories: Linux Tags: , ,