mysql でエラー

ある日、mysql 5.1 でこんなエラーが多発しました。

/usr/local/mysql/libexec/mysqld: Table './db/table' is marked as crashed and should be repaired

確認して見ると、テーブルが破壊されている様子。
mysqlにログインして、データベースを選択。チェックしてみます。

check table SystemEvents;
+---------------------+-------+----------+-------------------------------------------------------------+
| Table               | Op    | Msg_type | Msg_text                                                    |
+---------------------+-------+----------+-------------------------------------------------------------+
| db_value.table_value| check | warning  | Table is marked as crashed                                  |
| db_value.table_value| check | warning  | 2 clients are using or haven't closed the table properly    |
| db_value.table_value| check | error    | Size of indexfile is: 566045696        Should be: 566129664 |
| db_value.table_value| check | error    | Size of datafile is: 387131476         Should be: 387181260 |
| db_value.table_value| check | error    | Corrupt                                                     |
+---------------------+-------+----------+-------------------------------------------------------------+
5 rows in set (0.05 sec)

ああ、壊れてますね。
myisamならrepairで修正できます。

repair table table;
+---------------------+--------+----------+------------------------------------------------+
| Table               | Op     | Msg_type | Msg_text                                       |
+---------------------+--------+----------+------------------------------------------------+
| db_value.table_value| repair | warning  | Number of rows changed from 2470689 to 2470363 |
| db_value.table_value| repair | status   | OK                                             |
+---------------------+--------+----------+------------------------------------------------+

修正完了しました。

CentOS6 64bit + Perl 5.16.1 + mod_perl 2.0 のコンパイルでエラー

CentOS6 64bit
Perl 5.16.1
mod_perl 2.0.7

上記環境でコンパイルしようとすると以下のようなエラーが出て
mod_perlのコンパイルが通りません。

libperl.a(op.o): relocation R_X86_64_32S against `PL_sv_yes' can not be used when making a shared object; recompile with -fPIC 
libperl.a: could not read symbols: Bad value

海外のフォーラムで解決方法を探ると…
どうやらCentOSの64bitを利用時に、perlのコンパイルオプションが必要のようです。
今回たまたまperl 5.16系を利用する必要があったので、以下のようにして導入しました。

wget "http://www.cpan.org/src/5.0/perl-5.16.1.tar.gz"
tar zxvf perl-5.16.1.tar.gz
cd perl-5.16.1
./Configure -des -Dprefix=/usr/local/perl-5.16.1 -de -Accflags='-fPIC' -Dloclibpth="/usr/lib64"
make
make test
make install

これで、mod_perlを導入。
以下ではapacheもコンパイル導入しているので、apxsの位置が違います。

wget http://perl.apache.org/dist/mod_perl-2.0-current.tar.gz
tar zxvf mod_perl-2.0-current.tar.gz
cd mod_perl-2.0.7
/usr/local/bin/perl Makefile.PL MP_APXS=/usr/local/apache/bin/apxs
make
make install

こんな感じです。

+--------------------------------------------------------------+
|                                                              |
| For details on getting started with mod_perl 2, see:         |
|                                                              |
|   http://perl.apache.org/docs/2.0/user/intro/start_fast.html |
|                                                              |
|                                                              |
| Found a bug?  File a bug report:                             |
|                                                              |
|   http://perl.apache.org/bugs/                               |
|                                                              |
+--------------------------------------------------------------+

無事に導入できました。