CentOS 7 + MySQL 5.7で複数のMySQLインスタンスを起動する方法がとても簡単な件

カテゴリ: コンピュータ / 公開日: 2016年10月02日(日曜)17:39 / 投稿者: Tom Goodsun

CentOS 6以前とMySQL 5.6以前の構成ではmysqld_multiというものを使っていました。
これはMySQLをインストールすると入っているもので、複数のMySQLインスタンスを立ち上げたいときに使用します。

複数のインスタンスを立ち上げたいときとは、例えば本番環境で物理的に別れているDBサーバーを開発環境で再現したり、レプリケーションをテストをしたりするときに使います。

未だに仕事ではCentOS 6とMySQL 5.6の構成で、世の中的にCentOS 7がどれぐらい普及しているのかわからないですが、MySQLのオフィシャルサイトで紹介されていた方法があまりに簡単だったので、ここでも紹介します。

以下の方法はMySQL 5.7.13以降でsystemctlを利用するシステムで有効です。

MySQL 5.7で複数インスタンスの起動はできるか

またMySQL 5.6でできたんで、出来ると思いますし、結局引数でdatadirとかpidファイルの場所とか指定すれば可能ではあります。
ちなみにMySQL 5.7.13のsystemctlプラットフォーム向けのパッケージではmysqld_multiはインストールされないそうです。
今からご紹介する方法以下のページに記載されている方法になります。

2.5.10 Managing MySQL Server with systemd

systemctl + MySQL 5.7で複数インスタンスの起動はとても簡単

普通にMySQLをインストールします。
私は以下の設定にしているので、/etc/my.cnfを書き換えます。
https://github.com/tomgoodsun/centos7_lamp_configs/blob/master/config/etc/my.cnf

そして、ここからです。
私の環境ではすでに既存のMySQLインスタンスが起動しているので、今回はポート番号3307と3308のインスタンスを立ち上げるようにします。
まずはそのためのディレクトリを作成しましょう。

[root@localhost ~]# mkdir /var/lib/mysql_{3307,3308}; chown mysql: /var/lib/mysql_{3307,3308}

次はmy.cnfの設定です。
先程の設定に以下を追記します。なお追記内容はご自身の環境や設定に合わせる必要があります。

[mysqld@mysql_3307]
port=3307
datadir=/var/lib/mysql_3307
socket=/var/lib/mysql_3307/mysql.sock
log-error=/var/log/mysqld_3307.log

[mysqld@mysql_3308]
port=3308
datadir=/var/lib/mysql_3308
socket=/var/lib/mysql_3308/mysql.sock
log-error=/var/log/mysqld_3308.log

ここまで来たら、起動するだけです。
以下のコマンドで起動と自動起動設定をします。

[root@localhost ~]# systemctl start mysqld@mysql_3307
[root@localhost ~]# systemctl enable mysqld@mysql_3307

初期パスワードは/var/lib/mysqld_3307/mysqld_3307.logに記録されていますので、以下の手順と同様のセットアップをするだけです。

https://github.com/tomgoodsun/centos7_lamp_configs#mysql-serverのセットアップ

最後にもうひとつのmysqld_3308も設定して完成。

mysqld_multiのときは起動ファイルを書いたり、それがうまく動かなかったり面倒くさかったのですが、これだとsystemctlに全部任せられるので楽です。

Redmineのインストールで少しハマったときの話

カテゴリ: コンピュータ / 公開日: 2016年5月23日(月曜)17:00 / 投稿者: Tom Goodsun

2年ぶりぐらいの更新です。
アホみたいに忙しかった(今も忙しいけど)ので、完全に更新を怠けてました。

ちょっと思うところがあり、Redmineのインストールをしたのですが、中々うまく動かなかったので、その話。

基本的な構成

  • CentOS 7
  • Apache 2.4
  • MySQL 5.7
  • その他最新のものを使用

基本的には以下の参考サイトを見ながら、必要に応じて設定を変更(主にデータベースのところ)していくだけ。
でApacheを再起動すれば、ハイっ!動かない。

Redmine 3.1をCentOS 7.1にインストールする手順

何回インストールしても設定しても、間違いはないはずだ。ということで、Apacheのエラーログを確認してみたところ以下のようなエラーが出ていた。

[Sat May 21 03:03:04.099790 2016] [passenger:error] [pid 18377] *** Passenger could not be initialized because of this error: Apache is configured to log to a pipe, so Passenger cannot be initialized because it doesn't support logging to a pipe. Please configure Passenger with an explicit log file using the `PassengerLogFile` directive.
[Sat May 21 03:03:04.102969 2016] [mpm_prefork:notice] [pid 18377] AH00163: Apache/2.4.6 (CentOS) Phusion_Passenger/5.0.28 configured -- resuming normal operations
[Sat May 21 03:03:04.102991 2016] [core:notice] [pid 18377] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'

どういうことかというと、私のApacheの設定がどうもRailsには合っていないらしい。

私のApacheの設定はこんな感じ。

CentOS 7.x LAMP環境構築マニュアル

問題はここ。

ErrorLog "|/usr/sbin/rotatelogs /var/www/logs/httpd/error_log.%m%d 86400 540"

CustomLog "|/usr/sbin/rotatelogs /var/www/logs/httpd/access_log.%m%d 86400 540" mylogforat env=!no_log

パイプでロギングしているのが対応してないとのこと。ということでエラーメッセージに出ている通り、PassengerLogFileを設定することする。

/etc/httpd/conf.d/redmine.conf
<Directory "/var/lib/redmine/public">
  Require all granted
</Directory>

LoadModule passenger_module /usr/local/lib/ruby/gems/2.3.0/gems/passenger-5.0.28/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /usr/local/lib/ruby/gems/2.3.0/gems/passenger-5.0.28
  PassengerDefaultRuby /usr/local/bin/ruby
</IfModule>

Header always unset "X-Powered-By"
Header always unset "X-Runtime"
PassengerMaxPoolSize 20
PassengerMaxInstancesPerApp 4
PassengerPoolIdleTime 864000
PassengerHighPerformance on
PassengerStatThrottleRate 10
PassengerSpawnMethod smart
PassengerFriendlyErrorPages off
PassengerLogFile /var/www/logs/httpd/error.log
RackBaseURI /redmine

Apache再起動したら普通に動きました。

AWS DynamoDB Localをデーモン化してみた

カテゴリ: コンピュータ / 公開日: 2014年1月13日(月曜)16:38 / 投稿者: Tom Goodsun

AWSのフルマネージドNoSQLサービス「DynamoDB」。
とかくAWSのサービスは素晴らしいと思うが、ローカルでの開発作業には色々問題がある。
そこで、昨年の秋ぐらいだったか、AWSはDynamoDBをローカルで擬似的に実行できるパッケージの無料提供を開始した。
あくまで開発用とのことだが、これで開発しやくなったと思う開発者は多いのではないだろうか。

プログラミングとスターウォーズ・・・キーマンはヨーダ

カテゴリ: WEB、WEBシステム関連 / 公開日: 2013年10月14日(月曜)17:44 / 投稿者: Tom Goodsun

日本ではあまり馴染みが無いのかもしれないけどプログラミングには「ヨーダ記法」(Yoda notation)あるいは「ヨーダ式」(Yoda condition)という書き方がある。
「ヨーダ」とはスターウォーズにでてくる、あのヨーダだ。
あまりスターウォーズを見たことがないのだけど、ヨーダはちょっと古風(?)な英語の言い回しをする。
そこから名付けられたヨーダ記法とは。

プログラムの書き方やルールをあれこれ考えて・・・

カテゴリ: WEB、WEBシステム関連 / 公開日: 2013年10月13日(日曜)17:36 / 投稿者: Tom Goodsun

PHPでプログラムを書くことが多いので、ようやくコーディングスタイルについて本気で考えようと思った。
ここ最近、PHP界隈ではphp-figというグループがメインになって作っているコーディング規約が注目されている(と私は勝手に思っている)。
いくつかのレベルに応じてPSR-0~PSR-3まである。
これにそって最近はプログラミングをしようと思っている。

サブカテゴリ