MySQLストレージエンジンの確認方法
テーブルごとに使用されているストレージエンジンを確認する方法です。
方法その1。
mysql> use information_schema; mysql> select table_name, engine from tables where table_schema = 'DB_NAME';
方法その2。
mysql> use DB_NAME; mysql> show table status;
なお、使用できるストレージエンジンの一覧を表示し、デフォルトで使用するストレージエンジンの確認などをしたい場合は、以下のコマンドを使います。
mysql> show engines;
エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド
- 作者: 奥野幹也
- 出版社/メーカー: 技術評論社
- 発売日: 2010/06/12
- メディア: 大型本
- 購入: 16人 クリック: 204回
- この商品を含むブログ (35件) を見る
【入門・初心者向け】Ansibleはじめました〜簡単なPlaybookの実行まで
EC2(Amazon Linux 2)上でやってみました。
Ansibleインストール
EPELレポジトリを有効にして、Ansibleをインストールします。
$ sudo yum --enablerepo=epel install ansible $ sudo yum install ansible $ ansible --version # 確認
Ansible実行テスト
ローカルを対象にAnsibleの実行テストをしてみます。
ひとまず、Ansible構成を作っていくディレクトリを準備します。
$ mkdir sandbox-ansible $ cd sandbox-ansible
Ansibleでは Inventory というものを定義することで、設定対象のホストを指定します。
ここでは inventories
ディレクトリを作成し、そこに dev
ファイルを用意します。
$ mkdir inventories $ touch inventories/dev
ファイル名ですが、設定先のホストがどのような役割なのかわかるようにすると良いと思います。
開発環境なら dev
で、ステージングを構築するなら staging
、本番DBサーバーを構築するなら db
などです。
今回はローカルを対象にするので dev
に以下のような記述をします。
[dev] localhost
IPアドレスで指定しても大丈夫です。
では、実行テストしてみます。
$ ansible all -i inventories/dev --connection=local -m ping
Ansibleはアクセス先のホストに対してSSH接続を行い、コマンドを叩きます。
ここではlocalhostが対象なので --connection=local
を指定することで、SSH接続をさせずに実行しています。
成功すると以下のように返ってくるはずです。
localhost | SUCCESS => { "changed": false, "ping": "pong" }
無事、実行テストはできました。
Playbookの作成
次はPlaybookを作っていきます。
$ touch dev.yml
Playbookはyaml形式で記述します。
ここでは、次のように記述してみます。
- hosts: dev vars: hello: "Hello Ansible!" tasks: - name: output message. debug: msg="{{ hello }}" - name: output inventory hostname debug: msg="Inventory hostname is {{ inventory_hostname }}"
中身の解説です。
まず hosts
は必須になります。グループを指定してあげましょう。
vars
を使うことで変数が定義でき、定義した変数は tasks
などで使用することができます。
tasks
では実行するタスクを記述します。
ここでは2つのタスクを実行しています。
name
でタスクに名前をつけることができます。
debug
はAnsibleに用意されているモジュールと呼ばれるものの1つで、実行中にメッセージを出力するモジュールになります。
Ansibleには多数のモジュールが用意されており、モジュールを使うことで、ファイルの作成、サービスの起動・停止、yumパッケージをインストールするなどの様々なタスクを実行できます。
今回作成したタスクは、自分で定義したhello変数の出力、それと、 inventory_hostname
というAnsibleに用意されているマジック変数を使ってInventoryに指定しているホスト名の出力を行なっています。
では、実行してみましょう。
ansible-playbook
コマンドを使ってPlaybookを指定し、実行します。
$ ansible-playbook -i inventories/dev --connection=local dev.yml
成功すると以下のように出力されます。
PLAY [dev] ************************************************************************************************************************************************************************************************* TASK [Gathering Facts] ************************************************************************************************************************************************************************************* ok: [localhost] TASK [output message.] ************************************************************************************************************************************************************************************* ok: [localhost] => { "msg": "Hello Ansible!" } TASK [output inventory hostname] *************************************************************************************************************************************************************************** ok: [localhost] => { "msg": "Inventory hostname is localhost" } PLAY RECAP ************************************************************************************************************************************************************************************************* localhost : ok=3 changed=0 unreachable=0 failed=0
簡単ではありますが、Playbookを実行できました。
次回は、本格的にサーバー設定をPlaybookに記述していきます。
GraphQLBundleを使って初めてのGraphQLサーバーを実装してみる
Symfony Advent Calendar 2018 16日目の記事です。
GraphQLはFacebookが開発しているAPIへの問い合わせで使われるクエリ言語です。
ここでは GraphQLBundle を利用して簡単なGraphQLサーバーを実装する方法について書きます。
そもそもGraphQLって何?というところについては、この記事ではあまり触れませんので、この辺りを読んでみると良いかもです。
GraphQLBundleのインストール
サクッとSymfonyアプリを作成、ビルトインサーバーを起動して http://127.0.0.1:8000/
にアクセスできることを確認しておきましょう。
※本記事中でのSymfonyアプリケーションのバージョンは4.2.1です。
$ composer create-project symfony/website-skeleton app $ cd app $ php bin/console server:run
ではGraphQLBundleをインストールします。
$ composer require overblog/graphql-bundle
途中に出てくる選択肢は Yes
で。
インストール後 http://127.0.0.1:8000/
にアクセスすると500エラーが返ってくるようになります。
{"error":{"code":500,"message":"Internal Server Error","exception":[{"message":"Could not found type with alias \"Query\". Do you forget to define it?","class":"Overblog\\GraphQLBundle\\Resolver\\UnresolvableException","trace":[{"namespace":"","short_class":"","class":"","type":"","function":"","file":"\/Users\/tomcky\/Work\/personal\/tmp\/graphql-on-symfony\/app\/vendor\/overblog\/graphql-bundle\/src\/Resolver\/TypeResolver.php","line":43,"args":[]}, ...
一旦ここで、エンドポイントをルートから http://127.0.0.1:8000/graphql/
に変更してみます。
エンドポイントを変更するには config/routes/graphql.yml
に prefix
の項目を追加します。
overblog_graphql_endpoint: resource: "@OverblogGraphQLBundle/Resources/config/routing/graphql.yml" # 以下を追加 prefix: graphql
これで http://127.0.0.1:8000/graphql/
がエンドポイントになり、ルートにアクセスすると再びウェルカムページが表示されるようになります。
GraphQLサーバーの実装
無事インストールが完了しましたが、まだサーバーは500エラーを返す状態なので、正常なレスポンスを返すGraphQLサーバーを実装していきます。
サーバー実装にあたり、まずはGraphQLの重要な要素であるスキーマを定義しなければなりません。
スキーマの定義
GraphQLBundleでのスキーマ定義はデフォルトでyamlで行うようになっていますが、graphqlのフォーマットで行えるように設定しておきます。
具体的には config/packages/graphql.yaml
を開き、 type: yaml
を type: graphql
に変更します。
overblog_graphql: definitions: schema: query: Query mappings: auto_discover: false types: - # 以下の箇所を修正 #type: yaml type: graphql dir: "%kernel.project_dir%/config/graphql/types" suffix: ~
それではスキーマを定義しましょう。
スキーマは config/graphql/types
に定義ファイルを作成して記述していきます。
GraphQLにおいてリソース取得のエントリーポイントとなる Query
型と、例としてリソースとなる Book
型を定義してみます。
Query
型の定義は config/graphql/types/query.types.graphql
を作成して以下のように記述します。
type Query { books: [Book]! }
そして Book
型の定義は config/graphql/types/book.types.graphql
を作成して以下のように記述します。
type Book { id: ID! title: String! author: String! }
これでスキーマの定義は完了です。
リゾルバの実装
スキーマは定義しました。
ですが、定義したスキーマのフィールドに合わせて実際のデータを返却する処理は未実装です。
そのような処理をするための関数(リゾルバ)を実装していきます。
まずは config/packages/graphql.yaml
を修正してリゾルバを指定します。
overblog_graphql: definitions: schema: query: Query resolver_maps: - App\Resolver\MyResolverMap # この一行を追加 mappings: auto_discover: false types: - type: graphql dir: "%kernel.project_dir%/config/graphql/types" suffix: ~
次に src/Resolver/MyResolverMap.php
を作成してリゾルバを実装します。
以下は、定義したスキーマに沿った固定値を返すだけの簡単なものです。
<?php namespace App\Resolver; use Overblog\GraphQLBundle\Resolver\ResolverMap; use Overblog\GraphQLBundle\Definition\Argument; use GraphQL\Type\Definition\ResolveInfo; class MyResolverMap extends ResolverMap { protected function map() { return [ 'Query' => [ self::RESOLVE_FIELD => function ($value, Argument $args, \ArrayObject $context, ResolveInfo $info) { return [ ['id' => 1, 'title' => 'Harry Potter and the Prisoner of Azkaban', 'author' => 'J.K. Rowling'], ['id' => 2, 'title' => 'The Lord of the Rings', 'author' => 'J.R.R. Tolkien'], ]; } ], ]; } }
これでリゾルバの実装は完了です。
curlでリソースを取得してみます。
curl 'http://127.0.0.1:8000/graphql/' --get --data-urlencode 'query={books{id, title, author}}'
{"data":{"books":[{"id":"1","title":"Harry Potter and the Prisoner of Azkaban","author":"J.K. Rowling"},{"id":"2","title":"The Lord of the Rings","author":"J.R.R. Tolkien"}]}}
取得できました。
試しに title
フィールドのみを取得してみます。
$ curl 'http://127.0.0.1:8000/graphql/' --get --data-urlencode 'query={books{title}}'
{"data":{"books":[{"title":"Harry Potter and the Prisoner of Azkaban"},{"title":"The Lord of the Rings"}]}}
良いですね。
GraphiQLの導入
curlで動作確認することはできますが、GraphQLのクエリを記述するのは辛いものがあります。
そこで GraphiQL
と呼ばれるGraphQL IDEを導入します。
※Graph"i"QLです。わかりづらい。。グラフィクルと発音するようです。
GraphiQL導入にはGraphiQLBundleをインストールすればOKです。
$ composer require --dev overblog/graphiql-bundle
インストールすると http://127.0.0.1:8000/graphiql
にアクセスできるようになります。
最後に
リゾルバは、配列でなくてもDoctrineのエンティティオブジェクトをそのまま返すこともできます。
もちろん、その場合は、エンティティのフィールドがスキーマ定義に沿っている必要があります。
本当はそこまで書きたかったのですが、ちょっと長くなりそうなので。。
本記事では、固定値を返すだけの非常に簡単なGraphQLサーバーの実装まででしたが、実際に固定値を返すだけで済むことは、ほぼないはずです。
また、リソース取得だけでなく更新するためのMutationも使う必要があるでしょうし、複数のリソース取得に対応するにはどのように実装するか考えなくてはいけません。
認証などの実装も考える必要があるでしょう。
その辺りについても、また書けたらと思っています(やる気が、でれば。。