在Snow Leopard下设置Macports mysql5

时间:2009-10-20 01:14:58

标签: mysql osx-snow-leopard macports

7 个答案:

答案 0 :(得分:13)

我自己刚安装了mysql5,因为这总是很痛苦,所以我注意到了我遵循的过程。这是在Leopard上完成的,但我想雪豹和狮子的过程是一样的。它没有回答所有原始问题,但至少它是一个指南。

安装Mysql

首先,使用以下命令安装mysql5服务器:

sudo port install mysql5-server

只安装mysql5不会安装服务器。

注意控制台输出,它包含设置macports的说明。您可能希望将其复制并粘贴到文本文件中。以下是基于它的。

您可以使用mysql5-servermysql55-servermysql56-servermariadb-server这样的端口代替percona-server,以获取更新版本的mysql,或叉子。如果这样做,请注意控制台输出,因为以下说明基于mysql5-server,需要进行调整才能使用正确的可执行文件和路径。

如果这是新安装,请设置数据库:

sudo -u _mysql mysql_install_db5

这会输出一些通用指令,我认为这些指令并不完全适用于macports。在我看来,加载mysql5作为守护进程的最佳方法是使用macport的方法:

sudo port load mysql5-server

除了启动mysql5之外,还会永久加载它 - 它将在启动时运行。要稍后停止:

sudo port unload mysql5-server

如果您不想将其作为守护程序运行,可以在命令行运行它:

sudo /opt/local/lib/mysql5/bin/mysqld_safe

通过在命令行登录来检查它是否正在运行:

mysql5 -u root -p

默认情况下,密码为空,因此只需在出现提示时按Enter键。设置root密码:

/opt/local/lib/mysql5/bin/mysqladmin -u root password 'correct horse battery staple'

设置macports php和本机php安装的说明如下。

设置Macports PHP

假设您已经安装并运行了macports php。您需要安装php5-mysql(或php54-mysql之类的内容,具体取决于您使用的是哪个版本的php):

sudo port install php5-mysql

这将安装mysql,mysqli和pdo驱动程序。

现在查看您的/opt/local/etc/php5目录,如果您还没有php.ini个配置文件,请将php.ini-developmentphp.ini-production复制到php.ini。现在编辑php.ini并搜索要添加的相应行:

pdo_mysql.default_socket=/opt/local/var/run/mysql5/mysqld.sock

mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock

mysqli.default_socket = /opt/local/var/run/mysql5/mysqld.sock

如果您不想配置这些,可以在连接时在PHP脚本中明确设置它们。

如果您在连接时遇到问题,可能需要查看附近的其他设置,并与php.ini-developmentphp.ini-production进行比较,看看有哪些更改。

然后使用下面的脚本或类似的测试,你可以用php连接。

设置系统PHP

OS X的php内置了mysql和mysqli支持(但不是pdo),所以你需要做的就是设置macport unix socket。默认位置为/opt/local/var/run/mysql5/mysqld.sock。在/etc/php.ini中找到正确的位置(如果您还没有,请从/etc/php.ini.default复制)以添加:

mysql.default_socket = /opt/local/var/run/mysql5/mysqld.sock

mysqli.default_socket = /opt/local/var/run/mysql5/mysqld.sock

如果您不想配置这些,可以在连接时在PHP脚本中明确设置它们。

测试脚本

这是一个用于检查它是否可以连接的php脚本。显然,您通常不会在php脚本中使用root帐户,因此您可能希望首先创建另一个mysql帐户来测试连接。 PDO连接不适用于本机php,因为它没有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";
}

答案 1 :(得分:4)

我自己也遇到了同样的问题。为了让我的MySQL工作,我只需要做

sudo chmod -Rf 777 /opt/local/var/db/mysql5

尝试做sudo -u _mysql mysql_db5失败了,但我可以这样做

mysqladmin -u root  password the_new_password

没有任何问题。

如果您不想在打开机器时自动启动MySQL,只需执行以下操作:

sudo launchctl unload -w /Library/LaunchDaemons/org.macports.mysql5.plist

然后启动/停止MySQL:

启动:

sudo /opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper start

车站:

sudo /opt/local/etc/LaunchDaemons/org.macports.mysql5/mysql5.wrapper stop

希望这有帮助。

答案 2 :(得分:2)

1)Hivelogic在从源头编译Snow Leopard的mysql方面有很棒的演练。实际上并不是那么困难,如果你亲自去做,你就会知道它在哪里。

2)你应该能够只运行sudo port uninstall mysql5。它可能会对你的依赖性大喊大叫。如果是这样,您必须先卸载它们。卸载MySQL应删除所有配置设置,包括密码。

3)mysqld.sock需要驻留在哪里以及我需要应用哪些文件设置才能使它与php5和apache2一起运行? mysqld.sock的位置不如它的路径。在php.ini文件中设置mysqld.sock的路径。如果你在/ opt / local / bin中有一个php.ini文件,那么你安装了php的macports版本。您可以使用该版本,也可以使用默认的Apple版本。无论哪种方式,您需要配置php.ini文件,以告诉您的PHP安装在哪里使用它。你的php.ini文件中应该有一行说

mysql.default_socket = <whatever>

如果不存在,您可以添加它。您应该将此行设置为等于mysqld.sock的位置。我看起来像这样:

mysql.default_socket = /Applications/MAMP/tmp/mysql/mysql.sock

您的Apache配置

4)我跑了&gt; sudo -u mysql mysql_install_db5。如果我再次运行它会让我搞砸?我运行了mysqladmin -u root密码'mypw',并收到一条错误消息,指出mysql无法通过套接字连接。这是否意味着我的密码现已设置?有没有办法告诉我?如果你无法连接到套接字,那么你的密码就没有设置。

5)密码语句的语法从博客变为博客。我的密码是'mypw'还是mypw(没有引号)? (我的密码实际上不是mypw)在命令行中不需要密码周围的引号。

答案 3 :(得分:2)

检查/ tmp是否为MacPorts mysql套接字。

如果你正在使用5个不同网站的提示来了解如何运行mysql而你会感到惊讶,你已经迷失了......好吧,我只是试着一次只关注一个网站然后退出在进入下一个之前所有的变化。

我认为你使用MacPorts mysql的唯一问题(你遇到了什么问题?)就是它有一个你不期望它的套接字并且它使用的是默认配置。这应该在MacPorts完成安装后解释。有关提示,请参阅${prefix}/share/doc/mysql5/和/或与developer list联系。

还要考虑联系端口的维护者;自从他们管理以来,他们可能最了解它。

答案 4 :(得分:1)

在命令行上使用的php.ini可能与apache使用的不同 你可以用它来检查 phpinfo.php的

<?php
    phpinfo();
?

做一个

php phpinfo.php | grep php.ini

如果显示

Configuration File (php.ini) Path => /opt/local/etc/php5

并且Daniel James的测试脚本回答(保存为testconnect.php)也失败了

然后您可能想要通过创建符号链接来修复:

/opt/local/etc/php5>sudo ln -s /etc/php.ini php.ini

之后,testconnect应该可以正常工作

php testconnect.php 
Connected using mysql.
Connected using mysqli.
Connected using PDO.

答案 5 :(得分:0)

我弄明白了这个问题。尽管Apache没有运行,但由于某些原因,Apache阻止了MySQL的运行(从而创建了套接字)。 (是的,奇怪吧?)在我运行安装之前,我发出命令停止apache,然后安装顺便进行。即使是现在,在我启动MySQL之前,我首先必须告诉Apache(它没有运行)停止。

只是为了记录,我知道它没有运行,因为我得到了 “httpd(没有pid文件)没有运行” 我没有在启动时自动运行或任何像这样的骨头废话。

我会尝试编写一个演练,这样就没有其他人必须通过这个BS了。

答案 6 :(得分:0)

当通过macports安装php5时,软件包不会自动带有mysql扩展,所以它无法通过php连接到mysql(但你可能可以通过命令行)。

让我们首先检查你的mysql是否正常运行:

mysqladmin5 -uroot -pYOURROOTPASSWORD ping

如果它还活着,您可以通过以下方式验证所有变量:

mysqladmin5 -uroot -pYOURROOTPASSWORD variables

您应该会看到“套接字”位置定义为

/opt/local/var/run/mysql5/mysqld.sock

使用macports在2分钟内安装缺少的组件......这是如何:

sudo port install php5-mysql

要将mysqlnd与本地MySQL服务器一起使用,请编辑 /opt/local/etc/php5/php.ini 并设置 mysql.default_socket,mysqli.default_socket和pdo_mysql.default_socket 到 /opt/local/var/run/mysql5/mysqld.sock

然后重新启动Apache类型:

sudo /opt/local/apache2/bin/apachectl -k restart

现在一切都应该正常运行。希望有所帮助。