我一直在执行从 4.0.24 到 5.6.12 的 mysql 迁移,并且实际上是使用 python 脚本完成的,以便在 mysql 的一次可爱更新破坏了我对旧服务器的身份验证时传输数据。
我使用的是 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.* 版本(文件)不再可以通过 mysql.com 通过brew 获得。
所以我得到的错误是这样的:
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 操作系统还不太熟悉,所以我不太确定这些软件包之一是如何相互配合的...我最好的猜测是,brew install mysql 既是服务器库又是客户端库,和服务;并且本地 pip install mysql-python 仅扩展了brew install...然后 virtualenv 将覆盖本地 mysql-python 安装。如果这是不正确的,请让我知道并解释(如果可能的话),也可能对我有帮助。
我确实找到了以下链接,但最终没有帮助:
- mysql-error-1064 (看起来方向是对的,但是没有说明具体如何实现。
有什么线索吗?预先非常感谢您。
最佳答案
自 5.6.7 起的 MySQL 版本默认启用 secure_auth
,这意味着如果您的 MySQL 用户密码使用预加密进行哈希处理,则 5.6.7+ 客户端将不允许您连接。 4.1方法。您说您是从 4.0.24 安装迁移的,因此您的 MySQL 用户密码肯定是使用 4.1 之前的方法进行哈希处理的。
使用 mysql
命令行工具时,您可以绕过此问题并使用 --skip-secure-auth
命令连接到 4.1 之前的数据库行选项。例如:
mysql -h 127.0.0.1 -u username -p --skip-secure-auth
不幸的是,无法在 mysql-python 中禁用 secure_auth
。
关于mysql 错误 2049 使用来自 mac 的旧(4-1-1 之前)身份验证连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18239699/