2016年7月20日水曜日

Sakura VPS + CentOS 6.8でkernel panicになったので対処

普段から使っているSakura VPSの管理用サーバーに突然接続できなくなり、Webの管理メニューから強制再起動、その後の一部始終メモです。

結果としては、カーネル関連の再インストールをしただけで復旧することができました。
サーバー管理者ながら、Kernel回りには触れたことがなかったので、備忘録として残しておきます。

まず結果だけ

yum clean all
yum reinstall kernel
reboot
3つのkernel関連パッケージが再インストールされ、その後の再起動で問題なく起動したため終了です

発覚までの経緯

いつも使っているWebアプリにつながらない。
Web管理画面から管理コンソールを開き、起動ログを確認していたところ、謎のメッセージがでて処理が止まってしまっていることが発覚。
ログを読む限り、ハードディスクが見つからない。
ハードディスクの故障!?なんてことも疑いましたが、まずはブートローダー(GRUB)を開いてみることに。(ハード起動後F2で選択画面)

過去のKernelが選択できたので選ぶと無事起動。
どうやらハードディスクの問題ではなさそうです。
なお、ハードディスクを疑ったのは、並列で稼働しているSakura VPSが普通に起動していたため。

kernelが更新された?

yumの更新ログを確認
cat /var/log/yum.log

Jul 14 03:29:03 Updated: kernel-firmware-2.6.32-642.3.1.el6.noarch
Jul 14 03:29:12 Installed: kernel-2.6.32-642.3.1.el6.x86_64
Jul 14 03:29:14 Updated: kernel-headers-2.6.32-642.3.1.el6.x86_64
Jul 14 03:29:21 Installed: kernel-devel-2.6.32-642.3.1.el6.x86_64
いました。 これが原因である可能性が高いです。
原因となりうるケースをネットで検索していく中で、initrdが書かれないという事象があった事に遭遇。

grub.confの内容調査

cat /etc/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/vda3
#          initrd /initrd-[generic-]version.img
#boot=/dev/vda
default=0
timeout=5
#splashimage=(hd0,0)/grub/splash.xpm.gz
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
terminal --timeout=10 serial console
hiddenmenu
title CentOS (2.6.32-642.3.1.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-642.3.1.el6.x86_64 ro root=UUID=12d557fa-b0a0-4011-bcb0-fa93c7b06543 rd_NO_LUKS rd_NO_MD SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=C rd_NO_LVM rd_NO_DM nomodeset clocksource=kvm-clock console=tty0 console=ttyS0,115200n8r crashkernel=auto
title CentOS (2.6.32-642.1.1.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-642.1.1.el6.x86_64 ro root=UUID=12d557fa-b0a0-4011-bcb0-fa93c7b06543 rd_NO_LUKS rd_NO_MD SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=C rd_NO_LVM rd_NO_DM nomodeset clocksource=kvm-clock console=tty0 console=ttyS0,115200n8r crashkernel=auto
        initrd /initramfs-2.6.32-642.1.1.el6.x86_64.img
title CentOS (2.6.32-642.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=12d557fa-b0a0-4011-bcb0-fa93c7b06543 rd_NO_LUKS rd_NO_MD SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=C rd_NO_LVM rd_NO_DM nomodeset clocksource=kvm-clock console=tty0 console=ttyS0,115200n8r crashkernel=auto
        initrd /initramfs-2.6.32-642.el6.x86_64.img
title CentOS (2.6.32-573.26.1.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-573.26.1.el6.x86_64 ro root=UUID=12d557fa-b0a0-4011-bcb0-fa93c7b06543 rd_NO_LUKS rd_NO_MD SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=C rd_NO_LVM rd_NO_DM nomodeset clocksource=kvm-clock console=tty0 console=ttyS0,115200n8r crashkernel=auto
        initrd /initramfs-2.6.32-573.26.1.el6.x86_64.img
title CentOS (2.6.32-573.22.1.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-573.22.1.el6.x86_64 ro root=UUID=12d557fa-b0a0-4011-bcb0-fa93c7b06543 rd_NO_LUKS rd_NO_MD SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=C rd_NO_LVM rd_NO_DM nomodeset clocksource=kvm-clock console=tty0 console=ttyS0,115200n8r crashkernel=auto
        initrd /initramfs-2.6.32-573.22.1.el6.x86_64.img


確かに、先頭の部分にinitrdの記載がありません。

修復を試みる

initrdを書けば直る可能性を意識しつつ、何かしらの不整合も疑うこととし、再インストールと判断。
yum自体の動作不良も疑うため、キャッシュはクリアしたのちに再インストール
yum clean all
yum reinstall kernel
/etc/grub.confの内容を確認 (抜粋)
terminal --timeout=10 serial console
hiddenmenu
title CentOS (2.6.32-642.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-642.el6.x86_64 ro root=UUID=12d557fa-b0a0-4011-bcb0-fa93c7b06543 rd_NO_LUKS rd_NO_MD SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=C rd_NO_LVM rd_NO_DM nomodeset clocksource=kvm-clock console=tty0 console=ttyS0,115200n8r crashkernel=auto
        initrd /initramfs-2.6.32-642.el6.x86_64.img
title CentOS (2.6.32-642.3.1.el6.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-642.3.1.el6.x86_64 ro root=UUID=12d557fa-b0a0-4011-bcb0-fa93c7b06543 rd_NO_LUKS rd_NO_MD SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=jp106 LANG=C rd_NO_LVM rd_NO_DM nomodeset clocksource=kvm-clock console=tty0 console=ttyS0,115200n8r crashkernel=auto
        initrd /initramfs-2.6.32-642.3.1.el6.x86_64.img
すべての行にinitrdが書かれたので、復旧されたと判断、再起動

起動したので、終了となりました。

2016年7月6日水曜日

MySQLでコメントの文字コードを間違ってしまった場合の探し方

日々データベースを操作していると、ついうっかり、テーブル定義のDDLをShift-JISで作ってしまう場合があります。

そんなとき、すぐわかれば作り直しでよいのですが、気づかず運用してしまった場合に
MySQLのWarningsを確認することで対処する方法をメモします。

【要約】

・文字コード違いのデータが格納されている場合、MySQLのCUIで教えてくれる。

【カラムコメントの確認と直しかた】

 $] mysql -uroot ~ ログイン
> select column_comment from information_schema.columns where table_schema = database();
> show warnings;

 警告があると、教えてくれます。

変更方法(通常のALTER TABLE MODIDY です)
> ALTER TABLE TABLENAME MODIFY COLUMNNAME char(2) DEFAULT NULL COMMENT 'コメントを記載';

【テーブルコメントの確認と直しかた】


> select * from information_schema.tables where table_schema = database();
> show warnings;
> alter table TABLENAME COMMENT 'テーブル名';