私はslicehost(2つの異なるホスティング会社)のサーバーにあるphpスクリプトからdreamhostのmysqlサーバーに接続しようとしています。これを行う必要があるのは、slicehostで新しいデータをdreamhostに転送できるようにするためです。テーブル構造が異なり、データの小さなサブセット(1日あたり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)
事実:
- 私はslicehostで新しいメソッドを使い続ける必要があり、古いphpバージョン/ライブラリを使用できません
- データベースが大きすぎて、ダンプを使用して毎日転送することはできません
- 私がこれをしたとしても、テーブルは異なる構造を持っています
- 毎日、その一部だけをコピーする必要があります(その日の変更のみ、100〜200レコード)
- テーブルが非常に異なるため、データを正規化するためのブリッジとしてphpを使用する必要があります
- すでにググった
- すでに両方のサポートスタッフと話し合った
私にとってより明白なオプションは、dreamhostで新しいMySQLパスワードハッシュメソッドの使用を開始することですが、それらはそれを変更せず、私はルートではないため、これを自分で行うことはできません。
ワイルドなアイデアはありますか?
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を実行することです。しかし、私はそれを行うためにSUPER特権が必要であり、彼らは私にそれを与えません
クエリを実行すると
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';
良いスタートになりますか?