しゅがーブログ

技術ネタとか書いていけたらな…

MongoDB 使い方

MongoDBとは

NoSQLと言われているデータ管理ツールです。

コマンドとか

SQL

SELECT * FROM hoge_table;

MongoDB

db.hoges.find()

正規表現

「/」(スラッシュ)を使いたい場合

db.getCollection('pages').find({path :{$regex:"tksugar/hogehoge")

dumpとresotre

hogehogeDB SCPやCyberduckを利用するとサーバ間でdumpファイルを簡単に移動ができます。

mongodump --host localhost --db hogehoge
mongorestore -v --db crowi dump/hogehoge

使い方さえわかれば意外と単純です。

PostgreSQL pg_dump

テーブル単位でのdumpのとり方についてまとめていきます。

productionとlocalで同期させるいい方法はないものか・・・
依存関係があまり無いテーブルのリストア方法

テーブル単位のバックアップ

例)
DB名   :fugaDB
テーブル名:user_xxxxxx
ロール名 :hogehoge
サーバIP :54.209.XX.XX

pg_dump -v -h 54.209.XX.XX -d fugaDB -U hogehoge -W -t user_xxxxxx > user_xxxxxx.dump

output file : user_xxxxxx.dump

各種オプション

  • -h:ホスト名
  • -d:データベース名
  • -U:ユーザ名
  • -W:パスフレーズ省略
  • -t:テーブル名

詳細は psql pg_dump

テーブルの復元

取得したテーブルをlocalにrestoreするためにまずlocalのテーブルを削除します。
psqlコマンドでfugaDBを指定してログインします。
その後SQLを発行します。

DROP TABLE hogehoge;

テーブルの削除が完了後、psqlコマンドでデータベース名とアウトプットしたdumpファイルを指定して実行します。

psql -d hogehoge -f user_xxxxxx.dump

依存関係が複雑ではなければこれで問題ないはず・・
複数のテーブルを扱っていて更新頻度が高くい場合などシェルスクリプトにまとめて実行すると楽です。

awsとかsshとか

結構期間が空いてしまいましたが、久しぶりに更新しにきました。

今まで使ったことのなかったAWSを仕事で使うようになったので色々まとめていきます。

改めてAWSの種類が多いと困惑しながらも、実際に触るようになったサービス

使ってるAWSサービス

  • EC2 Amazon Elastic Compute Cloud
    • production、develop、test環境を各サービスごとに設置
  • S3 Amazon Simple Storage Service
    • データをバケットごとに設置
  • RDS Amazon Relational Database Service
    • サービスによってはEC2でDBサーバを建てずこちらを使用
  • IAM AWS Identity and Access Management

などメジャーなものばかり使用しています。

その他にも今までネットワークが畑だったので色々新鮮です。

SSH config

Host xxx_production
HostName xx.yy.zz.0
user hogehoge
port xxxx
identityfile ~/.ssh/xxxx/xxxxxxxx.pem
ServerAliveInterval 60

ネットワーク機器でのSSHはよくやっていたのですが、UnixからのSSHはあまりやったことがなかったのでまとめてみました。
基本的にconfigに記述しているのは上記の項目です。

  • Host : 任意の接続名(好きなもので)
  • HostName : Public DNSかPublic IP
  • user : サーバのログインユーザ(default ec2-user)
  • port : SSH接続用ポート番号(default 22)
  • identityfile : サーバ接続用の秘密鍵あるPATHを指定
  • ServerAliveInterval : Keep Aliveの指定(60秒ごとに生きていることをサーバへ報告)

だいたいこんな感じで設定しています。
一つのファイルに複数の接続先が書けますし、他にも色々とオプションがあるので気になった方はぜひ試してみてください。

とりあえず、今回は以上

Rails PostgreSQL

Multicolumn(複合インデックス)を作成した時のこと

環境

設定

migrationファイルに以下を記述

add_index :xxxxxxxxxxx_xxxxxxx, [:xxxxxxxx_id, :xxxxxxxxxx_id]

Railsでよくあるindexの追記設定です。

記述後のmigrate

bundle exec rake db:migrate:up VERSION=xxxxxxxxxxxxxxxxxxxxxxxxx

上記コマンドでrailsのmigrateを実行
特にエラーも出力されず、無事にmigrationが完了

indexが無事にできているか確認

SELECT tablename, indexname FROM pg_indexes;
select * from pg_indexes where indexname = 'インデックス名';

上記コマンドを実施しても追加したはずのindexが表示されず…

解決方法

検索しても事例が出てこなく、色々試していくうちに…

PostgreSQlの識別子の長さは63バイトまでと判明(エェ…
実際に自動生成される文字数を数えて見るとオーバーしてました。

https://www.postgresql.jp/document/9.2/html/sql-syntax-lexical.html

今回はたまたまテーブル名とカラム名が長くうまく生成されなかったみたいです。
migrate実行時にエラー出すとかこけて欲しかった。
オプションで:nameを指定して63バイト以内に指定しましょう。

dein.vim設定メモ

vimプラグイン管理

プラグインの管理はNeoBundleがメジャーだったらしいのですが、それに変わるdein.vimと言われる管理ツールがあるので導入してみました。

公式URL

導入プラグイン

  • unite.vim

  • neomru.vim

  • molokai

  • vim-indent-guides

  • nerdtree

  • ctrlp.vim

  • neosnippet

  • neosnippet-snippets

  • vim-endwise

Nginxの色々

Nginxにアプリケーションをデプロイしてみようかと思い、インストールしたので設定についてメモっておきます。

Nginxのインストール 通常のyumインストールでは古いバージョンがインストールされるため
まず、以下ファイルを作成し、レポジトリの指定を変更します。
ファイル:/etc/yum.repos.d/nginx.repo

———-nginx.repo———-
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/6/$basearch/
gpgcheck=0
enabled=1
-————————————
※使用しているDistributionはCentOS6です。
repositorのURLはそれぞれ合わせてください。

yum -y –enablerepo=nginx install nginx

gitコマンドメモ

よく使用するgitコマンドについてまとめていきます。

定期的に更新してく予定です。

  • 初期設定
git config --global user.name "hogehoge"
git config --global user.email hogehoge@hoge.com
  • レポジトリ作成
git init
git add -A
git commit -m "Initialize repository"
  • ステータス
git status
  • コミット
git add -A
git commit -m "Update repository"
  • リモートレポジトリ(GitHubの場合)
git remote add origin git@github.com:<ユーザ名>/<レポジトリ名>.git
git push -u origin --all
  • ブランチ
git checkout -b hogehoge
  • マージ
git checkout master
git merge hogehoge
  • 強制プッシュ
git push -f