回答編集履歴
4
回答を追記
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\."になってしまったのを修正
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
回答を追記
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
曖昧な文言を修正
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 権限を持つユーザーを作成できないようです。
|