作为一个新手,我正在尝试完成本教程:http://net.tutsplus.com/tutorials/python-tutorials/python-from-scratch-creating-a-dynamic-website/
我现在使用 brew install MySQL 并安装了此版本:mysql-5.6.10。我正在运行 python 2.7
当我尝试在终端中运行 mysqld 来启动服务器时出现此错误:
Davids-MacBook-Pro:~ David$ mysqld
2013-03-17 18:20:28 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2013-03-17 18:20:28 3818 [Warning] Can't create test file /usr/local/var/mysql/Davids-MacBook-Pro.lower-test
2013-03-17 18:20:28 3818 [Warning] Can't create test file /usr/local/var/mysql/Davids-MacBook-Pro.lower-test
mysqld: Can't change dir to '/usr/local/var/mysql/' (Errcode: 2 - No such file or directory)
2013-03-17 18:20:28 3818 [ERROR] Aborting
2013-03-17 18:20:28 3818 [Note] Binlog end
2013-03-17 18:20:28 3818 [Note] mysqld: Shutdown complete
答案1
我刚刚使用 Homebrew 安装了 MySQL(与您列出的版本相同)并遇到了与您类似的问题。
我会注意到我的 Homebrew 副本可能不健康;brew doctor
继续向我发出警告,特别是关于一些所谓的 MacPorts 或 fink 的安装,我计划在某个时候从头开始重新映像这个旧盒子。
话虽如此,我还是使用以下方法解决了这个问题:
mkdir /local/var/mysql
# From the `brew info mysql` command's output:
unset TMPDIR
mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp
(这只有三个命令;如果将它们粘贴到终端中,请忽略#注释)。
从那里我在一个终端中运行mysqld_safe --skip-grant-tables
,然后从另一个终端使用 连接到该服务器mysql -u root
。从那里我运行:
UPDATE mysql.user SET Password=PASSWORD('**MY_NEW_PASSWORD**') WHERE User='root';
FLUSH PRIVILEGES;
通过单击 Ctrl-C 退出服务器会话,然后我终止mysqld_safe
使用mysqladmin -u root -p shutdown
并通过 Homebrew 的链接重新启动 MySQL:mysql.server start
这似乎已经完成了工作。我不知道当我重新启动 Mac 时它是否会自动启动 MySQL;但我无论如何都不想这样。如果这对您有用,它应该足以让您进入教程本身。当然,每次您想要使用数据库时,您可能都必须打开一个终端并运行……如果您愿意,我可以让您自己mysql.server start
搜索如何添加它)。launchctl
请注意,运行部分mysqld_safe --skip-grant-tables
是“闯入”MySQL 数据库的一种方式,使您能够以“root”(MySQL 超级用户或管理员)的身份在本地连接,而无需知道旧密码。SO 上的其他帖子建议 Homebrew 应该为您设置目录并将初始密码设置为“new-password”。
我在此处展示的 UPDATE 命令是常规过程的一部分,任何 MySQL 管理员都会通过该过程强制恢复丢失了 root 密码的任何 MySQL 系统的密码。名为“mysql”的数据库存储了 MySQL 自己的管理表,其中的“用户”表包含“密码”和“用户”列。PASSWORD() 函数采用纯文本(您要输入的密码)并对其进行哈希处理...也就是说,它对类似于“校验和”的字符串/文本的数字编码执行一组复杂的数学运算。MySQL 将这些哈希存储在 mysql.user 的 Password 列中,而不是密码本身的纯文本中。
密码哈希处理是几乎所有操作系统、数据库系统以及大多数使用密码的其他系统和应用程序的一项功能。如果您最终编写 Web 应用程序,则很可能会使用某种哈希函数来存储和检查密码。
正如我所说,我使用该命令brew info mysql
来获取有关如何“修复” MySQL 安装的一些建议;如果它似乎没有按预期工作,您可以将该命令用于通过 Homebrew 安装的任何其他东西。
以下是我用来获得进一步帮助的另一篇 StackOverflow 文章:https://stackoverflow.com/questions/4359131/brew-install-mysql-on-mac-os
我故意过度解释了其中的一些细节,因为你表示你对这方面还很陌生。
(有一天,一些真正有经验的 SO 参与者会告诉我交叉链接到其他 SO 问题、答案和评论的首选方式)。