我正在尝试从位于slicehost(两个不同的托管公司)的服务器中的php脚本连接到dreamhost上的mysql服务器。我需要这样做,以便可以将slicehost上的新数据传输到dreamhost。使用转储不是一种选择,因为表结构不同,我只需要传输一小部分数据(每日记录100-200条),问题是我在slicehost和dreamhost上使用了新的MySQL密码哈希方法使用旧的,所以我得到
$link = mysql_connect($mysqlHost, $mysqlUser, $mysqlPass, FALSE); Warning: mysql_connect() [function.mysql-connect]: OK packet 6 bytes shorter than expected Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot connect to MySQL 4.1+ using old authentication Warning: mysql_query() [function.mysql-query]: Access denied for user 'nodari'@'localhost' (using password: NO)
事实:
对我来说,更明显的选择是在dreamhost上开始使用新的MySQL密码哈希方法,但他们不会更改它,而且我不是root用户,所以我自己无法做到这一点。
有什么好主意吗?
通过VolkerK建议:
mysql> SET SESSION old_passwords=0; Query OK, 0 rows affected (0.01 sec) mysql> SELECT @@global.old_passwords,@@session.old_passwords, Length(PASSWORD('abc')); +------------------------+-------------------------+-------------------------+ | @@global.old_passwords | @@session.old_passwords | Length(PASSWORD('abc')) | +------------------------+-------------------------+-------------------------+ | 1 | 0 | 41 | +------------------------+-------------------------+-------------------------+ 1 row in set (0.00 sec)
现在显而易见的事情是运行mysql> SET GLOBAL old_passwords = 0; 但是我需要超级特权才能做到这一点,他们不会给我
如果我运行查询
SET PASSWORD FOR 'nodari'@'HOSTNAME' = PASSWORD('new password');
我得到错误
ERROR 1044 (42000): Access denied for user 'nodari'@'67.205.0.0/255.255.192.0' to database 'mysql'
我不是根…
dreamhost支持人员坚持说,问题出在我的头上。但是他说他将运行我告诉他的任何查询,因为它是一台私有服务器。因此,我需要准确地告诉这个人要运行什么。所以,告诉他跑
SET SESSION old_passwords=0; SET GLOBAL old_passwords=0; SET PASSWORD FOR 'nodari'@'HOSTNAME' = PASSWORD('new password'); grant all privileges on *.* to nodari@HOSTNAME identified by 'new password';
会是一个好的开始吗?
是的,那看起来像个强硬派。没有主机的合作,也没有更改密码格式或客户端库的能力,您将没有太多选择。
老实说,我的首选是抛弃Dreamhost。这可能是很多工作,但是如果它们将被使用旧的不兼容的东西卡住,它将继续成为问题。
如果不是这种选择,那么联合自动化流程又如何呢?您可以将Slicehost端的数据导出到CSV文件中,并将其压缩为Dreamhost所需的任何格式,然后将其上传到Dreamhost服务器。您可以在Dreamhost服务器上使用cron脚本,定期检查上传的文件并进行处理(确保在成功处理后将其移动或删除)。