用 IPMI 远程重启机器

服务器主板通常支持 IPMI,是主板上的硬件控制的,可以获取一个 IP 远程重启系统,妈妈再也不用担心机器挂掉了。首先安装 ipmitool、加载内核模块,就会生成 /dev/ipmi0 设备。然后进行网络配置。

apt-get install ipmitool
modprobe ipmi_devintf
ipmitool lan set 1 ipsrc dhcp
ipmitool lan set 1 arp respond on
ipmitool lan set 1 auth ADMIN MD5
ipmitool lan set 1 access on

然后检查 IPMI 网卡的网络配置:

# ipmitool lan print 1
Set in Progress         : Set Complete
Auth Type Support       : NONE MD5 PASSWORD
Auth Type Enable        : Callback :
                        : User     :
                        : Operator :
                        : Admin    : MD5
                        : OEM      :
IP Address Source       : DHCP Address
IP Address              : 114.214.197.69
Subnet Mask             : 255.255.255.0
MAC Address             : 00:15:17:65:03:0a
SNMP Community String   :
IP Header               : TTL=0x40 Flags=0x40 Precedence=0x00 TOS=0x10
BMC ARP Control         : ARP Responses Enabled, Gratuitous ARP Disabled
Gratituous ARP Intrvl   : 2.0 seconds
Default Gateway IP      : 114.214.197.254
Default Gateway MAC     : 00:00:00:00:00:00
Backup Gateway IP       : 0.0.0.0
Backup Gateway MAC      : 00:00:00:00:00:00
RMCP+ Cipher Suites     : 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14
Cipher Suite Priv Max   : XXXXXXXXXXXXXXX
                        :     X=Cipher Suite Unused
                        :     c=CALLBACK
                        :     u=USER
                        :     o=OPERATOR
                        :     a=ADMIN
                        :     O=OEM

继续设置管理员用户和密码:

ipmitool user set name 2 admin
ipmitool user set password 2
# 这里输入密码
ipmitool channel setaccess 1 2 link=on ipmi=on callin=on privilege=4
ipmitool user enable 2

然后检查用户密码设置:

# ipmitool user list 1
ID  Name             Callin  Link Auth  IPMI Msg   Channel Priv Limit
2   admin            true    true       true       ADMINISTRATOR

现在就算是配好了。

软重启机器:

ipmitool -U admin -H $hostname power cycle

硬重启机器:

ipmitool -U admin -H $hostname power reset

多谢 @zhsj 给我们科普!

如何修复受损的 MySQL InnoDB 数据库

Blog 服务器文件系统损坏后,由于日志与数据库文件不一致,数据库无法启动。事实上,当时有一个简单粗暴的方法可以启动数据库:修改 /etc/mysql/my.cnf,增加如下的配置:

[mysqld]
innodb_force_recovery = 6

启动后的数据库是只读模式,可以用 mysqldump 命令把数据库 dump 出来,绝大部分数据是完好的。也就是说,文件系统损坏后的数据库,以及使用 rsync 在线备份出来的数据库,尽管都是处于不一致状态的,但是可以忽略日志部分,恢复其大部分数据的。

恢复 blog 的时候,我也查到了 innodb_force_recovery 选项,但只看到了设置它为 1(文档的开头部分),发现启动不起来就没有办法了。事实上这个选项可以设置为 1~6 的不同级别,表示跳过 innodb 数据库恢复的不同步骤。经测试,该值设为 1~5 都不行,只有设置为 6,即完全忽略 redo 和 undo 日志,才能成功启动数据库,也就是 rsync 造成的不一致是比较严重的。

参见 MySQL 官方文档:Forcing InnoDB Recovery

教训:

  1. 看文档要看完整。
  2. 数据库不能使用 rsync 来同步,而要使用 mysqldump 全量导出、DRBD(块设备级别的同步)或者数据库主从复制。