質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.13%

MySQLでInnoDBのTransaction機能とdesc文が非rootユーザ で正常に機能しません

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 368

hakurei

score 7

前提

プログラミング初心者です。
Python/Djangoを用いて趣味でWeb開発に挑戦しています。
データベース管理システムとしてMySQLを利用しています。

問題はタイトルの通りです。どちらも何か同じ原因に起因しているのではないかと感じたので、まとめさせていただきました。
MySQLのバージョンは8.0.12です。OSはmacOS Mojave10.14.1です。
以下をmy.cnfに書き、mysqld_safeでサーバを立てて、ログインしています。(user名とpasswordは伏せました)。

[mysqld]
bind-address = 127.0.0.1
character-set-server=utf8
default_authentication_plugin=mysql_native_password

[client]
database = TestProject
user = ****
password = *****
default-character-set = utf8

またgrantは`test_developer'と名付けたroleにTestProject.*についてallを振り、そのroleを上記のユーザ に振っています。

発生している問題1. transaction機能が使えない。

例えばmysqlにログインし以下のように

mysql> start transaction;
mysql> create table TransactionTest (id INT);
mysql> rollback;

このようにすると、rootユーザ ではcreateしたテーブルが消えます。rollbackがうまくいったからだと思います。ところが、これを上記の非rootユーザ としてログインした場合、rollbackしても"TransactionTest"テーブルが残ったままなのです。rollbackした際も、エラーも何もなく以下のように出ます。

Query OK, 0 rows affected (0.00 sec)

発生している問題2. description(desc)が効かない

これもタイトル通りで、rootはうまく機能するもののそうでないユーザ では機能しません。

rootでは

mysql> desc TransactionTest;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
1 row in set (0.01 sec)

非rootでは

mysql> desc TransactionTest;
Empty set (0.01 sec)

試したこと

https://dev.mysql.com/doc/refman/8.0/en/commit.html
こちらの公式リファレンスに、begin, begin work, set autocommitなどについて解説されていたのでそれらも試してみました。しかしそこで解説されているとおり、そもそもstart transactionした時点でautocommitなどは関係なくなるはずですし、実際何も問題は変わりませんでした。

stackoverflowでも調べてみたのですが、調べ方が悪いのか「autocommitの存在を知らない」「InnoDBをつかってない」のような初歩的なものしか、関連するものを見つけられませんでした。

describe文については全くお手上げです。

初歩的なことで申し訳ないのですが、お力添えいただきたく存じます。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

13.3.3 Statements That Cause an Implicit Commit
によるとcreate table のまえに Commit しちゃうから rollback が無効と読めます。
だとすると非rootの動作が正常でrootユーザの動作が問題かもしれません。
desc の問題もそれに付随するのかも

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/14 21:01

    コメントありがとうございます。リンク先を読ませていただきました。私が勘違いをしていました。申し訳ございません。rootでのcreate句も、再び確認したところrollbackされていませんでした。本当に確認不足で申し訳ないです。(descはやはり,rootでしかつかえませんでした)
    お二方ともコメント助かりましたが、リンク先の内容が非常に助かりましたので、ベストアンサーに選ばせていただきます。
    本当に申し訳ないです。

    キャンセル

+1

ほんとにrootでrollbackすればcreate tableした処理が無効になりますか?
もしそうならdesc TransactionTest;はemptyになるような気が・・・

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/14 20:58 編集

    コメントありがとうございます。
    非常にお恥ずかしいことなのですが私が勘違いをしていたようで、おっしゃる通りcreate句はrootでもrollbackされていませんでした。今後このようなことがないようにしっかりエラーの再現をとりたいと思います....本当に申し訳ございません。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.13%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる