MYSQLの文字コードはUTF8だと3バイトまでしか対応していないため上記の様なエラーが出ます。
そこで、DB・テーブルともにutf8mb4に変更し4バイト対応したのですが同様のエラーが出続ける。
原因はPHP側
$cnn->set_charset('utf8mb4');とすることで解決しました。
Linuxサーバー構築・設定でのメモ
MYSQLの文字コードはUTF8だと3バイトまでしか対応していないため上記の様なエラーが出ます。
そこで、DB・テーブルともにutf8mb4に変更し4バイト対応したのですが同様のエラーが出続ける。
原因はPHP側
$cnn->set_charset('utf8mb4');とすることで解決しました。
ログファイルなどlogrotaleで古いファイルが削除されてくれればよいのですが、何故か削除されずにずっと残りHDDを使い切ってしまうことがあります。
logrotaleの設定などをしっかり見直せば良いのですが時間が許さなかったりします。
また、PHPなどが生成するファイルやアップロードした画像ファイルなどでも同様可と思います。
そういう時に、一定期間経過したファイルを削除するコマンドを使います。
find /ディレクトリパス/ -name '*.log' -daystart -mtime +4 -delete上記は4日経過したファイルを削除します。
例えば/homeディレクトリ内のディレクトリで容量を食っているディレクトリがあるとします。一つづつディレクトリを見ていくのは面倒です。
# du -s /* | sort -rn | head -10上記コマンドで使用量の多い順に表示されます。
上記をGBの単位で表示したい場合は、
# du -s /* | sort -rn | head -10 | awk '{ printf "%.2f GB\t%s\n", $1/1024/1024, $2 }'上記を実行すると以下のような結果が帰ってきます。
362.01 GB /home
295.58 GB /var
3.17 GB /usr
2.00 GB /swapfile
0.17 GB /root
0.11 GB /opt
0.08 GB /boot
0.01 GB /etc
0.00 GB /run
0.00 GB /tmphome と varでかなり使っているようなので、更にこれらのディレクトリの中では何が容量を使っているのか調べます。
# du -s /home/* | sort -rn | head -10 | awk '{ printf "%.2f GB\t%s\n", $1/1024/1024, $2 }'と繰り返して行くと無駄に容量を浪費しているファイルが見つかります。
たくさんのメールアカウントを作成して、転送先をリスト出力したいときは以下の作業。
# cd /home/
# more ./*/.forward >> /root/hogehoge.txt上記だと、.forwardが存在しないディレクトリは出力されないので、転送設定がないディレクトリも出力したい場合は以下。ついでに整形も。
for dir in ./*; do
echo "" >> /root/hogehoge3.txt
echo "=== $dir/.forward ===" >> /root/hogehoge3.txt
if [ -f "$dir/.forward" ]; then
cat "$dir/.forward" >> /root/hogehoge3.txt
else
echo "転送設定なし" >> /root/hogehoge3.txt
fi
echo "" >> /root/hogehoge3.txt
done
Queryの作成をミスって、大量のQueryが溜まってしまうことがあります。MSYQLの接続数上限を超え、以下のエラーが出ます。
mysqli::real_connect(): (HY000/1040): Too many connectionsmysql> show processlist;上記で実行中のQueryを確認してみると、数百秒経過していないQueryが大量に発生しています。
mysql -h <HOST> -u <USER> -p -e'SELECT GROUP_CONCAT(ID) FROM information_schema.PROCESSLIST WHERE TIME > 300;'上記で300秒以上経過しているQueryのプロセスIDがカンマ区切りで帰ってきます。
mysqladmin kill <ID>,<ID> -h localhost -u root -pプロセスIDをコピペし、上記を実行すると数百秒経っても終わっていないQueryをまとめてKillすることができます。
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>上記の様に$をつけたところ正常なレスポンスになりましした。
# 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
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
Googleが作ったWebサイトの高速化モジュールのmod_pagespeed。インストールも設定も簡単なのですが、キャッシュが残って、更新した内容が反映されないということがよくあります。
そういうときには、mod_pagespeedのキャッシュを削除します。
touch /var/cache/mod_pagespeed/cache.flush
ディレクトリ内の特定のLinuxユーザー権限のファイルを探したいときには以下(例:nobody)
find /home/ -user nobody