[GTER] Freeradius - MySQL replication

Rodrigo Brito rodrigobrito at bsd.com.br
Fri Dec 12 11:38:39 -02 2014


Olá Daniel,

Não sei qual o tamanho do banco, mas a maneira mais simples de resolver
isso é reiniciando os contadores de log binário, tanto do MASTER como do
SLAVE. Para isso é necessário fazer um DUMP do Master e restaurar no Slave.
Para reiniciar os contadores, utilize o:

SLAVE> reset slave;
MASTER> reset master;
(nota: este procedimento irá remover todos os arquivos binários criados até
o momento)

Logo restaure o banco no servidor SLAVE e se possível utilize o mysqlcheck
(ou myisamchk com o banco offline) em ambos os bancos para verificar a
consistência das tabelas. Reinicie o MySQL em ambos os servidores e esteja
certo de que as configurações de replicarão estão gravadas no arquivo
my.cnf para que o processo de replicação inicie automaticamente.

Novamente, este é um jeito casca grossa de retomar a replicação!!

Abs.


2014-12-12 10:05 GMT-02:00 Daniel Vasconcelos <vdaniel at tcheturbo.com.br>:

> E aí galera!
> Seguinte, to montando uma máquina para "espelhar" o meu servidor radius,
> porém, estou tendo um problema com o MySQL. As configurações do freeradius
> em si estão todas corretas (fiz testes de autenticação e funcionou
> perfeitamente). Porém, o meu problema começa quando eu estou replicando o
> banco de dados.
>
> Tenho o servidor MASTER e o SLAVE, sendo que:
> Master: rodando o serviço freeradius e consequentemente o banco de dados;
> Slave: rodando o serviço freeradius e consequentemente o banco de dados;
>
> A configuração do arquivo "/etc/mysql/my.cnf" em ambas as máquinas está
> assim:
>
>
> ## MASTER
> server-id       = 1
> log_bin         = /var/log/mysql/mysql-bin.log
> expire_logs_days        =10
> max_binlog_size         = 100M
> binlog_do_db              = radius
>
> ## SLAVE
> server-id               = 2
> log_bin                 = /var/log/mysql/mysql-bin.log
> relay-log               = /var/log/mysql/mysql-relay-bin.log
> log-slave-updates       = 1
> expire_logs_days        = 10
> max_binlog_size         = 100M
> binlog_do_db            = radius
>
> A partir disso, para que a replicação acontecesse, efetuei os seguintes
> procedimentos (partindo do princípio de que a questão de usuários já
> estejam configurados):
>
> No servidor MASTER:
> Travei as tabelas como somente leitura;
> Peguei a posição do arquivo bin (show master status;);
> Fiz a exportação da base para o servidor slave;
>
> No servidor SLAVE:
> Fiz a importação da base;
> Executei o comando no mysql: CHANGE MASTER TO MASTER_HOST='meuhost',MASTER_USER='replication',
> MASTER_PASSWORD='senha', MASTER_LOG_FILE='mysql-bin.000006',
> MASTER_LOG_POS=  74949498;
> Em seguida: slave start;
>
> A partir dai, tudo estava correndo bem, até que na manhã seguinte, cheguei
> no trabalho e fui verificar como estava a replicação.
> No MySQL do servidor slave digitei o comando: show slave status\G;
> Para minha felicidade estava tudo certo até então. Porém, mais tarde, fui
> verificar novamente o status, e me deparei com um erro:
>
> mysql> show slave status\G;
> *************************** 1. row ***************************
>                Slave_IO_State: Waiting for master to send event
>                   Master_Host: meuhost
>                   Master_User: replicator
>                   Master_Port: 3306
>                 Connect_Retry: 60
>               Master_Log_File: mysql-bin.000009
>           Read_Master_Log_Pos: 50811963
>                Relay_Log_File: mysql-relay-bin.000003
>                 Relay_Log_Pos: 244
>         Relay_Master_Log_File: mysql-bin.000001
>              Slave_IO_Running: Yes
>             Slave_SQL_Running: No
>               Replicate_Do_DB:
>           Replicate_Ignore_DB:
>            Replicate_Do_Table:
>        Replicate_Ignore_Table:
>       Replicate_Wild_Do_Table:
>   Replicate_Wild_Ignore_Table:
>                    Last_Errno: 1194
>                    Last_Error: Error 'Table 'radacct' is marked as crashed
> and should be repaired' on query. Default database: 'radius'. Query:
> 'UPDATE radacct           SET framedipaddress = '10.10.4.5',
> acctsessiontime     = '53400',              acctinputoctets     = '0'  <<
> 32 |                                    '40914351', acctoutputoctets    =
> '0' << 32 |                                    '362241158'           WHERE
> acctsessionid = '810033f5'           AND username        = 'jaguar'
>    AND nasipaddress    = '10.54.2.5''
>                  Skip_Counter: 0
>           Exec_Master_Log_Pos: 98
>               Relay_Log_Space: 725792285
>               Until_Condition: None
>                Until_Log_File:
>                 Until_Log_Pos: 0
>            Master_SSL_Allowed: No
>            Master_SSL_CA_File:
>            Master_SSL_CA_Path:
>               Master_SSL_Cert:
>             Master_SSL_Cipher:
>                Master_SSL_Key:
>         Seconds_Behind_Master: NULL
> Master_SSL_Verify_Server_Cert: No
>                 Last_IO_Errno: 0
>                 Last_IO_Error:
>                Last_SQL_Errno: 1194
>                Last_SQL_Error: Error 'Table 'radacct' is marked as crashed
> and should be repaired' on query. Default database: 'radius'. Query:
> 'UPDATE radacct           SET framedipaddress = '10.10.4.5',
> acctsessiontime     = '53400',              acctinputoctets     = '0'  <<
> 32 |                                    '40914351', acctoutputoctets    =
> '0' << 32 |                                    '362241158'           WHERE
> acctsessionid = '810033f5'           AND username        = 'jaguar'
>    AND nasipaddress    = '10.54.2.5''
>   Replicate_Ignore_Server_Ids:
>              Master_Server_Id: 1
> 1 row in set (0.00 sec)
>
> ERROR:
> No query specified
>
>
> Bom, estou preocupado, pois não tenho experiência com replicação do MySQL,
> mas li bastante sobre e fui surpreendido com esta inconsistência de
> informação. Alguém saberia explicar um possível motivo de isso ter
> acontecido? E a partir disso, como posso revidar? Devo fazer o processo de
> exportação/importação novamente?
>
> Atenciosamente
> --
> Daniel Vasconcelos
> IT Analyst
>
> --
> gter list    https://eng.registro.br/mailman/listinfo/gter
>



-- 
Atenciosamente,

Rodrigo Brito



More information about the gter mailing list