1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MySQL Shell をつかってますか?

Last updated at Posted at 2025-12-13

この記事は 株式会社カオナビ Advent Calendar 2025 シリーズ1の13日目です。

MySQL Shell をつかってますか?

MySQL Shell というツールをご存知でしょうか?
最近は認知度があがってきたかもしれませんが、使っている人はまだそれほど多くないのではないでしょうか。

MySQL Shell は従来の mysql コマンドのようにSQLを実行できるだけではなく、いろんなことができるようになっていて、さらにプラグインで拡張できるようになっていて、とても多機能なものとなっています。

この「いろんなことができるようになっている」というのが学習しづらい原因になっているのでは?と今回いろいろ調べていて思いました。

今回も含めて3回にわけて、MySQL Shell でなにができるかを見ていこうと思います。

どういう用途で利用するものなの?

MySQL Shell ですが、以下のような用途で利用することができます。

  • SQLの実行(これは従来の mysql コマンドと同様のことができる)
  • AdminAPI を利用した InnoDB クラスターの操作
  • X DevAPI を利用して MySQL をドキュメントストアとして利用する
  • JavaScript もしくは Python で書かれた処理を実行することができる
  • JavaScript もしくは Python で書かれたプラグインで機能拡張することができる

このように MySQL Shell は単なるコマンドというよりも、名前の通りシェルとしていろんなことを実行することができる環境となっており、このために掴みどころがないように見えてしまう原因ではないかなと思ってます。(正直マニュアルもめちゃくちゃわかりずらい...)

このような MySQL Shell ですが、おそらく一番多い利用用途は、データベースのダンプ/リストアに利用するということではないかなと思っています。

データベースのダンプ/リストアといえば、以前から mysqldump コマンドがありますが、mysqldump コマンドのマニュアルページには以下のような注意書きが書かれています。

mysqldump — データベースバックアッププログラム

ヒント
複数のスレッド、ファイル圧縮、進捗情報の表示、および Oracle Cloud Infrastructure Object Storage ストリーミングや MySQL データベースサービス 互換性チェックおよび変更などのクラウド機能で並列ダンプを提供する MySQL Shell dump utilities の使用を検討してください。 ダンプは、MySQL Shell load dump utilities を使用して MySQL Server インスタンスまたは MySQL データベースサービス DB システムに簡単にインポートできます。 MySQL Shell のインストール手順は、ここにあります。

従来から利用されている mysqldump はマルチコアの環境で効率よく実行を行うことができないため、より速度を求める場合は MySQL Shell の利用が勧められています。

ここで勧められているから MySQL Shell のマニュアルをみようかと思って見に行ったら、いろんなことができるツールでどっから手を付けたらいいかわからない、みたいなことになり、面倒になって mysqldump を使い続けているって人もいるんじゃないかなと。(私はそうでした...)

というわけで、MySQL Shell ってそんなにめんどくさいものじゃないよってことをみていきましょう。

インストール方法

各環境で提供されているパッケージインストーラー(aptやbrew等)でインストールするのが一番手っ取り早いと思います。

今回、WSL2 の Ubuntu 24.04 環境で試したのですが、以下のような落とし穴がありました。

  • 素直に sudo apt install mysql-shell でインストールしたら、JavaScriptモードが利用できなかった

もしかしたら Ubuntu 特有の問題かもしれませんが、普通にインストールしたら Pythonモードは起動できましたが、JavaScriptモードは「JavaScript is not supported.」と表示されて利用できませんでした。(ディストリビューションで配布されているパッケージは JavaScriptモード OFF でビルドされているのかもしれません)

仕方がないので、Oracle のパッケージを利用することにしました。

上記のURLで MySQLバージョン、OS、OSバージョンを選択して以下のdebパッケージを入手してインストールしました。

  • mysql-shell_8.4.7-1ubuntu24.04_amd64.deb
$ sudo dpkg -i mysql-shell_8.4.7-1ubuntu24.04_amd64.deb

(注意) 接続する MySQL サーバーのバージョンは 8.0.44 ですが、MySQL Shell は 8.4 のものを使います。(理由は次回説明します)

起動方法

MySQL Shell は SQL/JavaScript/Python の3つのモードがあります。3つのモードでの起動方法を説明します。

SQLモード

--sql を引数につけて起動します。

接続後のプロンプトが MySQL localhost:33060+ ssl SQL > というように最後が SQL になります。

SQLモード

JavaScriptモード

--js を引数につけて起動します。

接続後のプロンプトが MySQL localhost:33060+ ssl JS > というように最後が JS になります。

JavaScriptモード

Pythonモード

--py を引数につけて起動します。

接続後のプロンプトが MySQL localhost:33060+ ssl Py > というように最後が Py になります。

Pythonモード

SQLを実行するには

SQLを実行するには3通りの方法があります。

JavaScript/Pythonモードの状態でSQLを発行する

JavaScriptモード/Pythonモードの状態でも、 \sql (SQL文) とすればSQLを実行できます。

JavaSriptモード/PythonモードのままSQL実行

SQLモードで起動する

すでに説明したように起動時に --sql をつけて起動すると、SQLが実行できる状態で起動します。

SQLモードで起動

JavaScript/PythonモードからSQLモードに切り替える

SQLモードで起動していなくても以下のように \sql と入力するとモードを変更できます。(\js\py と入力することによりそれぞれのモードに切り替えることができます)

モードの切り替え

上記の2つの方法でSQLモードにしておけば mysql コマンド同様にSQLを実行することができます。

SQL実行

SQLモードを利用すれば、従来 mysql コマンドでやっていたことが同じようにできますが、そのような使い方ならば mysql コマンドをつかっておけばことたりるので、わざわざ MySQL Shell を利用する必要はありません。

MySQL Shell を利用する利点を活かすには JavaScript モードもしくは Python モードで拡張された機能を利用することになります。

...がここまですでにそこそこの分量になってしまったので、ダンプ/リストアのやり方は 株式会社カオナビ Advent Calendar 2025 シリーズ3の17日目の記事で紹介しようと思います。

最後に

今回 MySQL Shell についていろいろ調べて思ったのは、やっぱりコマンドはそれぞれ単一の機能を提供する形にしたほうがわかりやすいなということでした。

Unixの哲学であるシンプルなコマンドをパイプをつなげて望んだ結果を作る、ってのがコマンドラインで作業するにはやりやすくて、MySQL Shellのようにいろんなことができるものを提供するってのはちょっと方向性に違和感があるなぁと個人的には思ってしまいました。

実際、マニュアルをみても正直わかりやすくはなっておらず、このあたりが認知度および利用が高まらない原因じゃないかなと思いました。

ただし、MySQL Shell を利用したダンプ/リストアは従来の mysqldump に比べると並列処理ができるので処理が早く終るという利点はあるので、積極的に使っていきたいとは思ってます。次回以降でそのあたりのベンチマークも取ってみようと思ってます。

株式会社カオナビでは一緒に働く仲間を募集しています。カジュアル面談も行っていますので、ご興味がある方は気軽にお声がけください。

カオナビ エンジニア採用

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?