CentOS 7 + MySQL 5.7で複数のMySQLインスタンスを起動する方法がとても簡単な件
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のインストールで少しハマったときの話
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の設定はこんな感じ。
問題はここ。
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をデーモン化してみた
AWSのフルマネージドNoSQLサービス「DynamoDB」。
とかくAWSのサービスは素晴らしいと思うが、ローカルでの開発作業には色々問題がある。
そこで、昨年の秋ぐらいだったか、AWSはDynamoDBをローカルで擬似的に実行できるパッケージの無料提供を開始した。
あくまで開発用とのことだが、これで開発しやくなったと思う開発者は多いのではないだろうか。
プログラムするときに覚えておきたい計算式
プログラムを書くときによくやるのに忘れてしまう!あの計算面倒くさい!またこれか!という計算をしなければならない時があると思う。
備忘録として、残しておきたい。
応用することも出来れば、応用することなくそのまま使うことが多いものもあると思う。
Virtual BoxのゲストOSの時刻合わせが実はうまく動作してなかったというオチ
前回の記事:仮想マシン環境を移行した(VMware PlayerからVirtual Boxへ)
前回時刻同期がなおったと思っていたら治ってなかったというオチ。
なので、こんどこそは解決したい。