MongoDB 使い方
MongoDBとは
NoSQLと言われているデータ管理ツールです。
コマンドとか
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:テーブル名
テーブルの復元
取得したテーブルを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バイト以内に指定しましょう。
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