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)

 

 

バックアップファイルからリカバリ

$ mysql -u root -p
mysql> CREATE DATABASE redmine CHARACTER SET utf8;
Query OK, 1 row affected (0.15 sec)

mysql> GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
Query OK, 0 rows affected (0.24 sec)

mysql> exit
Bye
$ mysql -u redmine -pパスワード redmine < mysqlbk_20140327.dump

 

おわり

centOSにredmineをインストールする

 

手順はここを参考にしました

        1. ソースコードの取得
          svnから取得しました。
        2. mysqlでDBの作成
          MYSQLの設定はこちらを参考に

          MySQLのインストール - katashiyo515's diary

          mysql -u root -p

          mysql > CREATE DATABASE redmine CHARACTER SET utf8;
          mysql > CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'パスワード';
          mysql > GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';
          確認
          $ mysql -u redmine -p
          mysql> show databases;
          +--------------------+
          | Database           |
          +--------------------+
          | information_schema |
          | redmine            |
          +--------------------+
          2 rows in set (0.02 sec)
        3. redmineプロジェクトのDBの設定を変更
          手順通りdatabase.yml.exampleをコピーして、パスワードなどを変更します
          $ cd redmine-2.4
          $ cp config/database.yml.example config/database.yml
          パスワードとユーザの変更
          $ vim config/database.yml
          username: redmine
          password: パスワード
        4. bundleでredmineに必要なgemをインストール
          railsの設定はこちらを参考に

          centOS6.4にrail4をいれる - katashiyo515's diary

          $ bundle install
        5. Session store secret generation
          いわれたとおりに設定をします
          $ rake generate_secret_token
        6. DBスキーマ、オブジェクト作成
          いわれたとおりに設定をします
          $ RAILS_ENV=production rake db:migrate
        7. デフォルトデータの設定
          いわれたとおりに設定をします
          $ RAILS_ENV=production rake redmine:load_default_data
          Select languageでjaを選択します
        8. フォルダ作成
          書いてある通りに設定します
          $ mkdir -p tmp tmp/pdf public/plugin_assets sudo
          $ chmod -R 755 files log tmp public/plugin_assets
        9. 起動
          railsのデフォルトのサーバで起動します
          $ ruby script/rails server webrick -e production
        10. 確認
          http://localhost:3000/
          ユーザ:admin
          パス:admin
          でログインします。

          こちらのページを参考にユーザの追加やパスワード変更します

 

 出来上がりはこんな感じで、タスク管理ができます

 f:id:katashiyo515:20140326010710p:plain



centOS6.4にrail4をいれる

redmineを使いたかったのでrail4を入れました。

思ったよりエラーでインストールに時間がかかったのでメモです。

 

インストールが遅い

1時間たってもインストールが終わらなかったので以下の対応をしました。

dns解決で遅くなってる?
sudo vim  /etc/resolv.conf
options single-request-reopen
sudo /sbin/service network restart

参考

rubygemをアップデート

sudo gem update --system
sudo gem install rubygems-update
sudo update_rubygems

エラー1

$ sudo gem install rails
Fetching: atomic-1.1.15.gem (100%)
Building native extensions.  This could take a while...
ERROR:  Error installing rails:
        ERROR: Failed to build gem native extension.
 
    /usr/bin/ruby extconf.rb
mkmf.rb can't find header files for ruby at /usr/lib/ruby/ruby.h
 
extconf failed, exit code 1
 
Gem files will remain installed in /usr/lib64/ruby/gems/1.8/gems/atomic-1.1.15 for inspection.
Results logged to /usr/lib64/ruby/gems/1.8/extensions/x86_64-linux/1.8/atomic-1.1.15/gem_make.out
ruby-develを入れるといいらしい
sudo yum install ruby-devel

エラー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%)
ERRORError installing rails:
        activesupport requires Ruby version >= 1.9.3.

ruby1.9.3じゃないとだめみたいなので、ソースコードから入れなおす

$ sudo yum remove ruby ruby-devel
$ tar zxvf ruby-1.9.3-p545.tar.gz
$ cd ruby-1.9.3-p545
$ ./configure
$ make 
$ sudo make install
rubyを/usr/local/binに入れたのでrootのパスに/usr/local/binを追加
sudo visudo 
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

configureするときにパスしていでもよさそう

エラー3

$ sudo gem instal rails
/usr/local/lib/ruby/1.9.1/yaml.rb:84:in `<top (required)>':
It seems your ruby installation is missing psych (for YAML output).
To eliminate this warning, please install libyaml and reinstall your ruby.
ERROR:  Loading command: install (LoadError)
        cannot load such file -- zlib
ERROR:  While executing gem ... (NoMethodError)
    undefined method `invoke_with_build_args' for nil:NilClass
 
ruby1.9.3フォルダにあるzlibを入れる
$ cd ruby-1.9.3-p545/ext/zlib
ruby extconf.rb
$ make 
$ sudo make install
yumのzlibも必要かもしれません。
$ sudo yum install zlib zlib-devel

エラー4 

$ sudo gem install rails
/usr/local/lib/ruby/1.9.1/yaml.rb:84:in `<top (required)>':
It seems your ruby installation is missing psych (for YAML output).
To eliminate this warning, please install libyaml and reinstall your ruby.
ERROR:  While executing gem ... (Gem::Exception)
    Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources
 
ruby1.9.3フォルダにあるpsychを入れる
$ cd ruby-1.9.3-p545/ext/psych
ruby extconf.rb

 別のエラーが発生

$ ruby extconf.rb
checking for yaml.h... no
extconf.rb:8:in `asplode': yaml.h is missing. Please install libyaml. (RuntimeError)
        from extconf.rb:11:in `<main>'
yamlをいれる
sudo yum install libyaml-devel
$ cd ruby-1.9.3-p545/ext/psych
ruby extconf.rb
$ make 
$ sudo make install
今度はOK

エラー5

[kashifuji@61CentOS64 psych]$ sudo gem install rails
ERROR:  While executing gem ... (Gem::Exception)
    Unable to require openssl, install OpenSSL and rebuild ruby (preferred) or use non-HTTPS sources
opensslを入れる
$ cd ruby-1.9.3-p545/ext/openssl
$ ruby extconf.rb
$ make
$ sudo make install 
yumのopensslも必要かもしれません。
sudo yum install openssl-devel openssl

railのインストール

sudo gem install rails
インストールOK
$ gem list | grep rail
rails (4.0.4)
railties (4.0.4)
sprockets-rails (2.0.1)

MySQLのインストール

 

MySQLCentOSにインストールしてみました。


環境

OS:CentOS6.4

 

インストール

 yum -y install mysql-server

設定の変更

文字コードを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ユーザを作りました。

mysql> grant all privileges on test.* to test@localhost identified by 'パスワード';

作成したtestユーザでログイン

$ mysql -u test -p

リモート接続

リモート接続用のユーザ作成

ローカルIPからのみ接続できるtestユーザを作成しました。

mysql> grant all on test.* to test@"192.168.%" identified by 'パスワード'

ユーザが作成されたか確認するコマンド

mysql> select user, host from mysql.user;
ポートを開ける。デフォルトの3306をあけました。 
$ sudo vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
$ sudo /etc/init.d/iptables restart
DBのアクセス元設定
sudo vim /etc/my.cnf
bind-address = 0.0.0.0 ←この設定を削除する
sudo /etc/rc.d/init.d/mysqld restart
bind-addressは複数IP指定できないようなので設定を削除しました。
アクセス制御する場合はhosts.allowとかでやるとよさそうです。
 
a5で接続
こんな感じで設定する
f:id:katashiyo515:20140316194052p:plain
 
接続できました。

資料

 

CentOSにOracleを入れる

無料でOracleが使いたい。

ということで、Oracle Database Express Edition 11g Release 2CentOSに入れてみました。

環境

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以上
下準備
インストール
$ yum install glibc
$ yum install make
$ yum install gcc
$ yum install binutils
$ yum install libaio
$ yum install libaio-devel
$ yum install bc

Hostsの設定

デフォルトの設定ではtnsname.oraがhost名になっているので、ホスト名とipが紐づいていない場合エラーになります。

ホスト名を127.0.0.1に設定します。

ホスト名の確認

$ hostname

centOS64mini

ホスト名の設定

$ sudo vim /etc/hosts

127.0.0.1   localhost  centOS64mini5 

デフォルトポートの解放

# 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
解凍 

unzip oracle-xe-11.2.0-1.0.x86_64.rpm.zip

インストール
スワップ領域を一時的に2GBに設定。2GB以上ある場合はこの作業は不要です。

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 rpm -ivh oracle-xe-11.2.0-1.0.x86_64.rpm
sudo /etc/init.d/oracle-xe configure
swap領域を元に戻す
# 現在の領域を削除
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
# .bashrc
# Source global definitions                                                
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi
 
# User specific aliases and functions 
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=${ORACLE_BASE}/product/11.2.0/xe
export ORACLE_SID=XE
export ORACLE_BASE=/u01/app/oracle
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib/:/lib:/usr/lib
export NLS_LANG=Japanese_Japan.AL32UTF8
 
$ source .bashrc

oracleユーザのパスワード変更

$ sudo passwd oracle 

oracleユーザでsqlplusにログイン

$ su oracle
$ sqlplus / as sysdba

# testユーザをパスワードpasswordで作成
SQL > create user test
identified by password
default tablespace USERS
temporary tablespace TEMP;
# 権限の付与
SQL > grant CONNECT to TEST;
SQL > grant create table to TEST;
# ログアウト
SQL > exit;

testユーザで テーブル作成

# ログイン

$ sqlplus test/password@XE

# テーブル作成

SQL >  create table test

(
  id NUMBER(3) ,
  name VARCHAR2(5),
  primary key( id )
);
windowsからログインしてみる 

A5:SQL Mk-2を使います。

データベース→データベースの追加と削除→追加→Oracle(OCI経由 or 直接接続)
こんな感じに設定をすればOKです。
 

f:id:katashiyo515:20131223191942j:plain

ポート番号やサービス名を変更したい場合はtnsnames.oraを修正するといいです。

/u01/app/oracle/product/11.2.0/xe/network/admin/tnsnames.ora

 

Cassandraを動かす

 nosqlの代表格Cassandraを使ってみます

cassandraのページ

http://cassandra.apache.org

環境

OS:CentOS6.4

ダウンロード

$ wget http://www.apache.org/dyn/closer.cgi?path=/cassandra/2.0.3/apache-cassandra-2.0.3-bin.tar.gz

解凍

$ tar zxvf apache-cassandra-2.0.3-bin.tar.gz

設定

デフォルトの設定で動かすことにします。

# フォルダの作成
$ sudo mkdir -p /var/lib/cassandra/data/system/local
$ sudo mkdir -/var/cassandora/{data,commitlog,saved_caches}

# hostsの設定

$ hostname
centOS64mini

$ vim /etc/hosts

127.0.0.1   localhost centOS64mini

 サーバの起動

cassandraサーバを動かす

sudo ./bin/cassandra

 DBの作成

cassandraに接続する

$ ./bin/cassandra-cli -h localhost

作成

# keyspaceの作成
[default@unknown] create keyspace ks1;
# 作成したkeyspaceを使う
[default@unknown] use ks1;
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).

無事に取得できました。

もちろん、phppythonなど様々な言語に対応しているのでそこからの保存と取得も可能です

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でダウンロードできます。

Downloads - leveldb - A fast and lightweight key/value database library by Google. - Google Project Hosting

インストール
$ sudo yum install gcc-c++
$ sudo yum install snappy
※snappyはいらないかもしれません。
 
ダウンロードしたleveldbのフォルダに移動してmakeする 

$ 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 value1
set (key, value) = (key1, value1)
 
$ ./load key1
load (key, value) = (key1, value1)
 
$ ./delete key1
Deleted key(key1)
 
$ ./load key1
Not found

動作OK!

資料

leveldb - A fast and lightweight key/value database library by Google. - Google Project Hosting

A quick guide to LevelDB