[Ubuntu][MySQL]MySQL5を再インストール・複数起動させる

UbuntuでMySQL5.5を再インストールする方法と複数起動させる方法


今回のゴール


  • MySQL5.5の再インストールができるようにする
  • cmakeのオプションを設定して複数起動させることができるようにする

以下のようなフォルダ構成でMySQLをインストールします
※レプリケーションテストをローカルで行うなどで使えます
※複数の異なるバージョンを入れることもできます(5.5.15の部分がバージョンごとに増えていく)


/usr/local/mysql
└── 5.5.15
├── master
└── slave

MySQLのアンインストール


前提としてpacoを利用している必要があります


以下のような形で、/usr/local/mysql/5.5.15/1/以下にmysqlをインストールしています


$ paco -a
mysql-5.5.15
$ which mysql
/usr/local/mysql/5.5.15/1/bin/mysql

pacoを使った既存のMySQLの削除


pacoを使用しているならば簡単に削除できます
削除はpaco -r [パッケージ名]というコマンドで行います
パッケージ名はpaco -aで確認できます(paco管理下に置く際に-p [パッケージ名]で指定ができます)


sudo paco -r mysql-5.5.15

削除前の構成


$ ll /usr/local/mysql/5.5.15/1/
合計 84
drwxr-xr-x 13 mysql mysql 4096 2011-08-28 01:34 ./
drwxr-xr-x 3 root root 4096 2011-08-28 01:27 ../
-rw-r--r-- 1 mysql mysql 17987 2011-07-14 04:09 COPYING
-rw-r--r-- 1 mysql mysql 7604 2011-07-14 04:09 INSTALL-BINARY
-rw-r--r-- 1 mysql mysql 2552 2011-07-14 04:09 README
drwxr-xr-x 2 mysql mysql 4096 2011-08-28 01:27 bin/
drwxr-xr-x 5 mysql mysql 4096 2011-08-28 01:30 data/
drwxr-xr-x 2 mysql mysql 4096 2011-08-28 01:27 docs/
drwxr-xr-x 3 mysql mysql 4096 2011-08-28 01:27 include/
drwxr-xr-x 3 mysql mysql 4096 2011-08-28 01:27 lib/
drwxr-xr-x 4 mysql mysql 4096 2011-08-28 01:27 man/
drwxr-xr-x 10 mysql mysql 4096 2011-08-28 01:27 mysql-test/
drwxr-xr-x 2 mysql mysql 4096 2011-08-28 01:27 scripts/
drwxr-xr-x 27 mysql mysql 4096 2011-08-28 01:27 share/
drwxr-xr-x 4 mysql mysql 4096 2011-08-28 01:27 sql-bench/
drwxr-xr-x 2 mysql mysql 4096 2011-08-28 01:27 support-files/

削除後の構成


$ ll /usr/local/mysql/5.5.15/1/
合計 16
drwxr-xr-x 4 mysql mysql 4096 2011-08-28 01:35 ./
drwxr-xr-x 3 root root 4096 2011-08-28 01:27 ../
drwxr-xr-x 4 mysql mysql 4096 2011-08-28 01:35 data/
drwxr-xr-x 3 mysql mysql 4096 2011-08-28 01:35 lib/

不要なディレクトリ, ファイルの削除


インストールディレクトリ配下にdata/, lib/というディレクトリがゴミとして残りますので、不要な場合は削除します
また、起動用スクリプトを/etc/init.d/以下に設置している場合はそちらも削除します
PATH設定も不要であれば削除します


$ sudo rm /etc/init.d/mysql.server 
$ sudo rm -rf /usr/local/mysql/5.5.15/

削除が完了したら、あとは普通にインストールすればOKです
しかし、今回は複数起動の設定も行っていきたいと思います


マスター側のMySQLのインストールと設定


ここでは/usr/local/mysql/5.5.15/master以下にマスターとなるMySQLをインストールしています
その他のディレクトリにインストールする場合は上記記述箇所を任意のディレクトリ名に変更してください


MySQL5.5.15のインストール


MySQL5.5.15のソースコードをダウンロードします


wget -O mysql-5.5.15.tar.gz http://www-jp.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.15.tar.gz/from/ftp://ftp.iij.ad.jp/pub/db/mysql/

tar.gzを解凍し、コンパイルします


tar xzf mysql-5.5.15.tar.gz
cd mysql-5.5.15
sudo cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/5.5.15/master -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DENABLED_LOCAL_INFILE=true -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_EXTRA_CHARSETS=all -DWITH_READLINE=ON -DSYSCONFDIR=/usr/local/mysql/5.5.15/master

ここでcmakeで以下の設定をしています


  • CMAKE_INSTALL_PREFIXでインストール先のディレクトリを/usr/local/mysql/5.5.15/masterとするように指定しています
  • SYSCONFDIRでmy.cnfの設置場所を指定しています
    my.cnfを/usr/local/mysql/5.5.15/master/以下に設置し、masterのMySQLの設定はそこのmy.cnfを参照するようにします

その他のオプションの詳しい説明はhttp://dev.mysql.com/doc/mysql-sourcebuild-excerpt/5.5/en/source-configuration-options.html(英語)を参照ください
また、my.cnfの読み込み順序についてはhttp://dev.mysql.com/doc/refman/5.5/en/option-files.html(英語)をご参照ください


makeの実行


ここで、-j 2とすることで2スレッドで並列してコンパイルを行うようになり、高速化できます
※VMとかだと微妙ですが


make [-j 2]

paco管理下でmake install


paco管理下でmysql-5.5.15-masterというパッケージ名でmake installします
こうするとあとでsudo paco -r mysql-5.5.15-masterで削除することができます


sudo paco -p mysql-5.5.15-master make install

MySQL5.5のインストール完了後の設定


パーミッションの設定


sudo chown -R mysql:mysql /usr/local/mysql/5.5.15/master

起動スクリプトの設置


自由な名前で設置して問題ありません
この例だと/etc/init.d/mysql5.5.15-master startで起動させることになります


sudo cp /usr/local/mysql/5.5.15/master/support-files/mysql.server /etc/init.d/mysql5.5.15-master
sudo chmod +x /etc/init.d/mysql5.5.15-master

初期設定データのインポート


sudo /usr/local/mysql/5.5.15/master/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/5.5.15/master --datadir=/usr/local/mysql/5.5.15/master/data

mysqlコマンドが使えるようにする設定


複数mysqlをインストールして使う場合はちょっと手間をかけないといけませんが、
ここではそれは省略し、基本的にmysqlコマンドで接続する場合はmaster側に接続されるようにします


vi ~/.bashrc

末尾に以下を追加


export PATH=$PATH:/usr/local/mysql/5.5.15/master/bin

my.cnfの設置


設定値はhttp://namakesugi.web.fc2.com/settings/mysql55_my_cnf_master.txtを参照してください
以下は上記URLからwgetして設置する例です(ベースはmedium)


cd /tmp
sudo wget -O my.cnf http://namakesugi.web.fc2.com/settings/mysql55_my_cnf_master.txt
sudo mv my.cnf /usr/local/mysql/5.5.15/master/

ログファイルをtouchしておく


sudo touch /var/log/mysql/master_error.log
sudo touch /var/log/mysql/master_slow.log
sudo chown mysql:mysql /var/log/mysql/master*

マスター側のMySQLの起動と接続


以下コマンドでMySQLを起動させます


sudo /etc/init.d/mysql5.5.15-master start

以下コマンドでMySQLに接続します


mysql -uroot

なお、以下コマンドでも同様な動きをします
※大事なのは/usr/local/mysql/5.5.15/master/my.cnfの[client]の設定を読み込ませること


/usr/local/mysql/5.5.15/master/bin/mysql -uroot

statusコマンド, show variables等で設定が正しいことを確認をして完了です


Slave側のMySQLのインストールと設定


インストール先は/usr/local/mysql/5.5.15/slave以下とします
基本的にdatadirのパスを変更するだけで手順は同じであるため、詳細な説明は省略します


ソースコードのディレクトリへ移動します


cd mysql-5.5.15

キャッシュ削除等を行います


rm CMakeCache.txt
make clean

コンパイル・paco管理下でのmake installをします


sudo cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/5.5.15/slave -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DENABLED_LOCAL_INFILE=true -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_EXTRA_CHARSETS=all -DWITH_READLINE=ON -DSYSCONFDIR=/usr/local/mysql/5.5.15/slave
sudo make
sudo paco -p mysql-5.5.15-slave make install

パーミッション設定をします


sudo chown -R mysql:mysql /usr/local/mysql/5.5.15/slave

初期データのインポートを行います


sudo /usr/local/mysql/5.5.15/slave/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/5.5.15/slave --datadir=/usr/local/mysql/5.5.15/slave/data

起動スクリプトを設置します


sudo cp /usr/local/mysql/5.5.15/slave/support-files/mysql.server /etc/init.d/mysql5.5.15-slave
chmod +x /etc/init.d/mysql5.5.15-slave

my.cnfを設置します


設定値はhttp://namakesugi.web.fc2.com/settings/mysql55_my_cnf_slave.txtを参照してください
以下は上記URLからwgetして設置する例です(ベースはmedium)
なお、port番号は13306, socketは/var/run/mysqld/mysqld_5.5.15_slave.sockとしています


cd /tmp
sudo wget -O my.cnf http://namakesugi.web.fc2.com/settings/mysql55_my_cnf_slave.txt
sudo mv my.cnf /usr/local/mysql/5.5.15/slave/

ログファイルをtouchしておきます


sudo touch /var/log/mysql/slave_error.log
sudo touch /var/log/mysql/slave_slow_log
sudo chown mysql:mysql /var/log/mysql/slave_*

Slave側のMySQLを起動します


sudo /etc/init.d/mysql5.5.15-slave start
/usr/local/mysql/5.5.15/slave/bin/mysql -uroot

ログを確認してエラーがないことを確認します


less /var/log/mysql/slave_error.log

Slave側のMySQLに接続します


パスを通したmysqlコマンドの参照しているmy.cnfは/usr/local/mysql/5.5.15/master/my.cnfであるので、
ポート、socket設定をするか以下のようにして接続します


/usr/local/mysql/5.5.15/slave/bin/mysql -uroot

statusコマンドでslaveに繋がっていることを確認します


status

socketがslaveであることを確認します


show variablesでdatadirがslave以下のdataであることも確認します


show variables like 'datadir';
+---------------+-------------------------------------+
| Variable_name | Value |
+---------------+-------------------------------------+
| datadir | /usr/local/mysql/5.5.15/slave/data/ |
+---------------+-------------------------------------+
1 row in set (0.00 sec)

これでmasterのMySQLをport3306 slaveのMySQLをport13306で同時に起動させることができるようになりました
今回は同一バージョンの複数起動でしたが、同様の方法で別のバージョン(5.1系や5.6系など)をインストールすることもできます


コマンドまとめ


paco関連


  • paco -a ... paco管理下のパッケージ一覧を表示
  • paco -r [パッケージ名] ... paco管理下のパッケージを削除
  • paco -p [パッケージ名] make install ... paco管理下でmake installする(手動インストール)
    なお、-Dとするとカレントディレクトリ名をパッケージ名にする意味になります(mysql-5.5.15以下でmake installした場合はpacoにはmysql-5.5.15という名前で

MySQL5.5系のcmakeオプション


  • -DCMAKE_INSTALL_PREFIX=[インストールパス] ... インストールパスを指定する
    (明示的にインストールするために指定しておいたほうが安全)
  • -DSYSCONFDIR=[my.cnfの設置パス] ... 複数インストールする場合でmy.cnfを使い分けたい場合は指定する
  • -DWITH_EXTRA_CHARSETS=all ... 言語ファイルを全部入れる
    (mysqldumpとかでexportする言語を指定する場合にないと大変なことになったりする
スポンサーサイト

[Ruby][Gem]privacy_mask_tools v0.2系公開[個人情報保護]

privacy_mask_toolsのv0.2系を公開しました


目的 : Rubyにおける個人情報保護を容易にするため


※ある種悪用可能なメソッドも含まれております


privacy_mask_tools v0.2系の変更点概要


  • matcher.rbをphone_matcher.rbに変更しました
    これにより、任意のオブジェクトへのinclude方法が変更されています
  • email_matcher.rbを作成しました
    これにより、Eメールっぽい箇所の検索・抽出・マスキングが可能になりました
  • phone_matcherに番号のピックアップ機能を追加しました
    これにより、任意のテキストデータ中から携帯・固定電話番号を抽出することが可能となりました

メソッド一覧


PhoneMatcher


すべてインスタンスメソッドです


  • has_phone_number?(<text_data>)
    固定電話番号が含まれていた場合はtrueを返します

  • has_mobile_number?(<text_data>)
    携帯番号が含まれていた場合はtrueを返します

  • pick_phone_number(<text_data>)
    text_data中の固定電話番号を抽出し、配列(Array)に格納して返します

  • pick_mobile_number(<text_data>)
    text_data中の携帯番号を抽出し、配列(Array)に格納して返します

  • phone_number_masking(<text_data>, <replace_word>)
    text_data中の固定電話番号の箇所をreplace_word(デフォルトは"*")でマスキングします

  • mobile_number_masking(<text_data>, <replace_word>)
    text_data中の携帯番号の箇所をreplace_word(デフォルトは"*")でマスキングします
    replace_wordに2文字以上指定すると、全体をその2文字でマスキングします
    (例replace_wordに[TEL]と指定した場合 000-0000-0000 => [TEL])

なお、上記すべてのメソッドにはJargonモードが付属しています
こちらを利用すると隠語も含めて検索・抽出・マスキングが可能になります
詳細はgithubを確認ください


EmailMatcher


すべてインスタンスメソッドです


  • has_rfc_email?(<text_data>)
    text_data中にEメールアドレスが含まれていた場合はtrueを返します

  • pick_rfc_email(<text_data>)
    text_data中に含まれているEメールアドレスを抽出し、配列(Array)に格納して返します

  • rfc_email_masking(<text_data>,<replace_words>)
    text_data中に含まれているEメールアドレスをreplace_words(デフォルトは***)でマスキングします

任意のクラスにIncludeして使いたい場合


以下のように記述してください


class Obj
include PrivacyMaskTools::PhoneMatcher
include PrivacyMaskTools::EmailMatcher
end

EmailMatcherが不要な場合は、依存はしていませんので、外すことも可能です


その他


0.2.x系中では大きく動作がかわる可能性がありますので、
githubをご確認ください

[Ruby][Gem]個人情報がマスクするツールを作ってみた[PrivacyMaskTools]

privacy_mask_toolsを公開しました


目的:テキストデータ中に含まれている個人情報をマスキングしたいなーと思ったから


誰でも気軽にできるようにしないとね!ってことで公開
なお、text_area_tag等に入力された文字列中から探索することを目的としているため
単純なtext_field_tag等の場合は向かないかと思います(普通に書いたほうが早い)
丸付き数字(ex:①)や漢数字(ex:壱一)などが含まれていても判定が可能です(jargonモードの場合*後述)



privacy_mask_toolsの使い方


ruby-1.9.2以降で動作確認。1.8.7はシラネ
ただ正規表現書いただけなので、ライブラリ依存はありません


インストール方法


Gemfileに入れる場合


gem 'privacy_mask_tools'

gem installコマンドの場合


gem install privacy_mask_tools

電話番号が含まれるか確認したい場合


携帯番号と固定番号どちらを調べたいかで呼び出すメソッドが変わっています
そのうち、統一するつもり(まだv0.1系だしね)


携帯番号が含まれているか確認する


PrivacyMaskTools::Base.has_mobile_number?('<調べたいテキストデータ>')

固定電話番号が含まれているか確認する


PrivacyMaskTools::Base.has_phone_number?('<調べたいテキストデータ>')

Jargonモード(隠語対応モード)を使う場合


それぞれのメソッドの第二引数にtrueをいれる
またはhas_jargon_xxxxを用意してありますのでそちらを利用してください


電話番号のマスキング


電話番号が含まれる文字列を任意の文字でマスクすることができます
000-0000-0000という電話番号を***-****-****にしたり、[TEL]とすることもできます


携帯番号をマスキングする


マスク文字列のデフォルトは*です
2文字以上設定した場合は全体をその文字列にします(上例参照)


第三引数にtrueを指定した場合(デフォルトはfalse)、Jargonモードで動作するようになります


PrivacyMaskTools::Base.mobile_number_masking('<マスクしたいテキストデータ>', '<マスク文字列>', Jargonモードを使うか)

固定電話番号をマスキングする


仕組み,デフォルト値自体は携帯番号のマスキングと同じです


PrivacyMaskTools::Base.phone_number_masking('<マスクしたいテキストデータ>', '<マスク文字列>', Jargonモードを使うか)

Rspecはこんな感じ


だれかに見せるようではないので、超適当ですが


  describe ".mobile_number_masking" do
it { matcher.mobile_number_masking("080-7900-0000").should eql "***-****-****" }
it { matcher.mobile_number_masking("08079000000","x").should eql "xxxxxxxxxxx" }
context "複数マッチする箇所がある場合" do
it { matcher.mobile_number_masking("abc:080-7900-0000\n090 080-7800-0000").should eql "abc:***-****-****\n090 ***-****-****" }
end

context "subに2文字以上与えた場合" do
it { matcher.mobile_number_masking("電話番号は 080(7600)0000.1です", "No").should eql "電話番号は No.1です" }
end
end

インクルードもできる!


以下のようにすることで任意のオブジェクト上で上記メソッドが使えるようになります
正規表現の書き換えはそのうちできるようにしたい。。。(今は定数)


class Obj
Include PrivacyMaskTools:Matcher
end

privacy_mask_toolsのGemについて


正規表現が汚い件について


すみません。。。Ruby難しいです


マッチした部分の抜き出し部分がない件について


ついていましたけど、悪用されそーなのでとりあえず抜いてあります
クローラーに付けるだけで、電話番号収集ソフトになってしまいますので
※ここまでできてたら、誰でもできるじゃんというのはおいておく


今後の機能について


予定としては、住所のマスキング、放送禁止用語のマスキングetcかな
Rubyだとこんなことも簡単にできちゃうぞ!ってところを見せれるようにしたい
Greeさんが公開する予定のNGワードAPIによって変わるかもしれない
が、APIって色々めんどーなので一緒にメンテしてくれる人募集(というか色々おせーてほしい)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。