一括りにデータベースのトランザクションと言っても,実はデータベースや設定によってトランザクションを複数走らせた時に,微妙に挙動が異なる場合があります。この違いは,データベースのACID特性のうちのIsolation(独立性)に関わる設定が違うため発生します。この設定はトランザクション分離レベルと言って,並列性やデータの整合性をどこまで求めるかによって適切に選ぶ必要があります。そこで今回は,MySQLでトランザクション分離レベルを変更する方法を紹介したいと思います。5.7の違いで紹介されたyumリポジトリを使用したインストールを利用しています。MySQLのバージョンは5.7.18を使用しています。7.3上で確認を行っています。現在のトランザクション分離レベルを確認する変更を行う前に,現在のトランザクション分離レベルが一体どのような設定になるかを確認してみましょう。確認するには,以下のコマンドを実行します。txはTransactionの略称です。READが設定されていることがわかります。トランザクション分離レベルを変更するトランザクション分離レベルを変更する際には,以下の3つの方法があります。TRANSACTION構文を使って変更するmysqldから起動する際にオプションを指定するmy.cnfに設定する続いて,それぞれの設定方法に関して説明をしていきます。TRANSACTION構文を使って変更します。この構文は以下のような構造をしています。この構文でGLOBALの変数を変更するためにはSUPER権限が必要なので注意してください。WRITEなども指定できますが,今回は説明を行いません。UNCOMMITTEDの4種類が選択できます。READが設定されています。GLOBALやSESSIONオプションは,その設定がグローバルに設定するものなのか,そのセッション限りなのかを指定します。指定がされなかった場合は,指定を行ったセッションで次回に発生するトランザクションに,指定したトランザクション分離レベルが設定されます。sec)SESSIONで設定した場合はコネクションを再接続した際に,GLOBALで設定した場合は再起動した時に,設定が戻ってしまうことに注意が必要です。設定の永続化を行いたい場合は,後述するオプションを指定して起動するようにするか,もしくはmy.cnfで設定をするようにしましょう。うっかり忘れてしまうと思わぬタイミングで足をすくわれる事があります。PERSISTというコマンドが追加されています。こちらを利用すると設定をコマンドラインから永続化することができます。このコマンドで設定した場合,mysqld-auto.cnfにJSONファイルとして書き出され,読み込む際に一番最後に読み込みが行われます。}起動時にオプションを指定をするCentOS7以降だとsystemctlコマンドを使って起動します。起動時に指定するOPTIONは,まとめてMYSQLD_OPTSというオプションに登録することで使えます。set-environmentオプションで設定を行います。TRANSACTION構文と異なることに注意が必要です。READ-UNCOMMITEDの4つです。mysqld.service再起動を行った後に起動後確認をすると,SERIALIZABLEになっています。unset-environmentコマンドを実行して再起動すると元の設定に戻ります。sec)以上からデフォルトのREPEATABLE-READに戻っていることがわかります。show-environmentコマンドで設定した環境変数が確認できます。show-environmentLANG=en_US.UTF-8MYSQLD_OPTS=--transaction-isolation=SERIALIZABLEPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/binこのように起動時にオプションとして設定することもできます。後述するように,my.cnfでも設定をする場合は混在させると見落としがちなので,設定する場合はどの様に運用するかをきっちりと決めて明文化してから設定を行ったほうが良いでしょう。my.cnfの豆知識[その2]に詳細な説明があるので,気になる方はそちらも合わせて参照してください。my.cnfで指定する場合は,以下のように[mysqld]セクションで設定を行います。READ-UNCOMMITEDの4つです。今回は/etc/my.cnf内に以下の設定を行いました。READ-COMMITTEDその後再起動を行い,確認した結果が以下のようになります。sec)設定がREAD-COMMITEDに変更されていることがわかります。まとめ今回はトランザクション分離レベルを変更する方法について紹介しました。トランザクション分離レベルの各設定の違いに関しては,次回以降で説明させていただきたいと思います。技術統括本部のエンジニア。最近はミドルウェア・インフラ周りのことも少しずつ学習しています。好きな戦法は四間飛車。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。