2

我一直在执行从 4.0.24 到 5.6.12 的 mysql 迁移,当对 mysql 的一次可爱更新破坏了我对旧服务器的身份验证时,实际上是使用 python 脚本传输数据。

我正在使用 mac os x 10.8.5。以前通过 brew 的 mysql 版本是 5.5.27、5.5.28、5.5.29 和 5.6.12。我以前的使用权限有问题,最后把所有这些都吹走了(在制作了 /usr/local 的副本之后)。现在我只有 mysql 5.6.13 ...我能够通过提交重新安装 5.6.12,但 5.5.* 版本(文件)不再通过 brew 通过 mysql.com 获得。

所以我得到的错误是:

machine:folder user$ python migrate.py
Traceback (most recent call last):
......
    return DBH( params )
  File "dbh.py", line 32, in __init__
    db=self.params.get('db')
  File "/Volumes/Data/Users/user/.virtualenvs/migrate/lib/python2.7/site-packages/MySQLdb/__init__.py", line 81, in Connect
    return Connection(*args, **kwargs)
  File "/Volumes/Data/Users/user/.virtualenvs/migrate/lib/python2.7/site-packages/MySQLdb/connections.py", line 187, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.OperationalError: (2049, "Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)")

请记住,我确实通过 pip 安装了 mysql-python;并尝试了 1.2.3 和 1.2.4(没有其他版本可用)

我正在使用包含站点包的 virtualenvwrapper ...还尝试在 mysql-python 上使用具有不同版本的 pip

我对 mac OS 还不是很熟悉,所以我不确定这些软件包中的一个是如何相互影响的……我最好的猜测是 brew install mysql 既是服务器库又是客户端库和服务;并且本地 pip install mysql-python 仅从 brew install 扩展...然后 virtualenv 将覆盖本地 mysql-python 安装。如果这是不正确的,请让我知道并在可能的情况下进行解释,这也可能对我有所帮助。

我确实找到了以下链接,但最终没有帮助:

  • mysql-error-1064 (这看起来是朝着正确的方向前进,但没有具体解释如何实现它。

任何线索?非常感谢您提前。

4

1 回答 1

3

自 5.6.7 以来的 MySQL 版本secure_auth默认启用,这意味着如果您的 MySQL 用户密码使用 4.1 之前的方法进行哈希处理,则 5.6.7+ 客户端将不允许您连接。您说您正在从 4.0.24 安装迁移,因此您的 MySQL 用户密码肯定是使用 4.1 之前的方法进行哈希处理的。

使用mysql命令行工具时,您可以绕过此问题并使用--skip-secure-auth命令行选项连接到 4.1 之前的数据库。例如:

mysql -h 127.0.0.1 -u username -p --skip-secure-auth

不幸的是,没有办法secure_auth在 mysql-python 中禁用。

于 2013-12-10T08:52:54.730 回答