[MariaDB] MariaDB5.5を10.4にアップグレードする

MariaDB 5.5で前エントリのような問題が起きたので、現時点の安定板の10.4にアップデートしてみる。

稼働中のバージョンは5.5.60。

公式サイトの以下のページの手順に従って作業する。

MariaDB – Setting up MariaDB Repositories – MariaDB
https://downloads.mariadb.org/mariadb/repositories/#distro=CentOS&distro_release=centos7-amd64–centos7&mirror=aarnet_pty_ltd&version=10.3

1. Choose a Distro: CentOS
2. Choose a Release: CentOS 7 (x86_64)
3. Choose a Version: 10.4 [Stable]

前エントリの問題は解決されたことを確認。

参考サイト

CentOS7のMariaDB5.5を10.3にアップグレードする – Qiita
https://qiita.com/egnr-in-6matroom/items/6dbb684ff03a228947bd

[MariaDB] MariaDB5.5でdatetime型のデフォルトnow()は不可

ローカルで問題なかったDBマイグレーションがテストサーバーで失敗した。エラーが起きたのはdatetime型カラムのデフォルトにnow()を指定している箇所。

DBエンジンはMariaDB 5.5.60 (ちなみにローカルはMySQL 5.7.27)。

簡単なSQLで試してみる。

datetime型にnow()をデフォルトにできない。

timestamp型だとnow()をデフォルトにできる

MariaDBの仕様かなと思って調べると以下の記事がヒット。

mysql – MariaDB CURRENT_TIMESTAMP default – Stack Overflow
https://stackoverflow.com/questions/40864951/mariadb-current-timestamp-default

CURRENT_TIMESTAMP as a default for DATETIME type is only available in 10.x.
If you’re using 5.5, it should a TIMESTAMP column.

MariaDBを10.xにアップグレードすれば解決するみたいだ。

参考サイト

MySQLのDATETIME型とTIMESTAMP型の違いを検証してみた – Qiita
https://qiita.com/ykawakami/items/2449a24e3b82ff0cbab6

MySQL :: MySQL 5.6 リファレンスマニュアル :: 11.3.1 DATE、DATETIME、および TIMESTAMP 型
https://dev.mysql.com/doc/refman/5.6/ja/datetime.html

MySQL :: MySQL 5.6 リファレンスマニュアル :: 11.3.5 TIMESTAMP および DATETIME の自動初期化および更新機能
https://dev.mysql.com/doc/refman/5.6/ja/timestamp-initialization.html

mysql – Invalid default value for ‘dateAdded’ – Stack Overflow
https://stackoverflow.com/questions/9005766/invalid-default-value-for-dateadded

[PHP] composerでocramius/package-versionsのインストールに失敗する

ネットで調べると以下の記事がヒット。

Composer plugin installation failed · Issue #1240 · laravel/homestead · GitHub
https://github.com/laravel/homestead/issues/1240

以下のようにオプションを追加してエラー回避。

[開発手法] レガシーコード改善ヒント

レガシーコード満載のプロジェクトに参加することになり、どうしたものかとヒントになりそうな記事を読み漁る。

レガシーコード改善

【資料公開】レガシーコードからの脱却 | Ryuzee.com
https://www.ryuzee.com/contents/blog/7149

翻訳書「レガシーコード改善ガイド」の注目トピック連載一覧:CodeZine(コードジン)
https://codezine.jp/article/corner/308

読んだ: レガシーコード改善ガイド – ひだまりソケットは壊れない
https://vividcode.hatenablog.com/entry/book/working-effectively-with-legacy-code

レガシーコードのメンテナンス担当になったら新人はどうすればいい – Qiita
https://qiita.com/oubakiou/items/300c3e0ab0bd170cb5bc

レガシーコードのテストを書いていくテクニック
https://qiita.com/okapon_pon/items/056c65a69cc5fa182fde

[Laravel] スーパーレガシーな商品発注システムをAngularとLaravelで作り直した話 | Kurashicom Engineers’ Blog
https://www.wantedly.com/companies/kurashicom/post_articles/110326

「書き直した方が早い」は9割のケースで間違いだった – 怠惰を求めて勤勉に行き着く
http://fushiroyama.hatenablog.com/entry/2017/12/01/183453

「書き直したい」 をグッと抑えて小さな改善を積み重ねよう – PSYENCE:MEDIA
https://tech.recruit-mp.co.jp/project-management/14775/

レガシープロジェクトを引き継いだ時、最初にするべき7つのこと – Qiita
https://qiita.com/tonluqclml/items/a7ed2f94225ef8a37b8b

レガシー開発環境を今風の開発に近づけるために一年やってきたこと – Qiita
https://qiita.com/pugiemonn/items/7dc03a0eeeb56a27f992

レガシーコード改善のススメ
https://www.slideshare.net/ahirasawa/ss-39610745

レガシーなプロダクトにテストで向き合う話 | GREE Engineers’ Blog
http://labs.gree.jp/blog/2014/02/10584/

リファクタリング

きれいなコードとは? リファクタリングできれいなコードを書く方法 – Qiita
https://qiita.com/kyntk/items/d60fdbc51df4f1d4c3c7

コードを書く際の指針として見返すサイトまとめ – Qiita
https://qiita.com/kenichi_cc/items/c3ecca7b7d5fc5c6bf2e

1000万行のコードと向き合う3つのステップ――富士ゼロックスはリファクタリングにどう取り組んでいるのか (1/2) – @IT
https://www.atmarkit.co.jp/ait/articles/1507/06/news009.html

VS 2005「リファクタリング支援機能」徹底レビュー(1/5) – @IT
https://www.atmarkit.co.jp/fdotnet/special/vsrefact/vsrefact_01.html

技術的負債

技術的負債 – Qiita
https://qiita.com/erukiti/items/9cc7850250268582dde7

技術的負債とどうやって戦うか – Qiita
https://qiita.com/kamykn/items/ad687e772da454e3f614

GMOペパボ柴田博志が教える。経営者も理解しておくべき「技術的負債」 | flexy(フレキシー)
https://flxy.jp/article/7533

技術的負債への後悔と返済|timakin (ちまきん)|note
https://note.mu/timakin/n/nf7e2a70905d4

組織で技術的負債に立ち向かうための取り組み – Qiita
https://qiita.com/cawpea/items/fd0c6633cd2b0c919d7a

[Unix] テキスト処理に役立つコマンド

sed

【 sed 】コマンド(基礎編)――テキストファイルを編集する:Linux基本コマンドTips(53) – @IT
https://www.atmarkit.co.jp/ait/articles/1610/06/news021.html

sedでこういう時はどう書く? – Qiita
https://qiita.com/hirohiro77/items/7fe2f68781c41777e507

awk

【 awk 】コマンド(基本編)――テキストの加工とパターン処理を行う:Linux基本コマンドTips(115) – @IT
https://www.atmarkit.co.jp/ait/articles/1706/02/news017.html

テキストファイルの特定文字列の行から特定文字列の行までを抽出したい – Qiita
https://qiita.com/usamik26/items/9a2ca29ec30b6baf5280

tr

【 tr 】コマンド――テキストファイルの文字を置換する/削除する:Linux基本コマンドTips(52) – @IT
https://www.atmarkit.co.jp/ait/articles/1610/03/news017.html

linuxでファイルを複数行を一行にする方法 – Qiita
https://qiita.com/zhangxianghong/items/17cbb7ba8cd00337043a

wget

【 wget 】コマンド――URLを指定してファイルをダウンロードする:Linux基本コマンドTips(24) – @IT
https://www.atmarkit.co.jp/ait/articles/1606/20/news024.html

wget の出力をパイプで処理する: rootdown 情報セキュリティブログ
http://rootdown.cocolog-nifty.com/memo/2007/12/wget_6080.html

ハイフンを使った便利な標準入出力指定でのコマンドライン – Qiita
https://qiita.com/bami3/items/d67152d19aa8ac2d47de

[VirtualBox] ゲストOSのクロックを倍速にできるかも?

前回のエントリで、アプリのテストのためにゲストOSに未来の時刻を設定する方法を記した。

テストのための別の方法として、ゲストOSのクロックを速めることができないか模索した。例えばクロックを60倍にできれば、実世界で1秒経過したらシステム上は60秒経過したことになる。その環境なら、60分毎に実行されるクローンジョブは1分毎に実行できる。本当に60分待ったり、システム時刻を手動で進めたりする必要が無い。このアイデアは、以前に携わった組み込み案件でクロックから時刻を生成する処理をいじって、経過テストの時間短縮をした経験からきている。

調べたところ、どうやらVirtualBoxでは時間経過を速めることができるらしい。今回は実際には自分で試すところまでいかなかったが、また必要になったときに役立ちそうなリンクがあったので覚書リンク。

Time Warp in VirtualBox
https://esmithy.net/2016/03/05/time-warp-in-virtualbox/

virtualbox.org • View topic – Speed up System-Clock for Realtime-Simulation
https://forums.virtualbox.org/viewtopic.php?f=1&t=28949

virtualbox.org • View topic – Hardware/system clock speed.
https://forums.virtualbox.org/viewtopic.php?f=6&t=46843

How to Speed Up VirtualBox | Chron.com
https://smallbusiness.chron.com/speed-up-virtualbox-69519.html

[Vagrant] ホストOSとの時刻同期を解除してゲストOSの時刻を変更する

ホストOSの時刻をいじってテストしたいことがある。例えばECサイト開発で注文をいくつか作成しておいて、システム時刻を翌月1日に変更してから月末集計を実行するといった場合。だけど、VagrantのゲストOSでスーパーバイザー権限でdateコマンドを使って時刻を変更するも、瞬時に現在の時刻に戻ってしまう。調べてみると、VagrantではゲストOSとホストOSで時刻を同期する機能が動作しているらしい。

この同期機能を解除しなければテストができない。ネットを検索すると同じことを試みた事例が多く見つかるが、紹介されている手順に倣っても自分の環境ではうまくいかない(ホストOSとの時刻同期が無効にならない)。

いろんな記事を頼りに試行錯誤した結果、Windowsマシンで成功する手順を導けたので覚書き。

WindowsのCommand Promptから

Bashから

参考サイト

VirtualBox – VirtualBoxでの設定変更によるLaravel homesteadでの時刻変更|teratail
https://teratail.com/questions/170918

virtual machine – Is it possible to get a Virtualbox VM always start from same time, if so how? – Super User
https://superuser.com/questions/742924/is-it-possible-to-get-a-virtualbox-vm-always-start-from-same-time-if-so-how

VirtualBox のホストとゲストの時刻同期をする・しない | digitalbox
https://digitalbox.jp/virtualbox-guest-sync-time-host/