MySQLでカラム名を変更しようとしたらERROR 1067 (42000): Invalid default value for ‘column_name’メッセージが出力された

MySQLでカラム名を変更しようとしたらERROR 1067 (42000): Invalid default value for ‘column_name’メッセージが出力された。

原因
エラーの出力されたカラムはDATETIME型でデフォルト値が0000-00-00 00:00:00になっていた。
MySQLのsql_modeにNO_ZERO_IN_DATE、NO_ZERO_DATEが含まれていたためエラーとなっていた。

show variables like 'sql_mode' ;
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| Variable_name | Value                                                                                                                                     |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| sql_mode      | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+---------------+-------------------------------------------------------------------------------------------------------------------------------------------+

対処内容
/etc/my.cnfの中にNO_ZERO_IN_DATE、NO_ZERO_DATEを除いてsql_modeの追加をする。

[mysqld]
sql-mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

/etc/my.cnfを追加したあとにMySQLを再起動する。

systemctl restart mysqld.service

環境
CentOS 7
MySQL 5.7.22

Subversionでどのファイルが追加、変更、削除されたのかをlogで確認する

Subversionでどのファイルが追加、変更、削除されたのかをlogで確認するコマンド

環境
CentOS 7
Subversion 1.7.14

誰が、いつsvn commitしたのかだけを出力する。
svn log -q

だが、いつ、どのファイルを追加、変更、削除したのかを出力する。
svn log -v

revisionを指定して出力する。
svn log -r revision_number1:revision_number2
(例)10から32までのrevsionを指定するとき
svn log -r 10:32

logコマンドのヘルプを読む。
svn help log

CentOSでheadとtailを用いて特定の行を表示する

設定ファイルの特定の行だけ表示したいときがある。
たとえば15行目のみを表示したいとき。

# 上から1~15行目を表示する。
head -15 file_name

# 下から1行目を表示する。
tail -1 file_name

# 組み合わせると上から15行目表示してから
# 下から1行目を表示する。
head -15 file_name | tail -1

Vimのコメントの色がみにくいので変えたい

最近Vimを使っていてコメントの色がみにくいので変えたいと考えていた。
全部解決していないけれど調べたことをメモとして残しておく。

vimコマンドでファイルを開いたらEscキーを押下して以下のコマンドを実行するとコメントの色が緑色になる。
:highlight Comment ctermfg=green

でも、これだと毎回入力しないといけないので常に指定した色でファイルを開くようにしたい。
調べた結果がホームディレクトリ直下に.vimrcを作成して中に上記をコマンドを書いてやればよい。
vim ~/.vimrc

.vimrcを作成してからコメントを含むファイルを開くと一瞬緑色になるけれどすぐに暗い青色に戻ってしまった。
とりあえず、コマンドからは変更できるのでいったんここまでにしておく。

環境
CentOS 7
Vim 7.4
ユーザ root

CentOS7のタイムゾーンがおかしかったので直した

CentOS7のインストールしたときからタイムゾーンがおかしかったけど特に問題がなかったのでそのまま使っていた。
cronを設定するようになったので設定がわかりにくいため直した。

# 現在のTime zoneを確認する。
timedatectl status
# 使用可能なTime zoneを調べる。
# たくさん出てくるので、Asiaでgrepして、moreで少しずつ表示させる。
timedatectl list-timezones | grep Asia | more
# Asia/Tokyoで設定する。
timedatectl set-timezone Asia/Tokyo

Apacheで2つのVirtualHostを設定したら1つがアクセスできなかった

Apacheで2つのVirtualHostディレクティブを設定したら1つがアクセスできなかった。
今回の結論はhttpd.confのListenディレクティブに2つ分のポートを指定していなかったから。

環境
CentOS 7
Apache 2.4.6

状況
VirtualHostディレクティブ

<VirtualHost *:10080>
:
</VirtualHost>

<VirtualHost *:20080>
:
</VirtualHost>

Listenディレクティブ

Listen 10080
Listen 20080    # ←これが抜けていた

「ss -natu | grep 10080」はあるけれど「ss -natu | grep 20080」は出てこない。
「/usr/sbin/httpd -t -f httpd_conf_path」を実施すると「Syntax OK」になる。
設定ファイルのテストをしてもエラーにならないので解決するのに手間取ってしまった。

CentOS7で起動時から有線ネットワークをオンにする設定

CentOS7は初期設定では有線ネットワークがオフになっていた。
毎回手動で直すのは手間だったので起動時にオンにする設定を入れた。

vim /etc/sysconfig/network-scripts/ifcfg-nameでファイルを開いて
ONBOOT=offからONBOOT=yesに変更して保存をする。

1.9. SYSCONFIG ファイルを使ったネットワーク設定

sedコマンドでファイルの中身を置換する

案件で同じプロジェクトの新しいbranchからsvn checkoutしたときに設定などをcheckoutしたマシン用に合わせる必要がある。
例えば以下のtest.cnfファイルの5行目をproductionからdevelopmentに変更するとき。
vimエディタなどで開いて変更してもいいけれどsedコマンドを用いても置換することができる。

test.cnfの中身
# cat -n test.cnf
1
2
3
4
5 $environment = ‘production’;

5行目のproductionをdevelopmentに置換するとき。
sed -i -e “5 s/production/development/g” test.cnf

findとgrepを使ってfunctionの一覧を取得する

プロジェクトのソースコードからfunctionの一覧が取得したくてfindとgrepを使って出力してみた。

OS
CentOS7

条件
ファイルのみ。
拡張子が.php。
パスにpluginと入ったものは除外。
パスにxxxxx、またはyyyyyと入ったものは含む。

実行したコマンド(実際には1行で実行した)

find . -type f
 -a -name "*.php"
 -a -not -ipath "*plugin*"
 -a  \( -ipath "*xxxxx*" -o -ipath "*yyyyy*" \)
 -print | xargs grep 'function'

CentOSでfindコマンドを使っていたときのエラーメッセージ

findコマンドを使っていて以下のメッセージが出力された。

find: 無効な評価式です。二項演算子 ‘-o’ を使用していますが、前項がありません
find: 無効な評価式です。 ‘)’ がどこかにあることが予期されますが、一つも見つかりません。

どこがおかしいのかわからずかなり時間を使ってしまったが原因は条件と\(または\)の間に半角スペースがないのが原因だった。
わかってしまえばそんなことなのだけれど時間を使ってしまった。

// NG
find \(-ipath "*etc*" -o -ipath "*lib*" \)
find \( -ipath "*etc*" -o -ipath "*lib*"\)

// OK
find \( -ipath "*etc*" -o -ipath "*lib*" \)