redmineの自動バックアップ
やることはcronで1日1回mysqlのDBをバックアップするだけです。
設定方法
DBをバックアップするシェルを作成
$ vim /home/kashifuji/backup/redmine/redmien_backup.sh
#!/bin/bash
/usr/bin/mysqldump -u redmine -pパスワード redmine > /home/kashifuji/backup/redmine/mysqlbk_`date +"%Y%m%d"`.dump
クーロンを設定する
$ contab -e
10 2 * * * /bin/bash /home/kashifuji/backup/redmine/redmien_backup.sh
こんなバックアップファイルができます
mysqlbk_20140327.dump
バックアップファイルからリカバリ
誤ってDBを削除
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| redmine |
+--------------------+
2 rows in set (0.30 sec)
mysql> drop database redmine;
Query OK, 50 rows affected (6.45 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.05 sec)
バックアップファイルからリカバリ
おわり
centOSにredmineをインストールする
手順はここを参考にしました
- ソースコードの取得
svnから取得しました。
sudo yum install svn
svn co http://svn.redmine.org/redmine/branches/2.4-stable redmine-2.4 - mysqlでDBの作成
MYSQLの設定はこちらを参考に - redmineプロジェクトのDBの設定を変更
手順通りdatabase.yml.exampleをコピーして、パスワードなどを変更します$ cd redmine-2.4
$ cp config/database.yml.example config/database.ymlパスワードとユーザの変更
$ vim config/database.yml
username: redmine
password: パスワード - bundleでredmineに必要なgemをインストール
railsの設定はこちらを参考にcentOS6.4にrail4をいれる - katashiyo515's diary
$ bundle install - Session store secret generation
いわれたとおりに設定をします
$ rake generate_secret_token - DBスキーマ、オブジェクト作成
いわれたとおりに設定をします
$ RAILS_ENV=production rake db:migrate
- デフォルトデータの設定
いわれたとおりに設定をします
$ RAILS_ENV=production rake redmine:load_default_data
Select languageでjaを選択します - フォルダ作成
書いてある通りに設定します
$ mkdir -p tmp tmp/pdf public/plugin_assets sudo
$ chmod -R 755 files log tmp public/plugin_assets - 起動
railsのデフォルトのサーバで起動します
$ ruby script/rails server webrick -e production
- 確認
http://localhost:3000/
ユーザ:adminパス:adminでログインします。こちらのページを参考にユーザの追加やパスワード変更します
出来上がりはこんな感じで、タスク管理ができます
centOS6.4にrail4をいれる
redmineを使いたかったのでrail4を入れました。
思ったよりエラーでインストールに時間がかかったのでメモです。
インストールが遅い
1時間たってもインストールが終わらなかったので以下の対応をしました。
sudo vim /etc/resolv.confoptions single-request-reopensudo /sbin/service network restart
参考
■ rubygemをアップデート
エラー1
$ sudo gem install railsFetching: atomic-1.1.15.gem (100%)Building native extensions. This could take a while...ERROR: Failed to build gem native extension./usr/bin/ruby extconf.rbextconf failed, exit code 1Gem files will remain installed in /usr/lib64/ruby/gems/1.8/gems/atomic-1.1.15 for inspection.
エラー2
$ sudo gem install rails
Building native extensions. This could take a while...
Successfully installed atomic-1.1.15
Fetching: thread_safe-0.2.0.gem (100%)
Successfully installed thread_safe-0.2.0
Fetching: minitest-4.7.5.gem (100%)
Successfully installed minitest-4.7.5
Fetching: tzinfo-0.3.39.gem (100%)
Successfully installed tzinfo-0.3.39
Fetching: multi_json-1.9.0.gem (100%)
Successfully installed multi_json-1.9.0
Fetching: i18n-0.6.9.gem (100%)
Successfully installed i18n-0.6.9
Fetching: activesupport-4.0.4.gem (100%)
ERROR: Error installing rails:
activesupport requires Ruby version >= 1.9.3.
→ruby1.9.3じゃないとだめみたいなので、ソースコードから入れなおす
sudo visudoDefaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
configureするときにパスしていでもよさそう
エラー3
$ sudo gem instal railsTo eliminate this warning, please install libyaml and reinstall your ruby.ERROR: Loading command: install (LoadError)cannot load such file -- zlibERROR: While executing gem ... (NoMethodError)undefined method `invoke_with_build_args' for nil:NilClass
$ sudo yum install zlib zlib-devel
エラー4
$ sudo gem install railsTo eliminate this warning, please install libyaml and reinstall your ruby.ERROR: While executing gem ... (Gem::Exception)
別のエラーが発生
$ ruby extconf.rbchecking for yaml.h... noextconf.rb:8:in `asplode': yaml.h is missing. Please install libyaml. (RuntimeError)from extconf.rb:11:in `<main>'
$ make$ sudo make install
railのインストール
sudo gem install rails
MySQLのインストール
環境
OS:CentOS6.4
インストール
設定の変更
文字コードをUTF8にします。
$ sudo vim /etc/my.cnf
character-set-server = utf8
MysSQLサーバの起動
$ sudo /etc/rc.d/init.d/mysqld start
初期設定
$ mysql_secure_installation
ログイン
$ mysql -u root -p
DB作成
testDBを作ります。
mysql> create database test;
ユーザ作成
ユーザ作成testDBの権限があるtestユーザを作りました。
作成したtestユーザでログイン
$ mysql -u test -p
リモート接続
リモート接続用のユーザ作成
ローカルIPからのみ接続できるtestユーザを作成しました。
mysql> grant all on test.* to test@"192.168.%" identified by 'パスワード'
ユーザが作成されたか確認するコマンド
$ sudo /etc/init.d/iptables restart
sudo vim /etc/my.cnfbind-address = 0.0.0.0 ←この設定を削除するsudo /etc/rc.d/init.d/mysqld restart
資料
CentOSにOracleを入れる
無料でOracleが使いたい。
ということで、Oracle Database Express Edition 11g Release 2をCentOSに入れてみました。
環境
OS:CentOS6.4
要件
glibcは2.3.4-2.41以上makeは3.80以上binutilsは2.16.91.0.5以上gccは4.1.2以上libaioは0.3.104以上
下準備
Hostsの設定
デフォルトの設定ではtnsname.oraがhost名になっているので、ホスト名とipが紐づいていない場合エラーになります。
ホスト名を127.0.0.1に設定します。
ホスト名の確認
$ hostname
centOS64mini
ホスト名の設定
$ sudo vim /etc/hosts
デフォルトポートの解放
# 8080と1521を開ける$ sudo /etc/sysconfig/iptables-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1521 -j ACCEPT# リスタート$ /etc/init.d/iptablesrestart
解凍
インストール
SWAPサイズを一時的に増やす : Edo::World::Blogこちらを参考にすると変更できます。
# 現在の領域を削除$ sudo swapoff -a# 2GBの領域を作成する$ sudo dd if=/dev/zero of=/tmp/swapfile bs=1M count=2048
$ sudo mkswap /tmp/swapfile
$ sudo swapon /tmp/swapfile# 確認$ cat /proc/swaps
sudo /etc/init.d/oracle-xe configure
# 現在の領域を削除sudo swapoff -a# swap領域を元に戻すsudo swapon /dev/mapper/VolGroup-lv_swap# 確認sudo cat /proc/swaps# 作ったスワップファイルを削除sudo rm /tmp/swapfile
/u01/app/oracle/product/11.2.0/xe/config/log/
ユーザ作成
ORACLE_HOMEの設定
$ cat ~/.bashrc
oracleユーザのパスワード変更
$ sudo passwd oracle
oracleユーザでsqlplusにログイン
$ su oracle
$ sqlplus / as sysdba# testユーザをパスワードpasswordで作成SQL > create user test
identified by passworddefault tablespace USERS
temporary tablespace TEMP;# 権限の付与
testユーザで テーブル作成
# ログイン
$ sqlplus test/password@XE
# テーブル作成
SQL > create table test
(
id NUMBER(3) ,
name VARCHAR2(5),
primary key( id )
);
windowsからログインしてみる
A5:SQL Mk-2を使います。
ポート番号やサービス名を変更したい場合はtnsnames.oraを修正するといいです。
/u01/app/oracle/product/11.2.0/xe/network/admin/tnsnames.ora
Cassandraを動かす
nosqlの代表格Cassandraを使ってみます
cassandraのページ
環境
OS:CentOS6.4
ダウンロード
$ wget http://www.apache.org/dyn/closer.cgi?path=/cassandra/2.0.3/apache-cassandra-2.0.3-bin.tar.gz
解凍
# フォルダの作成$ sudo mkdir -p /var/lib/cassandra/data/system/local$ sudo mkdir -p /var/cassandora/{data,commitlog,saved_caches}
# hostsの設定
$ hostname
centOS64mini$ vim /etc/hosts
サーバの起動
cassandraサーバを動かす
sudo ./bin/cassandra
DBの作成
cassandraに接続する
$ ./bin/cassandra-cli -h localhost
作成
# keyspaceの作成[default@unknown] use ks1;
[default@unknown] create keyspace ks1;
# 作成したkeyspaceを使う
# column familyの作成
[default@ks1] create column family cf1 with comparator=UTF8Type and default_validation_class=UTF8Type and key_validation_class=UTF8Type;
データの保存と取得
保存
$ ./bin/cassandra-cli -h localhost
[default@ks1] set cf1['key1']['col1']='value1';
取得
$ ./bin/cassandra-cli -h localhost
[default@ks1] get cf1['key1'];
=> (name=col1, value=value1, timestamp=1387578152513000)
Returned 1 results.
Elapsed time: 125 msec(s).
無事に取得できました。
もちろん、phpやpythonなど様々な言語に対応しているのでそこからの保存と取得も可能です
ClientOptions_JP - Cassandra Wiki
参考資料
LevelDBをつかってみた
RocksDBやRiakで使われているLevelDBを使ってみました。
leveldb - A fast and lightweight key/value database library by Google. - Google Project Hosting
環境
CentOS6.4
ダウンロード
gitかwgetでダウンロードできます。
$ git clone https://code.google.com/p/leveldb/
インストール
$ sudo yum install snappy
$ cd leveldb
$ make
$ make check
libとincludeをコピー
$ sudo cp libleveldb.a /usr/local/lib
$ sudo cp -r include/leveldb /usr/local/include
Cのコードをかく
保存用のコード
$ cat save.cc#include "leveldb/db.h"#include <iostream>#include <assert.h>int main(int argc, char *argv) {if (argc != 3) {printf("usage : ./save key value\n");return 1;}// 引数を変数に設定std::string key(argv[1]);std::string value(argv[2]);// dbの読み込みleveldb::DB* db;leveldb::Options options;options.create_if_missing = true;leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);// DBの読み込みチェックassert(status.ok());// 保存処理status = db->Put(leveldb::WriteOptions(), key, value);assert(status.ok());std::cout << "set (key, value) = (" << key << ", " << value << ")" << std::endl;}
取得用のコード
$ cat load.cc#include "leveldb/db.h"#include <iostream>#include <assert.h>int main(int argc, char *argv) {if (argc != 2) {printf("usage : ./load key\n");return 1;}// 引数を変数に設定std::string key(argv[1]);std::string value;// dbの読み込みleveldb::DB* db;leveldb::Options options;options.create_if_missing = true;leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);// DBの読み込みチェックassert(status.ok());// 読み込み処理status = db->Get(leveldb::ReadOptions(), key, &value);if (status.ok()) {std::cout << "load (key, value) = (" << key << ", " << value << ")" << std::endl;} else {std::cout << "Not found" << std::endl;}}
削除用のコード
$ cat delete.cc#include "leveldb/db.h"#include <iostream>#include <assert.h>int main(int argc, char *argv[]) {if (argc != 2) {printf("usage : ./delete key\n");return 1;}// 引数を変数に設定std::string key(argv[1]);// dbの読み込みleveldb::DB* db;leveldb::Options options;options.create_if_missing = true;leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);// DBの読み込みチェックassert(status.ok());// 読み込み処理status = db->Delete(leveldb::WriteOptions(), key);assert(status.ok());std::cout << "Deleted key(" << key << ")" << std::endl;}
コンパイルして実行
コンパイル
$ g++ -o save save.cc /usr/local/lib/libleveldb.a -lpthread -I /usr/local/include/leveldb/$ g++ -o load load.cc /usr/local/lib/libleveldb.a -lpthread -I /usr/local/include/leveldb/$ g++ -o delete delete.cc /usr/local/lib/libleveldb.a -lpthread -I /usr/local/include/leveldb/
実行
$ ./save key1 value1set (key, value) = (key1, value1)$ ./load key1load (key, value) = (key1, value1)$ ./delete key1Deleted key(key1)$ ./load key1Not found
動作OK!
資料
leveldb - A fast and lightweight key/value database library by Google. - Google Project Hosting