teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

回答を追記

2016/09/03 16:15

投稿

KiyoshiMotoki
KiyoshiMotoki

スコア4791

answer CHANGED
@@ -79,3 +79,26 @@
79
79
  SHOW CREATE TABLE [テーブル名];
80
80
  ```
81
81
  [https://dev.mysql.com/doc/refman/5.6/ja/show-create-table.html](https://dev.mysql.com/doc/refman/5.6/ja/show-create-table.html)
82
+
83
+ ---
84
+ # 追記2
85
+
86
+ > 今までは、SQLインスタンスまるまるエクスポートしていたのですが、試しにコピーしたいデータベースのみをエクスポートするとエラーが吐かれませんでした。
87
+
88
+ なるほど。
89
+ 恐らく(information_schema など)MySQL が勝手に(w)作成するスキーマの中に含まれていた何らかのオブジェクトが、インポート時にエラーになっていたのかもしれません。
90
+
91
+ 「コピーしたいデータベースのみをエクスポートするとエラーが吐かれません」
92
+ であれば、それで問題ないかと思います。
93
+
94
+ ---
95
+ で、
96
+ > ただ、SQL文のエラー結果は変わりませんでした。
97
+
98
+ そうすると、こちらはインポート時のエラーとは別の問題だと考えられます。
99
+ 出力されるエラーメッセージを確認してみてください。
100
+
101
+ > PHPからmysqliでSQL文を実行するとエラーが発生するようです。
102
+
103
+ ということなので、mysqli で問題の SQL文を実行(`$mysqli->query()`または`mysqli_query()`)した直後に`$mysqli->error`または`mysqli_error($link)`で、エラーメッセージを取得できるはずです。
104
+ [http://php.net/manual/ja/mysqli.error.php](http://php.net/manual/ja/mysqli.error.php)

3

項番が勝手に"1\."になってしまったのを修正

2016/09/03 16:15

投稿

KiyoshiMotoki
KiyoshiMotoki

スコア4791

answer CHANGED
@@ -65,8 +65,8 @@
65
65
 
66
66
 
67
67
  > To export data to a MySQL dump file
68
- (中略)
68
+ > (中略)
69
- 5. Set the Format to SQL.
69
+ > 5. Set the Format to SQL.
70
70
 
71
71
  おそらく、"MySQL ダンプファイル"はmysqldump コマンドを実行した場合と全く同じか、同じような形式のデータになっているはずです。
72
72
  mysqldump コマンドで作成したデータも、実体は SQL 文ですので。

2

回答を追記

2016/09/03 14:42

投稿

KiyoshiMotoki
KiyoshiMotoki

スコア4791

answer CHANGED
@@ -33,4 +33,49 @@
33
33
  ---
34
34
  ちなみに、Cloud SQL では SUPER 権限を持つユーザーを作成できないようです。
35
35
  [https://cloud.google.com/sql/faq](https://cloud.google.com/sql/faq)
36
- > Google Cloud SQL does not support SUPER privileges,
36
+ > Google Cloud SQL does not support SUPER privileges,
37
+
38
+ # 追記
39
+
40
+ > ダウンロードしたSQLファイルで「SECURITY DEFINER」キーワードを探してみたのですが、存在が確認できませんでした。
41
+
42
+ そもそも、エクスポート元のインスタンスで VIEW を作成した記憶はありませんか?
43
+
44
+ 「SECURITY DEFINER」では、検索するキーワードとして長過ぎます。
45
+ スペースの数が違うだけでも、ヒットしなくなってしまいますので。
46
+
47
+ "DEFINER" または "INVOKER" だけで検索してみてください。
48
+
49
+ また、どうやらストアドプログラム (プロシージャー、関数、トリガー、およびイベント) も、ビューと同じように実行可能なユーザーを制限できるようです。
50
+ [https://dev.mysql.com/doc/refman/5.6/ja/stored-programs-security.html](https://dev.mysql.com/doc/refman/5.6/ja/stored-programs-security.html)
51
+ > すべてのストアドプログラム (プロシージャー、関数、トリガー、およびイベント) とビューには、MySQL アカウントを指名する DEFINER 属性を含めることができます。
52
+
53
+ 念のため、こちらも含まれていないか、確認してみてください。
54
+ それぞれの確認方法は、「MySQL プロシージャー 一覧」などで検索すると分かると思います。
55
+
56
+ ---
57
+ > Cloud SQLでデータベースをインポートする際は、コマンドではなく管理画面でインポートボタンを押すことで実行するので「mysqldump コマンドでインポートするデータを作成している。」については問題ないと思います。
58
+
59
+ マニュアルによると、
60
+ Cloud SQL では、エクスポートするデータの形式は"MySQL ダンプファイル"または"CSV"のいずれかを選択でき、
61
+ エクスポートする際、フォーマットに"SQL"を指定すると、"MySQL ダンプファイル"となるようです。
62
+
63
+ [https://cloud.google.com/sql/docs/import-export/exporting](https://cloud.google.com/sql/docs/import-export/exporting)
64
+ > Decide what file type you are creating: a MySQL dump file or a CSV file.
65
+
66
+
67
+ > To export data to a MySQL dump file
68
+ (中略)
69
+ 5. Set the Format to SQL.
70
+
71
+ おそらく、"MySQL ダンプファイル"はmysqldump コマンドを実行した場合と全く同じか、同じような形式のデータになっているはずです。
72
+ mysqldump コマンドで作成したデータも、実体は SQL 文ですので。
73
+
74
+ ---
75
+ それでも解決できない場合、可能であれば、実行に失敗する SQL文(どれか1つで結構です)の**全文**と、その SQL文がアクセスしている**全ての**テーブルのテーブル定義を質問に追記してください。
76
+
77
+ テーブル定義は、以下の SQL を実行すれば分かります。
78
+ ```sql
79
+ SHOW CREATE TABLE [テーブル名];
80
+ ```
81
+ [https://dev.mysql.com/doc/refman/5.6/ja/show-create-table.html](https://dev.mysql.com/doc/refman/5.6/ja/show-create-table.html)

1

曖昧な文言を修正

2016/09/03 14:40

投稿

KiyoshiMotoki
KiyoshiMotoki

スコア4791

answer CHANGED
@@ -27,7 +27,8 @@
27
27
 
28
28
  で、手元の環境(MySQL5.7)で、以下のような現象となることが確認できました。
29
29
  - DEFINER を明示せずビューを作成しても、mysqldump でエクスポートすると、ダンプファイル内では上述の 'DEFINER=' が明示される。
30
- - SUPER 権限を持っていないユーザーで自分以外のユーザーを DEFINER に指定しようとすると、ご質問のエラーメッセージが表示され、そのビューの作成**だけ**がスキップされる。
30
+ - SUPER 権限を持っていないユーザーで自分以外のユーザーを DEFINER に指定しようとすると、ご質問のエラーメッセージが表示される。
31
+ - ダンプファイルのインポートで↑の操作を行なった場合、そのビューの作成**だけ**がスキップされる(その他のテーブルは正常に作成される)。
31
32
 
32
33
  ---
33
34
  ちなみに、Cloud SQL では SUPER 権限を持つユーザーを作成できないようです。