ヘッダーにexpireヘッダーとキャッシュコントロールを追加
ExpiresActive On
ExpiresDefault "access plus 1 month"
Header set Cache-Control "max-age=604800"
コマンドプロンプトからのメールを送る。
nslookup -type=mx hoge.co.jp telnet メールサーバIPかドメイン ehlo test mail from:<hoge1@hoge.co.jp> rcpt to:<hoge2@hoge.co.jp> data From:hoge1@hoge.co.jp To:hoge2@hoge.co.jp Subject:test mail This is test mail.
バックアップ・リストア基本
1.データベースのバックアップ
データベースのバックアップにはpg_dumpコマンドを使う。
データベース毎に取ったり丸ごと取ったりいろいろオプションが指定できるが、
とりあえず何も考えず丸ごとバックアップを取る方法を紹介する。
Linuxサーバにpostgresでログイン
バックアップを取る(pg_dump)
# pg_dumpall -o > ファイル名
※指定したファイル名で、バックアップファイルが作成される
バックアップファイルが巨大になる場合は、圧縮してバックアップを取ってくれる機能を利用すると、
ディスク容量を節約できる。
# pg_dump -Fc データベース名 -f ファイル名
※圧縮してバックアップする場合、データベース名を指定しなければならない2.リストア
1で丸ごと取ったバックアップファイルを元にリストアする方法を紹介する。
サーバを再インストールし、PostgreSQLをインストールする。
Linuxサーバにpostgresでログイン
initdbを実行
バックアップファイルからリストアを行う
# psql -e template1 < ファイル名
※すべてのデータベースおよびユーザが再現される
圧縮してバックアップを取った場合は、次のようにリストアしなければならない。
サーバを再インストールし、PostgreSQLをインストールする。
Linuxサーバにpostgresでログイン
initdbを実行
リストアするデータベースを作成する
# createdb データベース名
リストアするデータベースに存在したユーザをすべて作成する
# createuser ユーザ名
バックアップファイルからリストアを行う
# pg_restore -d データベース名 ファイル名
PostgreSQLには、テーブルのデータをファイルに書き出したり、
ファイルのデータをテーブルに追加したりする機能がある。これを利用して、
CSV形式のファイルに出力したり、
CSV形式のデータをテーブルに読み込む方法を紹介する。
3-1 テーブルの内容をCSVファイルに書き出す
psqlでデータベースに接続し、次のコマンドを実行する。
TestDB=> \copy テーブル名 to ファイル名 with csv
指定したテーブルの内容が、CSV形式で指定したファイルに書き出される。
3-2 CSVファイルの内容を既存のテーブルに追加する
psqlでデータベースに接続し、次のコマンドを実行する。
TestDB=> \copy テーブル名 from ファイル名 with csv
指定したファイルの内容が、指定したテーブルに追加される。
あくまでも「追加」であり、テーブルに元々入っていたデータは消えない。4.自動的にバックアップを取るには?
バックアップは定期的にとりたいので、cronにやらせたい。スクリプトは次のようになる。
#!/bin/sh
#
# Database Backup Script
#
# Backup
su - postgres -c "/usr/local/pgsql/bin/pg_dump -Fc データベース名 -f /home/postgres/out.admp"
# Vacuum
su - postgres -c "/usr/local/pgsql/bin/vacuumdb データベース名"
su - postgres -c "/usr/local/pgsql/bin/vacuumdb --analyze データベース名"
※cronはroot権限で実行されるため、postgresユーザでコマンドを実行している。
例えば上記スクリプトを/etc/cron.dairyにpgsql_bk.cronというファイル名で作成し、
実行件を付けておけば、一日一回コマンドを実行してくれる。
カラム名のみ取得するとき
SELECT attname FROM pg_attribute as a INNER JOIN pg_class as c ON c.oid = a.attrelid WHERE a.attnum > 0 AND c.relname='t11_voice' ORDER BY a.attnum
テーブルのカラム名と型名をとってくる。
SELECT pg_attribute.attname, pg_type.typname, pg_attribute.attlen FROM pg_attribute, pg_type WHERE pg_attribute.atttypid = pg_type.oid AND ( pg_attribute.atttypid < 26 OR pg_attribute.atttypid > 29 ) AND attrelid IN ( SELECT pg_class.oid FROM pg_class, pg_namespace WHERE relname='__TABLE_NAME__' AND pg_class.relnamespace=pg_namespace.oid AND pg_namespace.nspname='__SCHEMA_NAME__' );