Function⁠)⁠」を作ってみたいと思います。UDFは、文字通りユーザが自由にMySQLに関数を追加するための仕組みになっています。そこで、今回はMySQLのソースコードにバンドルされているコードを例に、CentOSでのコンパイルの方法やUDFの使い方を説明していきたいと思います。5.7の違いで紹介された、yumリポジトリを使用したインストールを利用しています。MySQLのバージョンは5.7.22を使用しています。8.0もGAになりましたが、今回は5.7を利用していきます。7.4上で確認を行っています。MySQLのソースコードをダウンロードする今回はyumでインストールしたMySQLを利用する予定ですが、コンパイルするUDFはMySQLのソースコードに入っているものを使います。そのため、まずはじめにMySQLのソースコードをダウンロードします。今回はwgetを使って以下のようにダウンロードしました。lsmysql-5.7.22.tar.gzダウンロードしたmysql-5.7.22.tar.gzファイルをtarコマンドを使って展開します。mysql-5.7.22.tar.gzmysql-5.7.22というディレクトリに展開されたことがわかります。コンパイルをしてみるそれでは、コンパイルをしてみましょう。今回はコンパイルをする際にmysql_configを利用します。mysql_configを使うmysql_configはクライアントをコンパイルするためのコマンドです。今回は、作成するUDFを今あるクライアントの設定と揃えるために利用します。mysql_configコマンドを何もオプションを付けずに実行をすると、オプションの一覧とそれに対応したオプションが表示されます。-m64という文字列が出力されます。-m64直接文字列を打ち込むのではなく、このコマンドを利用することによって、環境の違いなどを吸収することができるようになります。このコマンドはシェルスクリプトで実装されているため、シェルが実行できる環境に無いと利用できないことに注意してください。mysql-community-develを行ってMySQLの開発用のヘッダやツールをインストールしましょう。UDFをコンパイルするさて話を戻しまして、ダウンロードしたソースコードの中には、UDF用の例としてudf_example.ccというソースコードがmysql-5.7.22/sqlディレクトリに用意されています。こちらを前述のmysql_configと組み合わせて行います。sqlディレクトリに移動をしてファイルを確認してみましょう。udflocking_service_udf.ccsql_udf.ccsql_udf.hudf_example.ccudf_example.def今回利用したいudf_example.ccがいることが確認できます。続いてコンパイルを行います。-fPICここで利用している-sharedオプションと-fPICオプションは、共有ライブラリを作る時に使うオプションです。コマンドを実行してみて、udf_example.soが生成されていれば大丈夫です。udf_example.soudf_example.so上記のようにlsとgrepを組み合わせて、出力されたものが正しく存在するか、確認してみましょう。UDFを登録する作成した.soファイルを/usr/lib64/mysql/pluginに配置します。/usr/lib64/mysql/pluginその後に、UDFを使うために以下のようなコマンドをmysqlコマンドラインクライアントから実行します。今回作ったudfのファイル名といった構文になっております。今回コンパイルを行ったudf_example.ccには7個の関数が同梱されており、その中で今回は例としてlookup関数を取り上げてみます。sec)すると、lookup関数が登録されて使用するできるようになります。localhostのIPを引いてみましょう。sec)このように、ホスト名からIPを引くような関数を追加することができました。ここまでで、関数を新たに追加できるようになりましたが、追加したlookup関数を削除する場合にはどうしたら良いか、気になると思います。FUNCTION構文を利用します。sec)削除を実行した後で、もう一度lookup関数を利用しようとしてみます。selectedエラーになって関数がなくなっていることがわかりました。今回コンパイルを行ったudf_example.ccには、lookup関数以外にも、英単語の綴りから発音に近い文字列を出力するmetaphon関数、引数の平均値をとるmyfunc_double関数、引数の長さを測るmyfunc_int関数、シーケンス番号を発行することができるsequence関数、IPからドメインを引くためのreverse_lookup関数、集約関数のテスト用にavgcost関数が設定されており、それぞれ使うことができます。それぞれの方法について学びました。今回説明しきれなかったUDFのプログラムの構成や書き方などは、次に機会がある時に紹介していきたいと思っています。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します⁠。個別にライセンスが設定されている記事等はそのライセンスに従います。