13

MySQL レプリケーション スレーブをセットアップしようとしていますが、実行に非常に苦労していますLOAD DATA FROM MASTER;。はい、非推奨であることは承知していますが、MySQL 5.1 を実行しているので、現時点では問題ありません。

何らかの理由で、MySQL はコマンドが拒否されたと言い続けますCREATEが、SHOW GRANTS のチェックではそうではありません。これをチェックしてください:

mysql> SHOW GRANTS;
+--------------------------------------------------------------------------------------------------------------------+
| Grants for replicator@%                                                                                            |
+--------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'replicator'@'%' IDENTIFIED BY PASSWORD '*ABCDEFABCDEFABCDEFABCDEFBLAHBLAHBLAHBLAH' |
+--------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> LOAD DATA FROM MASTER;
ERROR 1142 (42000): CREATE command denied to user 'replicator'@'localhost' for table 'aggregate'
mysql>

ここで私が変だと思ったのは、電話をかけるとLOAD DATA FROM MASTER、私がいると思い込んでいるのに'replicator'@'localhost'SHOW GRANTSと言っているということです'replicator'@'%'。念のため、 にも同じ特権を与えました'replicator'@'localhost'

mysql> SHOW GRANTS FOR 'replicator'@'localhost';
+----------------------------------------------------------------------------------------------------------------------------+
| Grants for replicator@localhost                                                                                            |
+----------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'replicator'@'localhost' IDENTIFIED BY PASSWORD '*ABCDEFABCDEFABCDEFABCDEFBLAHBLAHBLAHBLAH' |
+----------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

では、なぜこれがすべて台無しになっているのかについて何か考えはありますか? はい、私もFLUSH PRIVILEGES何度もしました。

アドバイスをいただければ幸いです。

4

4 に答える 4

19

今後の検索者のために、MySQL Workbench と phpMyAdmin を組み合わせて使用​​すると、このエラーが発生することがわかりました。テーブル リストから「SQL をコピー」すると、create ステートメントのテーブル名にスキーマ名が追加されます (およびその一部である可能性のある外部キーコマンド)。

スキーマ名を慎重に削除すると、この問題が解決しました。

例えば:

CREATE  TABLE IF NOT EXISTS `schema`.`table1` (
...blah blah blah...

CONSTRAINT `fk_user_id`
    FOREIGN KEY (`user_id` )
    REFERENCES `schema`.`table1` (`id` )
...blah blah blah...

次のように変更する必要があります。

CREATE  TABLE IF NOT EXISTS `table1` (
...blah blah blah...

CONSTRAINT `fk_user_id`
    FOREIGN KEY (`user_id` )
    REFERENCES `table1` (`id` )
...blah blah blah...
于 2013-01-30T07:59:27.737 に答える
13

次のことを提案したいと思います。

次回ログインするときに、次のクエリを実行します。

SELECT USER(),CURRENT_USER();

2 つの異なるユーザー名が表示される場合は、おかしなシナリオです

これは、MySQL 5.0 Certification Study Guide (ISBN 0-672-32812-7) の第 34 章または第 35 章にあります。

USER()ログインしようとしたものをエコーし​​ます

CURRENT_USER()mysql がログインを許可したものをエコーし​​ます。

127.0.0.1 を使用してレプリケータとして接続し、同じクエリを実行してみてください。

また、使用しているバージョンの mysql に必要なすべての列が mysql.user に存在することを確認することもできます。mysql.user テーブルを (MySQL 4 から MySQL 5、または MySQL 5.0 から 5.1 への移行から) アップグレードしなかった場合、mysql.user の列が同期していない可能性があります。

于 2011-03-10T05:31:07.783 に答える
5

奇妙なことに、単にクライアントを QUIT して再接続するだけで問題が解決しました! 明らかに、十分でFLUSH PRIVILEGESはありません。

その理由についてコメントがあればお聞きしたいです。FLUSH PRIVILEGESそれがまさにそれを行うと私はいつも聞いてきました。最初に としてログインし'replicator'@'%'、後で'replicator'@'localhost'アカウントを作成したことに何か関係があるのでしょうか?

いずれにせよ、このような不可解なアクセス許可の問題がある場合は、クライアントの再接続を試みる価値があると思います。

于 2011-03-10T02:03:06.600 に答える
1

MySQL Workbench Migration Wizard を使用してあるサーバーから別のサーバーに DB をコピーすると、新しい DB 名が元の名前と一致しないため、同じエラー メッセージが表示されました。新しいサーバーは、そのドメイン名をすべての DB 名の前に自動的に配置し、名前の不一致を作成します。したがって、DBxyzを新しいサーバーに転送するときにdomain、新しいDBを呼び出し、domain_xyzテーブル作成のたびに上記のエラーメッセージが発生しました。

この問題を解決するために、移行スキーマが生成された後に新しい DB 名を手動で編集し、 からxyzに変更しましたdoman_xyz

この方向に目を向けさせてくれたCamwynの反応への帽子のヒント。

于 2015-03-12T16:11:22.293 に答える