Acessando o MySQL remotamente

Como SEMPRE me bato com isso quando vou configurar um novo servidor resolvi documentar!

Edite o arquivo /etc/mysql/my.cnf e dentro de [mysqld] comente a linha:

#bind-address: 127.0.0.1

Entre no MySQL via terminal:

mysql -uroot -pmysql

E execute (onde 123 é a sua senha):

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123' WITH GRANT OPTION;
Query OK, 0 ROWS affected (0.00 sec)
 
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '123' WITH GRANT OPTION;
Query OK, 0 ROWS affected (0.00 sec)

Reinicie o MySQL:

sudo /etc/init.d/mysql restart

ou

service mysql restart

Adicione também uma regra no iptables para que seja permitido o acesso remoto na porta 3306 (se alterar a porta padrão do MySQL deve ser alterada a porta neste comando):

/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT

E é isso ai pessoal :)

Validando campos de data e hora no model do Laravel.

Neste post irei mostrar como validar campos de formulários com valores que contenham uma data e hora no framework Laravel, por exemplo, “04/03/2012 13:00:00″.

O PHP leva em conta sua definição da variável date.timezone do arquivo php.ini ou então o valor da definição do método date_default_timezone_set() para as funções de data do sistema, no caso do Brasil ficaria assim:

date_default_timezone_set('America/Sao_Paulo');

Primeiro devemos adicionar um método a classe “Validator” do Laravel em nome_do_seu_projeto/laravel/validator.php (recomendo adicionar após o método validate_required).

EDIT: O método usando o strtotime() do PHP parece não funcionar em alguns casos para nosso formato de data/hora, estou usando o método a seguir para validação:

// nao alterar o nome do metodo pois senao nao
// sera encontrado pelo validator do laravel.
protected function validate_datetime($attribute, $value)
{
	// separa data e hora
	$pieces = explode(' ', $value);
	if ( count($pieces) == 2 ) {
		$date_piece = $pieces[0];
		$time_piece = $pieces[1];
		// lista os dados de data e hora
		list($day, $month, $year) = explode('/', $date_piece);
		list($hour, $minute) = explode(':', $time_piece);
		// data eh valida?
		$date_is_valid = checkdate($month, $day, $year);
		// hora eh valida?
		$time_is_valid = false;
		if ( ($hour > -1 && $hour < 24) && ($minute > -1 && $minute < 60) ) {
			$time_is_valid = true;
		}
		// data e hora sao validos?
		if ( $date_is_valid && $time_is_valid ) return true;
	}
	return false;
}
// ### NAO RECOMENDADO ###
protected function validate_datetime($attribute, $value)
{
    if ( ! strtotime($value) ) return false;
    return true;
}

Desta forma podemos dentro do model do Laravel adicionar a validação da seguinte maneira.

$rules = array(
    'start_at'  => array('required', 'datetime'),
    'end_at'    => array('required', 'datetime'),
);
 
// mensagens personalizadas para os erros (opcional)
$messages = array(
    'start_at_required' => 'O campo "Data início" é obrigatório.',
    'start_at_datetime' => 'A data informada em "Data início" é inválida.',
    'end_at_required'   => 'O campo "Data fim" é obrigatório.',
    'end_at_datetime'   => 'A data informada em "Data fim" é inválida.',
);
 
$validator = Validator::make( Input::get(), $rules, $messages );
if ( $validator->valid() ) {
    // salvar dados da model!
}

Ainda é possível criar outros métodos de validação por exemplo para validar um CPF, telefone, etc.

Até mais!!

Desabilitando temporariamente a checagem de Foreign keys no MySQL.

Durante o processo de modelagem e teste de dados no MySQL as vezes queremos que a checagem de FK’s do MySQL não estivessem ali para inserção de dados e pequenas alterações. Podemos desabilitar esta checagem de uma forma muito simples e ativar novamente assim que o modelo/dados das tabelas estiverem ok.

/* desliga checagem de FKs */
SET foreign_key_checks = 0;
/* liga checagem de FKs */
SET foreign_key_checks = 1;
/* verificando o estado atual da opcao */
SELECT @@foreign_key_checks;

Importando arquivos grandes no MySQL

Importar arquivos muito grandes no MySQL sempre é uma batalha.
Uma das maneiras mais simples de se livrar dessa tarefa é usando o método abaixo.

Conectar no MySQL:

mysql -uUSUARIO -pSENHA -hHOST

Dentro do MySQL:

use NOME_DO_BANCO;

Após selecionar o banco que deseja importar os dados execute:

source /caminho/para/arquivo/dados.sql;

O MySQL irá começar a importar os dados do seu arquivo :-)

Como redefinir seu timezone no Ubuntu

Para redefinir seu timezone no Ubuntu será necessário reconfigurar o pacote tzdata, vamos lá:

dpkg-reconfigure tzdata

Após entrar com o comando acima via Terminal será apresentada uma tela, se você esta no Brasil assim como eu selecione “America” e na tela seguinte selecione “Sao_Paulo”.
A seguinte saída será apresentada:

root@li208-44:~# dpkg-reconfigure tzdata
Current default time zone: 'America/Sao_Paulo'
Local time is now: Wed Dec 28 14:27:47 BRST 2011.
Universal Time is now: Wed Dec 28 16:27:47 UTC 2011.

Agora iremos confirmar se a alteração foi feita com sucesso:

root@li208-44:~# date
Wed Dec 28 14:28:05 BRST 2011

Isso ai! Data e hora foram alterados com sucesso :)

Olá Mundo!

Olá a todos, começo aqui um blog sobre desenvolvimento mobile e web.
Meu nome é Cleber ou “Binho” e trabalho a quase 9 anos com desenvolvimento e administração de servidores. Pretendo colocar neste blog coisas que aprendo durante o dia-a-dia e assim ensinar e aprender. :)