データベースサーバー:MySQL

MySQL

インストール

MySQLインストール
# yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
# yum install mysql mysql-devel mysql-server mysql-utilities

初期化
mysqld –user=mysql –initialize

初期パスワード確認
grep password /var/log/mysqld.log

MySQL初期設定
# mysql_secure_installation
パスワードを設定します。

MySQL自動起動設定
# chkconfig –level 3 mysqld on

MySQLバージョン確認
# mysql –version

設定

CakePHP3/非集約カラムをSELECTできる様にする
※my.cnf
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

操作

MySQLログイン
mysql -u root -p
管理者:rootでログイン

既存データベース一覧表示
show databases;

データベース作成
create database (データベース名);

MySQLログアウト
exit
WEBサーバーへ戻ります。

操作対象データベース指定
use (データベース名)

phpMyAdmin

ブラウザから遠隔操作できるデータベースソフト
CentOSで自宅サーバー構築」参照

インストール
https://www.phpmyadmin.net/downloads/
のファイル一覧からから最新バージョンのURLをコピー

# wget https://files.phpmyadmin.net/phpMyAdmin/4.8.4/phpMyAdmin-4.8.4-all-languages.tar.gz
# tar xzvf phpMyAdmin-4.8.4-all-languages.tar.gz
# mv phpMyAdmin-4.8.4-all-languages /var/www/~/phpMyAdmin

yumでインストールすると古いバージョンがインストールされる(2018/12/16現在)
# yum –enablerepo=epel install -y phpMyAdmin
/etc/phpMyAdmin
/usr/share/phpMyAdmin
が作成される

php-mysqlインストール確認
# rpm -q php-mysql

設定

設定ファイル
/etc/phpMyAdmin/config.inc.php

設定ファイル作成(初回)
# cp config.sample.inc.php config.inc.php
インストール時のデフォルト設定ファイルをコピー

パーミッション変更
# chmod 660 config.inc.php

所有者変更
# chown apache:apache config.inc.php

設定ファイル変更内容
$cfg[‘blowfish_secret’] = ”;

$cfg[‘blowfish_secret’] = ‘(パスワード)’;
追加(日本語化)
$cfg[‘Lang’] = ‘ja-utf-8’;

phpMyAdmin用Apache設定ファイル作成
# vi /etc/httpd/conf.d/phpmyadmin.conf

設定内容
<Location /phpmyadmin>
Order deny,allow
Deny from all
Allow from 127.0.0.1
Allow from 192.168.X
</Location>

暗号化機能拡張
$ yum install php-mcrypt

Git GitHub Pages利用方法

リモートリポジトリ作成

https://github.com/office-yone/office-yone.github.io.git
末尾がgithub.io

リモートリポジトリと同期

git clone https://github.com/office-yone/office-yone.github.io.git targetdir

html作成

cd targetdir
echo "hello world" > index.html

ステージにアップロード、コミット

git add index.html
git commit -m "index.html"

リモートリポジトリにアップロード

リモートリポジトリをブックマーク登録
git remote add origin https://office-yone@github.com/office-yone/office-yone.github.io.git

プッシュ
git push origin master

htmlをブラウザで表示

http://office-yone.github.io/index.html

intlモジュールインストール

参考

さくらのレンタルサーバPHP7環境でintlモジュール有効化

ディレクトリ作成

% mkdir -p ~/usr/local/src
% mkdir -p ~/usr/local/php/extension

ICUのビルド

% cd ~/usr/local/src
% wget http://download.icu-project.org/files/icu4c/58.1/icu4c-58_1-src.tgz
% tar zxvf icu4c-58_1-src.tgz
% cd icu/source
% ./configure –prefix=$HOME/usr/local
% gmake
% gmake install

intlのビルド

php-7.1.7に同梱されているintlをビルド
% cd ~/usr/local/src
% wget https://github.com/php/php-src/archive/php-7.1.7.zip
% unzip php-7.1.7.zip
% mv php-src-php-7.1.7/ext/intl ./intl-php-7.1.7
% rm -rf php-src-php-7.1.7
% cd intl-php-7.1.7
% phpize
% ./configure –with-icu-dir=$HOME/usr/local –with-php-config=/usr/local/php/7.1/bin/php-config
% make

実行ファイルを拡張モジュールディレクトリへ移動

modulesフォルダにできたintl.soを、拡張モジュール指定用のフォルダへコピー
% cp ~/usr/local/src/intl-php-7.1.7/modules/intl.so ~/usr/local/php/extension/

php.ini編集

extension_dir = /home/さくらのユーザー名/usr/local/php/extension
extension=intl.so

Linux 大量のファイルを削除する方法

通常の削除

rm -rf *

ls結果を削除

ファイル数が多すぎる等、rmコマンドが実行できなくなる場合
ls | xargs rm
表示したファイルリストからファイルを削除

ファイル名一覧を読み込んで削除

しかしsakuraの場合ディスクI/Oに制限がある為、lsに失敗する。
ls | head -n 10
数件のみ表示
さえダメな場合

1) ファイルリストをテキストへ出力
ls | head -n 1000 > list.txt

2) ファイルリストを読み込んで削除
cat list.txt | xargs rm

1)~2)を繰り返す

Linux CRON

インストール

yum install crontabs

設定

設定確認

croptab -l

設定ファイル

/etc/crontab

設定コマンド

crontab -e

曜日 コマンド 機能
00 10 * * 4 test.sh 00 10 *
* 4 /~/test.sh
毎週水曜日10:00
*/10 * * * * test.sh */10 * *
* * /~/test.sh
10分毎に実行
0 2 * * * test.sh 0 2 *
* * /~/test.sh
2時に実行
0 2 01 * * test.sh 0 2 01
* * /~/test.sh
毎月1日2時に実行

設定消去

crontab -r

実行ログ

tail -f /var/log/cron

Linux TCPWrappers

TCPWrappersとは

ネットワーク接続制御デーモン
デーモン名:tcpd

各サービスの処理前に接続要求を受け取り、
hosts.allow」と「hosts.deny」を参照して接続可否を判断する
接続を許可する場合は、それぞれのサービスに処理を渡す

設定

書式

daemon_list : host_list


111.222.333.444はFTPアクセス可
vsftpd : 111.222.333.444

全ホストからFTPアクセス可
vsftpd : ALL

全ホストから全サービス可
ALL : ALL

daemon_list

daemon_list 機能
ALL 全デーモン
crond クーロン
httpd Apache
mysqld MySQL
vsftpd FTP

host_list

host_list 機能
ALL 全ホスト
LOCAL 「.」を含まないホスト(例:localhost)
UNKNOWN アクセス元のユーザー名かホスト名のいずれかが不明な場合
KNOWN アクセス元のユーザー名とホスト名が両方ともわかっている場合
PARANOID ホスト名とIPアドレスが異なる場合
EXCEPT 例外
111.222.333.444 IPアドレス
.co.jp ドメイン

/etc/hosts.allow

アクセス許可リスト

/etc/hosts.deny

アクセス拒否リスト

優先順位

hosts.allow 優先


hosts.deny 後回し

ホワイトリスト(許可ホスト)設定方法

※hosts.allow
XXXX : 111.222.333.444

※hosts.deny
XXXX : ALL

リソース調査方法

CPU

CPU使用率

【MS-DOSコマンド】
> typeperf
 -sc 実行回数
 -si 実行間隔(秒)
 "\Processor(_Total)\% Processor Time"
 > 出力先

> typeperf -sc 100 -si 60 "\Processor(_Total)\% Processor Time" > test.txt
※70%未満で正常

【実行結果】
※test.txt
"(PDH-CSV 4.0)","\\DESKTOP-ORAH022\Processor(_Total)\% Processor Time"
計測日時 CPU使用率
"05/14/2017 08:27:49.424","4.750564"
"05/14/2017 08:27:54.428","7.587563"
"05/14/2017 08:27:59.437","7.570684"
"05/14/2017 08:28:04.444","3.045124"
"05/14/2017 08:28:09.449","2.588512"

終了しています。お待ちください…
コマンドは、正しく完了しました。

【Linuxコマンド】
vmstat (実行間隔秒)
-S (単位)
-n ヘッダを1度だけ表示
-t 時間を出力

Sオプション

単位 意味
k 1,000Byte
K 1,024Byte
m 1,000,000Byte
M 1,048,576Byte

例 $ vmstat 60 -S M -n -t >> vmstat.txt

※vmstat.txt(抜粋)
-cpu- —–timestamp—–
us sy JST
2 1 2017-05-18 23:03:55
0 1 2017-05-18 23:03:58
1 1 2017-05-18 23:04:01
0 1 2017-05-18 23:04:04
0 1 2017-05-18 23:04:07
CPU使用率=us+sy

メモリ

メモリ使用率

【全体】
CPU使用率と同様
typeperf "\Memory\Available MBytes"
typeperf "\Memory\Available Bytes"

計測日時 メモリ使用量
"(PDH-CSV 4.0)","\\~\Memory\Available MBytes"
"05/19/2017 06:37:29.586","427.000000"
"05/19/2017 06:37:30.586","427.000000"
"05/19/2017 06:37:31.586","426.000000"

【プロセス単位】
バッチファイルを作成して実行
※CTRL+Cで停止するまで実行継続

MS-DOSコマンド
※memory.bat
@echo off
:retry

tasklist
フィルタリング(省略可)
/FI (フィルタ)

ping localhost -n 実行間隔(秒) > nul
ping localhost -n 10 > nul

goto retry

【実行】
> memory.bat > memory.txt

【実行結果】
memory.txt
2017/05/14 8:33:41.53

イメージ名 PID セッション名 セッション# メモリ使用量
=== === === === === 
System Idle Process 0 Services 0 4 K
System 4 Services 0 11,036 K
smss.exe 412 Services 0 972 K
csrss.exe 860 Services 0 5,088 K
wininit.exe 960 Services 0 5,440 K
csrss.exe 972 Console 1 13,036 K

バッチ ジョブを終了しますか (Y/N)? バッチ ジョブを終了しますか (Y/N)?
2017/05/14 8:33:51.29

繰り返し・・・

フィルタリング

フィルター名 内容 使用例
IMAGENAME プロセス名(イメージ名) tasklist /FI "imagename eq excel*"
PID プロセスID tasklist /FI "pid eq 1000"
SERVICES プロセスが属するサービス名
CPU使用率と同様
例 $ vmstat 60 -S M -n -t >> vmstat.txt

※vmstat.txt(抜粋)
——–memory—- —–timestamp—–
free buff cache JST
421 192 805 2017-05-18 23:03:55
420 192 805 2017-05-18 23:03:58
420 192 805 2017-05-18 23:04:01
420 192 805 2017-05-18 23:04:04
420 192 805 2017-05-18 23:04:07

メモリ使用量=free+buff+cache
メモリ使用率=メモリ使用量/メモリ総量(↓total)

【メモリ情報】
$ free -m

total used free shared buff/cache available
Mem: 2000 565 886 7 548 1263
Swap: 2045 0 2045

【メモリファイル】
/proc/meminfo

キャッシュクリア

1)ページキャッシュのクリア
sysctl -w vm.drop_caches=1

2)ディレクトリエントリ(dentry)とinodeのクリア
sysctl -w vm.drop_caches=2

1)と2)
sysctl -w vm.drop_caches=3

ハードディスク

ハードディスク使用量

バッチファイルを作成して実行
※CTRL+Cで停止するまで実行継続

【MS-DOSコマンド】
※hd.bat
@echo off
:retry
echo %date% %time%
dir C:\
dir D:\
ping localhost -n 10 > nul
goto retry

【実行】
> memory.bat > hd.txt

【実行結果】
2017/05/14 17:24:55.05
ドライブ C のボリューム ラベルは YONE です
ボリューム シリアル番号は 986B-42B6 です

C:\ のディレクトリ

2017/05/01 15:06 1,024 .rnd
2017/05/14 10:15 <DIR> Program Files
2017/05/14 10:15 <DIR> Program Files (x86)
2016/12/19 23:39 <DIR> Users
2017/05/10 19:13 <DIR> Windows

1 個のファイル 1,024 バイト
6 個のディレクトリ 848,175,714,304 バイトの空き領域
ドライブ D のボリューム ラベルは Data です
ボリューム シリアル番号は 2C1F-A7F2 です

D:\ のディレクトリ

2017/05/13 16:18 <DIR> MyData
2017/05/13 05:28 <DIR> MyProject

0 個のファイル 0 バイト
4 個のディレクトリ 23,517,810,688 バイトの空き領域

繰り返し

シェルスクリプトを作成して実行
※CTRL+Cで停止するまで実行継続

【Linuxコマンド】
while [ true ]
do
 date >> hd.txt
 df -h >> hd.txt
 sleep 10
done

【実行】
$ sh hd.sh

【実行結果】
2017年 5月 15日 月曜日 06:25:25 JST
Filesystem Size Used Avail Use% Mounted on
tmpfs 201M 3.6M 197M 2% /run
/dev/sda1 14G 8.1G 4.9G 63% /
tmpfs 1001M 232K 1000M 1% /dev/shm
MyData 50G 29G 22G 57% /media/sf_MyData

繰り返し

ファイルシステム

ファイルシステム情報
$ df -T

inodeの領域
$ df -i

ディレクトリ毎のinode使用量出力
for dir in `ll|grep ^d|grep -v "\./"|awk '{print $9}'`; do echo `find ./$dir -true|wc -l` `pwd`/$dir; done | sort -nr

echo "==== `pwd` ====" ; for i in `ls -1`;do echo -n "## $i ### " ; echo "(`find ./$i -type f |wc -l`)" ;done | sort -r

hydra 使用方法

hydraとは

認証サイトに対するユーザー名/パスワードの総当たりチェックツール
・FTP
・HTTP/HTTPS
・SMTP
等のプロトコルに対応
CVS、SVN等のアプリにも使用可能

設定

インストール

sudo apt install hydra

sudo apt install -y libssl-dev libssh-dev libidn11-dev libpcre3-dev libgtk2.0-dev libmysqlclient-dev libpq-dev libsvn-dev firebird-dev

実行

hydra [-l LOGIN | -L FILE] -P FILE

ユーザ名指定、パスワードファイル利用

hydra -l (ユーザ名) -P pwlist.txt

ユーザ名ファイル、パスワードファイル利用

hydra -L usrlist.txt -P pwlist.txt

パスワードリスト生成

crunchインストール

sudo apt install crunch

パスワード生成

crunch (最小文字数) (最大文字数) (仕様文字列)

小文字英字(文字列指定無し)で3桁
crunch 3 3
→aaa,aab,aac・・・

数字、小文字英字で1~3桁
crunch 1 3 abcdefghijklmnopqrstuvwxyz0123456789
→1aa,1ab,1ac・・・

数字、英字、記号で1~3桁
crunch 1 3 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-_+=~`[]{}|\:;"'<>,.?/

テキストファイルに出力

crunch (最小文字数) (最大文字数) -o (出力対象ファイル)
例 crunch 3 3 -o pwlist.txt

Linux ログ

syslog

syslogとは

linuxのログ出力デーモン
Linuxを含めたアプリ毎のログ出力を管理できる

syslog一覧

出力先 機能
/var/log/boot.log システム起動時のログ
/var/log/mail.log メールシステムのログ
/var/log/cron cronのログ
/var/log/secure 認証関連のログ
/var/log/dmesg システム起動時のdmesgの内容
/var/log/lastlog 最終ログイン情報の記録
/var/log/wtmp ログイン情報の記録
/var/log/anaconda.* インストーラのログ
/var/log/messages 上記に含まれないログ
多くのアプリでのデフォルト出力先
syslog設定

/etc/rsyslog.conf
/etc/syslog.conf

ローテーション設定

/etc/logrotated.conf

TOMCATログ

ログファイル名 機能
catalina.log Tomcat webサーバーの管理関係
catalina.out webサーバーの起動・停止、サービスの開始・停止ログ
localhost.log hostに限定したログ
host-manager.log Tomcat host manager web app関係
ログ出力設定

※server.xml
<Context path="/sampleAP" docBase="/home/sample/webapp">
 <Valve className="org.apache.catalina.valves.AccessLogValve"
  directory="/home/sample/log"
  prefix="access-"
  fileDateFormat="yyyy-MM-dd"
  suffix=".log"/>
</Context>

サーバログ出力設定

(Catalina、標準出力、標準エラー出力)
※logging.properties(Tomcat6以降)
handlers =
 catalina.org.apache.juli.FileHandler,(ファイルに出力するログの設定)
 java.util.logging.ConsoleHandler (コンソールに出力するログの設定:標準出力、標準エラー出力)
.handlers =
 catalina.org.apache.juli.FileHandler,
 java.util.logging.ConsoleHandler
# ファイルに出力するログの設定
catalina.org.apache.juli.FileHandler.level = FINE (ログレベル)
catalina.org.apache.juli.FileHandler.directory = /var/log (ログの出力先)
catalina.org.apache.juli.FileHandler.prefix = catalina. (ログファイルの開始文字)
# コンソールに出力するログの設定:標準出力、標準エラー出力
java.util.logging.ConsoleHandler.leverl = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
# 各コンテキストのログの設定も可能
org.apache.catalina.core.ContainerBase.[sever.xmlのEngineタグのname].[server.xmlのHostタグのname].[コンテキスト].level = INFO
org.apache.catalina.core.ContainerBase.[sever.xmlのEngineタグのname].[server.xmlのHostタグのname].[コンテキスト].handlers= catalina.org.apache.juli.FileHandler
# 例
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/sampleAP].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/sampleAP].handlers= 6sample.org.apache.juli.FileHandler

APCHEログ

WEBサーバー:Apache」参照

SSHログ

/var/log/secure

Linux ディレクトリ構成

/ルートディレクトリ
├ /bin 基本コマンド
├ /boot 起動に必要なファイル
├ /dev デバイスファイル
├ /etc 設定ファイル
  ├ /named.conf ドメイン、サーバー定義ファイル
  ├ /httpd
    ├ /conf/httpd.conf Apache設定ファイル
    └ /conf.d/phpmyadmin.conf phpMyAdmin設定ファイル
  ├ /php.ini PHP設定ファイル(RedHat)
  ├ /php5/cli/php.ini PHP設定ファイル(Debian)
  ├ /sysconfig/network ネットワーク情報
  └ /hosts ホスト情報
├ /home ユーザーのホームディレクトリ(オプション)
├ /lib 共有ライブラリ(オプション)
├ /mnt 一時的なマウントポイント
├ /opt 追加アプリケーション
├ /proc プロセス情報など
├ /root root用ホームディレクトリ(オプション)
├ /sbin システム管理用コマンドなど
├ /tmp 一時的なファイル
├ /usr 各種プログラムなど
└ /var 変更されるデータ
  ├ /named/(ドメイン名).zone ドメイン正引きzoneファイル
  ├ /named/(ドメイン名).rev ドメイン逆引きzoneファイル
  └ /www/html Apache公開ディレクトリ(デフォルト)