Mysql’de bazı durumlarda bazı tablolara erişemeyebilirsiniz. Tablonuzu check ettiniz ve mysqld: Incorrect information in file: hatasını aldınız.
1 2 3 4 5 6 7 8 |
mysql> check table test; +-------------------+-------+----------+----------------------------------------------------------+ | Table | Op | Msg_type | Msg_text | +-------------------+-------+----------+----------------------------------------------------------+ | omer.test| check | Error | Incorrect information in file: './omer/test.frm' | | omer.test| check | error | Corrupt | +-------------------+-------+----------+----------------------------------------------------------+ 2 rows in set (0.00 sec) |
Mysql hata logu aşağıdaki gibi:
1 2 3 4 5 6 7 |
120207 11:50:47 InnoDB: highest supported file format is Barracuda. 120207 11:50:47 InnoDB: Waiting for the background threads to start 120207 11:50:48 InnoDB: 1.1.8 started; log sequence number 5713326 120207 11:50:48 [Note] Event Scheduler: Loaded 0 events 120207 11:50:48 [Note] /usr/local/mysql/bin/mysqld: ready for connections. Version: '5.5.20-log' socket: '/tmp/mysql.sock' port: 3306 MySQL Community Server (GPL) 120207 11:50:57 [ERROR] /usr/local/mysql/bin/mysqld: Incorrect information in file: './omer/test.frm' |
Bu hatada test tablonuza ait frm dosyasının bozulduğuna dair bir hatadır.
.frm dosyasıda neyin nesi dersen;
Mysql Database Metadata dosyasıdır. Her oluşturduğunuz tablonun adı ile bir frm dosyası oluşturulur.
Bir MySQL veri tabanı için biçimlendirme bilgisini veya yapı verisini içerir; veri tabanında
depolanan tabloları belirtir ve alanları ve her tablonun yapısını tanımlar.
FRM dosyaları beraberinde veri tabanında saklanan asıl veriyi içeren bir .MYD(data) dosyası ile kaydedilir. Her iki dosya da MySQL’in veri tabanını tanıması için gereklidir.
Eğer MySQL veri tabanı MyISAM tabloları kullanıyorsa, bir .MYI(index) dosyası da ayrıca kullanılır ve gereklidir.
.frm dosyaları mysql’in data dizininde bulunur. Data dizini neresi öğrenmek isterseniz aşağıdaki komut ile bunu öğrenebilirsiniz.
1 2 3 4 5 6 7 |
mysql> SHOW VARIABLES LIKE 'datadir'; +---------------+-----------------------+ | Variable_name | Value | +---------------+-----------------------+ | datadir | /usr/local/mysql/var/ | +---------------+-----------------------+ 1 row in set (0.00 sec) |
test tablosu için ilgili .frm dosyası Datadir/veritabanı_adı altındadır.
1 2 3 4 5 6 7 8 |
shell> su root shell> cd /usr/local/mysql/var/omer shell> ls test.* test.frm test.MYD test.MYI shell> ls -l test.* -rw-rw---- 1 root root 8566 2006-09-22 11:22 test.frm -rw-rw---- 1 root root 0 2006-09-22 11:22 test.MYD -rw-rw---- 1 root root 1024 2006-09-22 11:22 test.MYI |
hexadecimal-dump kullanarak test.frm dosyasına bakalım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
shell> hexdump -v -C test.frm 00000000 fe 01 09 09 03 00 00 10 01 00 00 30 00 00 10 00 |...........0....| 00000010 06 00 00 00 00 00 00 00 00 00 00 02 08 00 08 00 |................| 00000020 00 05 00 00 00 00 08 00 00 00 00 00 00 00 00 10 |................| 00000030 00 00 00 c0 c3 00 00 10 00 00 00 00 00 00 00 00 |................| 00000040 2f 2f 00 00 20 00 00 00 00 00 00 00 00 00 00 00 |//.. ...........| ... | (many 0s) | 00001000 00 00 00 00 02 00 ff 00 00 00 00 00 00 00 00 00 |................| 00001010 ff 20 20 20 20 20 00 00 06 00 4d 79 49 53 41 4d |. ....MyISAM| ... | (many 0s) | 00002000 6c 01 00 10 00 00 00 00 00 00 00 00 00 00 00 00 |l...............| 00002010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00002020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 2a |...............*| ... 00002100 01 00 01 00 3b 00 05 00 00 00 06 00 0a 00 00 00 |....;...........| 00002110 00 00 00 00 00 00 50 00 16 00 01 00 00 00 00 00 |......P.........| 00002120 3b 00 02 01 02 14 29 20 20 20 20 20 20 20 20 20 |;.....) | 00002130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | | 00002140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 00 | .| 00002150 04 00 08 63 6f 6c 75 6d 6e 31 00 04 08 05 05 00 |...column1......| 00002160 02 00 00 00 80 00 00 00 fe 08 00 00 ff 63 6f 6c |.............col| 00002170 75 6d 6e 31 ff 00 |umn1..| 00002176 |
.frm dosyaları hakkında daha ayrıntılı bilgi için buraya bakabilirsiniz.
Bu bilgilerin ardından gelelim problemin çözümüne;
test tablosuyla aynı yapıya sahip test2 tablosu oluşturalım.
1 2 3 |
CREATE TABLE `test2` ( `t` INT(11) DEFFAULT NULL ) ENGINE=INNODB DEFAULT CHARSET=utf8 |
Daha sonra bir kayıt ekleyelim.
1 |
<span class="kwd">insert</span> <span class="kwd">into</span><span class="pln"> test2 </span><span class="kwd">values</span><span class="pun">(</span><span class="lit">1</span><span class="pun">);</span> |
1 |
[root@omeroner~]cp /usr/local/mysql/var/omer/test2.frm /usr/local/mysql/var/omer/test.frm |
Mysql yeniden başlattıktan sonra tabloya erişmi kontrol edin.