MYSQL

2024年(令和6年)の祝祭日のCSVを作りました。以下よりダウンロードできます。

2024年(令和6年)の祝祭日CSV

1月1日(月)元日
1月8日(月)成人の日
2月11日(日)建国記念の日
2月12日(月)振替休日(建国記念の日)
2月23日(金)天皇誕生日
3月20日(水)春分の日
4月29日(月)昭和の日
5月3日(金)憲法記念日
5月4日(土)みどりの日
5月5日(日)こどもの日
5月6日(月)振替休日(こどもの日)
7月15日(月)海の日
8月11日(日)山の日
8月12日(月)振替休日(山の日)
9月16日(月)敬老の日
9月22日(日)秋分の日
9月23日(月)振替休日(秋分の日)
10月14日(月)スポーツの日
11月3日(日)文化の日
11月4日(月)振替休日(文化の日)
11月23日(土)勤労感謝の日
2024(令和6)年の祝日・休日一覧

2024年は結構連休・振替休日が多い印象。

nginx

nginxをアップデート後、起動するものの再起動時にエラーをはいていることに気づきました。

nginx: [warn] the "listen ... http2" directive is deprecated, use the "http2" directive instead in /etc/nginx/conf.d/*****.conf:6

listen … http2ディレクティブはNGINX 1.25.1で非推奨になりました。

該当行を以下の用に修正します。

listen 443 ssl http2;

listen 443 ssl;

に修正。

HTTP/2を有効にする場合は個別に以下のように設定。

listen 443 ssl;
http2 on;

沢山のconfファイルを一気に書き変えたい場合は以下を実行。

sed -i 's/443 ssl http2/443 ssl/gI' *.conf

MYSQL,PHP

MYSQLの文字コードはUTF8だと3バイトまでしか対応していないため上記の様なエラーが出ます。

そこで、DB・テーブルともにutf8mb4に変更し4バイト対応したのですが同様のエラーが出続ける。

原因はPHP側

$cnn->set_charset('utf8mb4');

とすることで解決しました。

Linuxサーバー構築・設定

ログファイルなどlogrotaleで古いファイルが削除されてくれればよいのですが、何故か削除されずにずっと残りHDDを使い切ってしまうことがあります。

logrotaleの設定などをしっかり見直せば良いのですが時間が許さなかったりします。

また、PHPなどが生成するファイルやアップロードした画像ファイルなどでも同様可と思います。

そういう時に、一定期間経過したファイルを削除するコマンドを使います。

find /ディレクトリパス/ -name '*.log' -daystart -mtime +4  -delete

上記は4日経過したファイルを削除します。

Linuxサーバー構築・設定

例えば/homeディレクトリ内のディレクトリで容量を食っているディレクトリがあるとします。一つづつディレクトリを見ていくのは面倒です。

# du -s /home/* | sort -rn | head -10

上記コマンドで使用量の多い順に表示されます。

Linuxサーバー構築・設定,Postfix

たくさんのメールアカウントを作成して、転送先をリスト出力したいときは以下の作業。

# cd /home/
# more ./*/.forward >> /root/hogehoge.txt

MYSQL

Queryの作成をミスって、大量のQueryが溜まってしまうことがあります。MSYQLの接続数上限を超え、以下のエラーが出ます。

mysqli::real_connect(): (HY000/1040): Too many connections

実行中のQuery確認

mysql> show processlist;

上記で実行中のQueryを確認してみると、数百秒経過していないQueryが大量に発生しています。

300秒以上実行しているQueryリスト

mysql -h <HOST> -u <USER> -p -e'SELECT GROUP_CONCAT(ID) FROM information_schema.PROCESSLIST WHERE TIME > 300;'

上記で300秒以上経過しているQueryのプロセスIDがカンマ区切りで帰ってきます。

300秒以上経過しているQueryをまとめてKill

mysqladmin kill <ID>,<ID> -h localhost -u root -p

プロセスIDをコピペし、上記を実行すると数百秒経っても終わっていないQueryをまとめてKillすることができます。

Apache

mod_rewriteでURLを書き換えたい時に、以下のケースで困りました。

https://hogehoge.com/BBB/CCC/DDD/
でアクセスしてきた時には、
https://hogehoge.com/AAA.php?HOGE=$1&HUGA=$2

としたい。

且つ

https://hogehoge.com/BBB/
でアクセスしてきた時には、
https://hogehoge.com/AAA.php

を読ませたい。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond  %{REQUEST_URI} ^/BBB/
RewriteRule ^/BBB/ /AAA\.php [L]
RewriteCond  %{REQUEST_URI} ^/BBB/([a-z_]+)/([0-9]+)/
RewriteRule ^/BBB/([a-z_]+)/([0-9]+)/+ /AAA\.php?CCC=$1&DDD=$2 [L]
</IfModule>

どちらも同じPHPを読ませるので上記の記述で良いと思ったけど、mod_rewriteのレスポンスがものすごく悪く、ページの表示に5秒ほどかかるようになってしまいました。

しっかり、RewriteCondの末尾を書かないと行けないらしい。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond  %{REQUEST_URI} ^/BBB/$
RewriteRule ^/BBB/ /AAA\.php [L]
RewriteCond  %{REQUEST_URI} ^/BBB/([a-z_]+)/([0-9]+)/$
RewriteRule ^/BBB/([a-z_]+)/([0-9]+)/+ /AAA\.php?CCC=$1&DDD=$2 [L]
</IfModule>

上記の様に$をつけたところ正常なレスポンスになりましした。

PHP

# yum install --enablerepo=remi,remi-php71,epel php71-php-bcmath

上記だけだと、phpinfoに出てこないことがあります。Apacheを再起動してもbcmathが出てきません。

/etc/php.d/や/etc/php.d/に必要なファイルがコピーされていないことが原因なので以下を実行し手動でコピーします。

# cp /etc/opt/remi/php70/php.d/20-bcmath.ini /etc/php.d/
# cp /opt/remi/php70/root/usr/lib64/php/modules/bcmath.so /usr/lib64/php/modules/
# systemctl restart httpd
# php -m
[PHP Modules]
bcmath

PHP

CentOS7にComposerをインストールする手順です。PHPはすでにインストールされている前提です。

# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

上記を実行すると、composer-setup.phpというファイルがダウンロードされます。composer-setup.phpを実行します。

# php composer-setup.php

上記を実行するとcomposer.pharが出来上がります。必要のなくなったcomposer-setup.phpは削除します。

# php -r "unlink('composer-setup.php');"

色々な場所・ユーザーで使いたいので、composer.pharを/usr/local/bin/に移動します。

# mv composer.phar /usr/local/bin/composer