MySQLのexplainメモ

MySQLのExplain叩くたび指標を忘れてしまうのでメモ。
ほとんど引用文です(一番下の参考参照)。まず自分の頭に定着させたいものを抜擢した感じです。

とりあえずexplainしたときに見る列

  • type
  • rows
  • extra

type:

ALL: フルテーブルスキャンされているので最高に遅い。
index: 一見するとインデックスが使われているような感じがする値だが、実はフルインデックススキャンされているということ。

rows:

行数が少ないほどいい

extra:

Using where: indexだけではwhereを解決できないことを示している
Using temporary: テンポラリーテーブルを作成することを示している。あまり良くない
Using filesort: レコードがクイックソートされていることを示す かなり良くない

もちろん後になればなるほど処理が重くなるので、出来るだけそのようなクエリはさけて1番目や2番目の実行計画になるようにすると良いわけである。
1番目や2番目の実行計画になるようにするには、次のような点に注意しなければいけない。
最も大切なことはWHERE句における検索条件とソートする対象のカラムを一つのテーブルに集中させることである。

表示されているとステキな値
Using index


他にも考慮すべきところ多々あると思うのですが、
少しずつ積み上げていこうと思います(毎度一気に詰め込もうとして結局全て流れてしまうので)

参考(引用元)

MySQLのexplainとかについてしらべたときのメモ
https://qiita.com/lastcat_/items/de7b530a94fbcf9ba646

explainした時の重要ポイント(実例つき)
http://www.24w.jp/blog/?p=250

漢(オトコ)のコンピュータ道
http://nippondanji.blogspot.com/2009/03/using-filesort.html

vimの使い方見直し

vimの復習
奇しくもvimconf当日(狙ったわけではない)

定期的に使い方は見直しているのだけど、繰り返さないと忘れたりして元の習慣に戻ってしまうので、
見直したいもの一旦整理

正規表現 

vim正規表現はややこしそうなので回避していたが、
vi使っているとき困ったので反省として(とはいっても自分はガッツリ正規表現する機会はあまりない。。)

# オプションの確認 (デフォルトはmagic)
:set magic?
/\(foo\|bar\)

# \v以降がvery magicとして扱われる (vary magicを使うとパターン検索が楽になる)
/\v(foo|bar)

nnoremap /  /\v

参考: Vimでパターン検索するなら知っておいたほうがいいこと
http://deris.hatenablog.jp/entry/2013/05/15/024932

ctrlSF

sublimeライクのgrep機能。

https://github.com/dyng/ctrlsf.vim

もともと入れていれていながら、以前試した際にあまり速度が出ずに使用を止めていたのだけど
最近試してみたらとても早い(gitに管理されているファイルを見ていたりする?マシンスペック?)
ので積極的に使っていきたい
(厳しかったら:ggrep 使おう)

特定の単語を数えたい( n:置換コマンドに置換させないオプション)

:%s/hoge//gn

参考 https://blog.kawa-xxx.jp/entry/20140511/1399818512

helpを積極的に読む

とはいっても用意されたhelpを闇雲に見るまでは今の所したくないので

参考: おすすめの :helpまとめ
http://cohama.hateblo.jp/entry/2013/07/28/235823

折りたたみ機能

自分はあまり使わないと思っていたけど
プラグインのhelpで使われているものあったので(開けなくて読めない)

za : 折りたたみの開閉

参考: vim標準機能の折りたたみを駆使して、.vimrcを整理しよう
https://qiita.com/jiro4989/items/12a41fb58cc42287092f

ブックマーク機能

以下のプラグインを使わせて頂いているのだけど
https://github.com/MattesGroeger/vim-bookmarks

ただ、このプラグインでマークしているのはよく使用しているファイル(たとえばconfigなど)で
作業中に一時的にマークしたい(たとえばサービス、モデルとかを往復するときなど)に使いづらかった
(一時的にマークしたいものと長期的にマークしたいものが混ざるので)。
のでvimのデフォルトのマークも併用して使用する(プラグインの方どうなっているかわからないけど挙動だけみるにかぶってなさそう)。
自分の用途的に基本的にグローバルでマークする形にしそう[A-Z]
かつ作業終わったら定期的に消していく

# mark一覧を表示する
:marks

# カーソル位置をmarkする
# m[a-zA-Z]

# マークを全消し
:delmarks!

参考 Vimのマーク機能、使い方まとめ
https://qiita.com/syui/items/442fd0905a1f2005c10e
TODO ここらへんいい感じにmap定義したい

map noremap

vimrcに定義しているのに説明できない(パクってきたものなので)のはよくないと思い
基本noremapでよさげ(プラグインで定義されたものはmap)

参考: 【図解Vim】mapとnoremap
https://cocopon.me/blog/2013/10/vim-map-noremap/

set nu 入れる

何かの記事を見て意図的に行数を表示していなかったのだけど以下の理由で設定変更
・helpがどれくらいあるか把握できる
・エラーの位置に飛びたい
・カウントするとき位置を把握できる(:%s/hoge//gn でそれぞれの位置の行数が把握できる。なんとなく把握しておきたい)

TODO (気が向いたときに調べる)

先読み後読み

http://d.hatena.ne.jp/unk_pizza/20140311/p1 https://qiita.com/mochizukikotaro/items/84f3ab2740b8efbe0dc6

クリップボード

たまに挙動で混乱する。どういうときに困るか忘れた。困ったときにまた確認 http://labs.timedia.co.jp/2014/09/learn-about-vim-in-the-workplace.html

ansible触ってみようとしたらvagrantのエラーにハマった(`nfs_export': wrong number of arguments (given 4, expected 5) )

ansible勉強しようとvagrant立ち上げようとしたら以下のエラーでハマった

/opt/vagrant/embedded/gems/2.1.2/gems/vagrant-2.1.2/plugins/hosts/bsd/cap/nfs.rb:11:in `nfs_export': wrong number of arguments (given 4, expected 5) (ArgumentError)`

その他にもいろいろ出たが、これだけが原因わからない。 調べてもそれっぽいのがこれしか出ない https://github.com/hashicorp/vagrant/issues/7655

vagrantとvitual boxを入れ直したらなおったらしいが自分の環境では直らず。。

試したこと

  • ansibleの設定ファイルの確認
  • vagrantfileのPrivate ipなどを変えてみる
  • vagrant global-statusで他に立ち上がっていないかチェック
  • Dockerを落とす
  • vagrant 入れ直し
  • vitualbox 入れ直し

結果~/.ssh/configをすべてコメントアウトしたら動いた (多分古い設定が邪魔していた)。

vagrant 立ち上げてansibleのプレイブックを適用してnginxを動かそうと試みるがつながらず、

あたり確認したが問題なさげ。 ipかぶっているのかと思い、一旦vagrant haltしてからprivate ip変えて立ち上げようとしたら また最初と同じエラーが(ip戻しても変わらず) ただ、気づかなかったがvagrant ssh で接続自体はできる。 かつnginxもつながった。

ただvagrant ssh ではいると以下のようなエラーがでるので、 仮想マシンは立ち上がったけど、何かがこけているっぽい? ただ一応ansible動かす環境はできているように見えるので一旦よかった (合間を見つけてエラーは解消したい)

sh: netsh: command not found
sh: cscript: command not found
It seems that you don't have the privileges to change the firewall rules. NFS will not work without that firewall
changes. Execute the following commands via cmd as administrator:
...

プレイブック適用した影響か、原因はよくわかっていないが切り分けのためにも saharaでvagrant 環境をロールバックできるようにしたほうがよさげ (今エラー出るやつも一旦box消していい気がするけどまた動かなくなったらと思うと怖いな。。)

https://qiita.com/muyuu/items/99df9135676f0f95f7e9

もともとはネットに転がってるプレイブックを探してさくっとlamp環境作ろうとしたのだけど全然うまく行かず 問題の切り分けに時間がかかってしまった(コツコツやったほうが近道だったぽい)。

f:id:addictionwhite:20180805191002p:plain

Vagrantd(CentOS7)でnginx 2

先日は静的ファイル(index.html)を表示させたので、phpを動かそうと思ったが思いの外はまった。
今回は勉強用に試しているだけだったので適当なバージョンのPHPをインストール

sudo yum -y install epel-release
wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
sudo rpm -ivh ./remi-release-7.rpm
sudo yum install --enablerepo=epel,remi-php70 php php-mcrypt php-mbstring php-fpm php-mysqlnd php-opcache php-apcu

nginxの設定修正
sudo vim /etc/nginx/conf.d/default.conf

location ~ \.php$ {
    #root html;
    root /var/www;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
    fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
    include fastcgi_params;
}

phpfpmの設定修正
sudo vim /etc/php-fpm.d/www.conf

;user = apache
user = nginx
;group = apache
group = nginx
# nginx と php-fpmを再起動し、設定を反映
sudo systemctl restart nginx
sudo systemctl restart php-fpm

/var/www/配下にindex.phpを作成

 <?php 
phpinfo(); 

http://192.168.33.10/index.php を叩くとphpinfoの画面でなく、index.phpファイルがダウンロードされる。
ここで原因がわからずはまる
実施したこと
* nginxのログファイルの権限を変える
* index.phpの権限を変える
* selinuxのチェック
* /etc/nginx/conf.d/default.conf , /etc/php-fpm.d/www.confの設定ファイルのチェック
(設定の誤り以外にもシンタックスエラーに一度気づかなかったのでチェックしておくこと
sudo systemctl status php-fpm.service (sudoをつけると詳細にエラーをだしくてれるっぽい)
nginx -t (こちらはsudo つけると正しく動くのにつけないとエラー出るケースが有ったのでつけないほうがいいかもしれない*権限系のエラー?よくわかっていない)
シンタックスエラーの状態で起動しようとすると結構分かりづらいエラーが表示されるので気をつけていたほうがよさそう

  • choromeで見ていた場合キャッシュで反映されない場合があるようなので別のブラウザなどで試す
  • nginxのerror.logを見る

    原因としては先日書いた
    /etc/nginx/nginx.confの設定のserverディレクティブが悪さをしていた(こいつをコメントアウトすればindex.phpが表示された)。
#       server {
#           listen        80;
#           server_name   test.example.com;
#           root          /var/www/;
#
#           location / {
#           }
#
#       }

無意識にあとから書いたディレクティブが上書きするものと思っていた。
nginx.confが最初に読み込まれる設定ファイル。これが他の設定ファイルを読み込む

include /etc/nginx/conf.d/*.conf;

新しい設定追記するときは
conf.d/default.confに追記するのが正しい。

以下のコマンドを叩くとincludeされたファイルを展開して設定ファイルの内容を1本の設定ファイルとして表示できる

 sudo nginx -T

参考

PHP - nginxサーバへphpファイルにアクセスするとダウンロードされてしまう(17285)|teratail

Vagrant + CentOS7 + nginx + PHP7 + php-fpm でFuelPHP1.8の仮想開発環境を構築する

[Sy] 【解決した】HomebrewでNginx + php-fpmの環境を作ろうとしたらPHPファイルがダウンロードされる | Syntax Error.

Vagrantd(CentOS7)でnginx

前々からやりたいと思いながらできていなかったので触り始めメモ。
いくらでも記事出るだろうけど、自分の忘備録用。

vagrantは簡単に動き見てみたいときに即興でできるのがいい。
ただ久々に触るとどこに何のVagrantfileがあったか忘れるので以下のコマンドで確認

vagrant global-status 

まずは静的ファイルを見れるようにしてみる。

nginx の導入(CentOSのデフォルトのリポジトリには入っていないとのこと)
CentOS7 に nginx導入

設定ファイル修正

 sudo vi /etc/nginx/nginx.conf

httpのディレクティブ内に以下を追記

        server {
            listen        80;
            server_name   static.example.com;
            root          /var/www/;

            location / {
            }

        }
     # 文法チェック
     sudo nginx -t
    # 起動
     sudo systemctl start nginx

/var/www配下に適当にidnex.htmlを作りアクセスするが繋がらない http://192.168.33.10/

nginxの方にもログが出ていなかったようなので selinuxの確認

$getenforce
Disabled

firawallを無効にすると表示された

    sudo firewall-cmd --add-service=http --permanent
    sudo firewall-cmd --reload

こう繋がらないとき当てずっぽうなのなんとかならないかな。

参考

runble1.com

Vagrant + CentOS7 + nginx + PHP7 + php-fpm でFuelPHP1.8の仮想開発環境を構築する

初プルリクとdockerメモ

他人のリポジトリにプッシュする場合はforkしてからでないといけない (もしくは権限をもらう) blog.qnyp.com

基本権限もらう形でやってたので、ちょっと混乱した。

また、今回docker-compose upでビルドした際にエラーが出力されたのだけど、 エラーの解決より再現に手こずった。

症状と対応は以下と同じなので割愛

E: Package 'libpng12-dev' has no installation candidate · Issue #1 · deskpro/deskpro-docker · GitHub

一度docker-compose.ymlを修正して、ビルドを通した後に もう一度エラーを再現しようとしても再現できず。 キャッシュまわりを疑ったりコンテナを削除したりしたけれども再現できず イメージを削除すると再現できた

docker images -aq | xargs docker rmi

イメージをベースにコンテナが生成されるらしいが、 ここらへんもう少し自分の中で整理したい

qiita.com