Acabei de instalar o mysql5, e como isso é sempre uma dor, observei o processo que segui. Isso foi feito no Leopard, mas imagino que o processo seja o mesmo no Snow Leopard e no Lion. Ele não responde a todas as perguntas originais, mas pelo menos é um guia.
Instalando o MySQL
Primeiro, instale o servidor mysql5 com:
sudo port install mysql5-server
Apenas instalando o
mysql5
não instala o servidor. Preste atenção na saída do console, ela inclui instruções para configurar macports. Você pode querer copiá-lo e colá-lo em um arquivo de texto. O seguinte é baseado nele.
Em vez de
mysql5-server
, você pode usar uma porta como mysql55-server
, mysql56-server
, mariadb-server
ou percona-server
para obter uma versão mais recente do mysql, ou um fork. Se você fizer isso, preste atenção na saída do console, pois as instruções a seguir são baseadas em mysql5-server
e precisará ser ajustado para usar os executáveis e caminhos corretos. Se esta for uma nova instalação, configure o banco de dados:
sudo -u _mysql mysql_install_db5
Isso gera algumas instruções genéricas, que não acho totalmente apropriadas para macports. Na minha opinião, a melhor maneira de carregar o mysql5 como um daemon é usar o método do macport:
sudo port load mysql5-server
Além de iniciar o mysql5, isso o carrega permanentemente - ele será executado na inicialização. Para parar isso mais tarde:
sudo port unload mysql5-server
Se você não quiser executá-lo como um daemon, poderá executá-lo na linha de comando:
sudo /opt/local/lib/mysql5/bin/mysqld_safe
Verifique se ele está sendo executado fazendo login na linha de comando:
mysql5 -u root -p
Por padrão, a senha está vazia, então basta pressionar enter quando solicitado. Para definir uma senha de root:
/opt/local/lib/mysql5/bin/mysqladmin -u root password 'correct horse battery staple'
Seguem instruções para configurar o macports php e a instalação nativa do php.
Configurar Macports PHP
Supondo que você já tenha o macports php instalado e em execução. Você precisa instalar o
php5-mysql
(ou algo como php54-mysql
dependendo de qual versão do php você está usando):sudo port install php5-mysql
Isso instala os drivers mysql, mysqli e pdo.
Agora olhe em seu
/opt/local/etc/php5
diretório, se você ainda não tiver um php.ini
copie o arquivo de configuração php.ini-development
ou php.ini-production
para php.ini
. Agora edite php.ini
e procure as linhas apropriadas para adicionar:pdo_mysql.default_socket=/opt/local/var/run/mysql5/mysqld.sock
e:
mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock
e:
mysqli.default_socket = /opt/local/var/run/mysql5/mysqld.sock
Se você não quiser configurá-los, você pode defini-los explicitamente em seu script php quando você se conectar.
Se você está tendo problemas para se conectar, você pode querer ver as outras configurações próximas e comparar com
php.ini-development
e php.ini-production
para ver o que foi alterado. Em seguida, use o script abaixo, ou algo semelhante para testar se você pode conectar com o php.
Configurar o sistema PHP
O php do OS X vem com suporte mysql e mysqli embutido (mas não pdo), então tudo que você precisa fazer é definir o soquete unix macport. A localização padrão é
/opt/local/var/run/mysql5/mysqld.sock
. Encontre o local correto em /etc/php.ini
(se você ainda não o tiver, copie-o de /etc/php.ini.default
) adicionar:mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock
e:
mysqli.default_socket = /opt/local/var/run/mysql5/mysqld.sock
Se você não quiser configurá-los, você pode defini-los explicitamente em seu script php quando você se conectar.
Script de teste
Aqui está um script php para verificar se ele pode se conectar. Obviamente, você normalmente não usará a conta root em seus scripts php, então você pode querer primeiro criar outra conta mysql para testar a conexão. A conexão PDO não funcionará para php nativo, pois não possui drivers PDO.
<?php
$username = 'root';
$password = 'correct horse battery staple';
/* Try mysql: */
$connection = mysql_connect('localhost', $username, $password);
if ($connection === FALSE) {
echo "Error connecting using mysql.\n\n";
echo "Error ".mysql_errno().": ".mysql_error()."\n\n";
}
else {
echo "Connected using mysql.\n\n";
mysql_close($connection);
}
/* Try mysqli: */
$connection = mysqli_connect('localhost', $username, $password);
if ($connection->connect_error) {
echo "Error connecting using mysqli:\n\n";
echo "Error ".$connection->connect_errno.": ".$connection->connect_error."\n\n";
}
else {
echo "Connected using mysqli.\n\n";
$connection->close();
}
/* Try pdo:
* Won't work for the version of php supplied with OS X. */
try {
$pdo = new PDO('mysql:host=localhost', $username, $password);
echo "Connected using PDO.\n\n";
$pdo = null;
}
catch(PDOException $e) {
echo "Error connecting using PDO:\n\n";
echo "Error ".$e->getCode().": ".$e->getMessage()."\n\n";
}