我正试图从位于slicehost(两个不同的托管公司)服务器上的php脚本连接到dreamhost上的mysql服务器。
我需要这样做,以便可以在slicehost将新数据传输到dreamhost。使用转储不是一个选项,因为表结构不同,我只需要传输一小部分数据(100-200条每日记录)
问题是我在slicehost上使用了新的mysql密码散列方法,而dreamhost使用了旧的方法,所以我得到

$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)

事实:
我需要继续在slicehost上使用新方法,并且我不能使用旧的php版本/库
数据库太大了,不能每天都用转储文件来传输
即使我这样做了,这些表也有不同的结构
我只需要每天拷贝一小部分(只需要当天的变化,100-200条记录)
由于表是如此不同,我需要使用php作为桥梁来规范化数据。
已经搜索过了
已经和两个支持人员谈过了
对我来说,更明显的选择是在dreamhost上开始使用新的mysql密码散列方法,但是他们不会更改它,我也不是root用户,所以我自己不能这么做。
有什么疯狂的想法吗?
作者:Volkerk Sugestion:
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>设置全局旧密码=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';

会是个好的开始吗?

最佳答案

是啊,那看起来像个大块头。如果没有主机的配合,没有更改密码格式或客户端库的能力,就没有很多选择。
老实说,我的第一选择是抛弃梦主人。这可能是很多工作,但如果他们将被困在使用旧的不兼容的东西,这将继续是有问题的。
如果这不是一个选择,那么联合自动化流程呢?您可以将切片主机端的数据导出到csv文件中,并将其转换为dreamhost所需的任何格式,然后将其上载到dreamhost服务器。您可以让dreamhost服务器上的cron脚本定期检查上传的文件并对其进行处理(确保在成功处理后移动或删除它)。

07-28 14:14