mysql: Tidak dapat memuat dari mysql.proc. Tabelnya mungkin rusak

22

Mysql dimulai:

/usr/bin/mysqld_safe  --datadir=/srv/mysql/myDB --log-error=/srv/mysql/logs/mysqld-myDB.log --pid-file=/srv/mysql/pids/mysqld-myDB.pid --user=mysql  --socket=/srv/mysql/sockets/mysql-myDB.sock --port=3700

tetapi ketika saya mencoba melakukan sesuatu:

ERROR 1548 (HY000) at line 1: Cannot load from mysql.proc. The table is probably corrupted

Bagaimana memperbaikinya?

$ mysql -V
mysql  Ver 14.14 Distrib 5.1.58, for debian-linux-gnu (x86_64) using readline 6.2

$ lsb_release -a
Distributor ID: Ubuntu
Description:    Ubuntu 11.10
Release:        11.10
Codename:       oneiric

$ sudo mysql_upgrade -uroot -p<password> --force
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/var/run/mysqld/mysqld.sock'
Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/var/run/mysqld/mysqld.sock'
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.event                                        OK
mysql.func                                         OK
mysql.general_log
Error    : You can't use locks with log tables.
status   : OK
mysql.help_category                                OK
mysql.help_keyword                                 OK
mysql.help_relation                                OK
mysql.help_topic                                   OK
mysql.host                                         OK
mysql.ndb_binlog_index                             OK
mysql.plugin                                       OK
mysql.proc                                         OK
mysql.procs_priv                                   OK
mysql.servers                                      OK
mysql.slow_log
Error    : You can't use locks with log tables.
status   : OK
mysql.tables_priv                                  OK
mysql.time_zone                                    OK
mysql.time_zone_leap_second                        OK
mysql.time_zone_name                               OK
mysql.time_zone_transition                         OK
mysql.time_zone_transition_type                    OK
mysql.user                                         OK
Running 'mysql_fix_privilege_tables'...
OK

$ mysqlcheck --port=3700 --socket=/srv/mysql/sockets/mysql-my-env.sock -A -udata_owner -pdata_owner
<all tables> OK 

UPD1: misalnya saya mencoba menghapus prosedur:

mysql> DROP PROCEDURE IF EXISTS mysql.myproc;
ERROR 1548 (HY000): Cannot load from mysql.proc. The table is probably corrupted
mysql>

UPD2:

mysql> REPAIR TABLE mysql.proc;
+------------+--------+----------+-----------------------------------------------------------------------------------------+
| Table      | Op     | Msg_type | Msg_text                                                                                |
+------------+--------+----------+-----------------------------------------------------------------------------------------+
| mysql.proc | repair | error    | 1 when fixing table                                                                     |
| mysql.proc | repair | Error    | Can't change permissions of the file '/srv/mysql/myDB/mysql/proc.MYD' (Errcode: 1) |
| mysql.proc | repair | status   | Operation failed                                                                        |
+------------+--------+----------+-----------------------------------------------------------------------------------------+
3 rows in set (0.04 sec)

Ini aneh, karena:

$ ls -l /srv/mysql/myDB/mysql/proc.MYD
-rwxrwxrwx 1 mysql root 3983252 2012-02-03 22:51 /srv/mysql/myDB/mysql/proc.MYD

UPD3:

$ ls -la /srv/mysql/myDB/mysql
total 8930
drwxrwxrwx  2 mysql root    2480 2012-02-21 13:13 .
drwxrwxrwx 13 mysql root     504 2012-02-21 19:01 ..
-rwxrwxrwx  1 mysql root    8820 2012-02-20 15:50 columns_priv.frm
-rwxrwxrwx  1 mysql root       0 2011-11-12 15:42 columns_priv.MYD
-rwxrwxrwx  1 mysql root    4096 2012-02-20 15:50 columns_priv.MYI
-rwxrwxrwx  1 mysql root    9582 2012-02-20 15:50 db.frm
-rwxrwxrwx  1 mysql root    8360 2011-12-08 02:14 db.MYD
-rwxrwxrwx  1 mysql root    5120 2012-02-20 15:50 db.MYI
-rwxrwxrwx  1 mysql root      54 2011-11-12 15:42 db.opt
-rwxrwxrwx  1 mysql root   10223 2012-02-20 15:50 event.frm
-rwxrwxrwx  1 mysql root       0 2011-11-12 15:42 event.MYD
-rwxrwxrwx  1 mysql root    2048 2012-02-20 15:50 event.MYI
-rwxrwxrwx  1 mysql root    8665 2012-02-20 15:50 func.frm
-rwxrwxrwx  1 mysql root       0 2011-11-12 15:42 func.MYD
-rwxrwxrwx  1 mysql root    1024 2012-02-20 15:50 func.MYI
-rwxrwxrwx  1 mysql root    8700 2012-02-20 15:50 help_category.frm
-rwxrwxrwx  1 mysql root   21497 2011-11-12 15:42 help_category.MYD
-rwxrwxrwx  1 mysql root    3072 2012-02-20 15:50 help_category.MYI
-rwxrwxrwx  1 mysql root    8612 2012-02-20 15:50 help_keyword.frm
-rwxrwxrwx  1 mysql root   88650 2011-11-12 15:42 help_keyword.MYD
-rwxrwxrwx  1 mysql root   16384 2012-02-20 15:50 help_keyword.MYI
-rwxrwxrwx  1 mysql root    8630 2012-02-20 15:50 help_relation.frm
-rwxrwxrwx  1 mysql root    8874 2011-11-12 15:42 help_relation.MYD
-rwxrwxrwx  1 mysql root   16384 2012-02-20 15:50 help_relation.MYI
-rwxrwxrwx  1 mysql root    8770 2012-02-20 15:50 help_topic.frm
-rwxrwxrwx  1 mysql root  414320 2011-11-12 15:42 help_topic.MYD
-rwxrwxrwx  1 mysql root   20480 2012-02-20 15:50 help_topic.MYI
-rwxrwxrwx  1 mysql root    9510 2012-02-20 15:50 host.frm
-rwxrwxrwx  1 mysql root       0 2011-11-12 15:42 host.MYD
-rwxrwxrwx  1 mysql root    2048 2012-02-20 15:50 host.MYI
-rwxrwxrwx  1 mysql root    8554 2011-11-12 15:42 innodb_monitor.frm
-rwxrwxrwx  1 mysql root   98304 2011-11-12 15:55 innodb_monitor.ibd
-rwxrwxrwx  1 mysql root    8592 2012-02-20 15:50 inventory.frm
-rwxrwxrwx  1 mysql root      76 2011-11-12 15:42 inventory.MYD
-rwxrwxrwx  1 mysql root    2048 2012-02-20 15:50 inventory.MYI
-rwxrwxrwx  1 mysql root    8778 2012-02-20 15:50 ndb_binlog_index.frm
-rwxrwxrwx  1 mysql root       0 2011-11-12 15:42 ndb_binlog_index.MYD
-rwxrwxrwx  1 mysql root    1024 2012-02-20 15:50 ndb_binlog_index.MYI
-rwxrwxrwx  1 mysql root    8586 2012-02-20 15:50 plugin.frm
-rwxrwxrwx  1 mysql root       0 2011-11-12 15:42 plugin.MYD
-rwxrwxrwx  1 mysql root    1024 2012-02-20 15:50 plugin.MYI
-rwxrwxrwx  1 mysql root    9996 2012-02-20 15:50 proc.frm
-rwxrwxrwx  1 mysql root 3983252 2012-02-03 22:51 proc.MYD
-rwxrwxrwx  1 mysql root   36864 2012-02-21 13:23 proc.MYI
-rwxrwxrwx  1 mysql root    8875 2012-02-20 15:50 procs_priv.frm
-rwxrwxrwx  1 mysql root    1700 2011-11-12 15:42 procs_priv.MYD
-rwxrwxrwx  1 mysql root    8192 2012-02-20 15:50 procs_priv.MYI
-rwxrwxrwx  1 mysql root 3977704 2012-02-21 13:23 proc.TMD
-rwxrwxrwx  1 mysql root    8800 2012-02-20 15:50 proxies_priv.frm
-rwxrwxrwx  1 mysql root     693 2011-11-12 15:42 proxies_priv.MYD
-rwxrwxrwx  1 mysql root    5120 2012-02-20 15:50 proxies_priv.MYI
-rwxrwxrwx  1 mysql root    8838 2012-02-20 15:50 servers.frm
-rwxrwxrwx  1 mysql root       0 2011-11-12 15:42 servers.MYD
-rwxrwxrwx  1 mysql root    1024 2012-02-20 15:50 servers.MYI
-rwxrwxrwx  1 mysql root    8955 2012-02-20 15:50 tables_priv.frm
-rwxrwxrwx  1 mysql root    5957 2011-11-12 15:42 tables_priv.MYD
-rwxrwxrwx  1 mysql root    8192 2012-02-20 15:50 tables_priv.MYI
-rwxrwxrwx  1 mysql root    8636 2012-02-20 15:50 time_zone.frm
-rwxrwxrwx  1 mysql root    8624 2012-02-20 15:50 time_zone_leap_second.frm
-rwxrwxrwx  1 mysql root       0 2011-11-12 15:42 time_zone_leap_second.MYD
-rwxrwxrwx  1 mysql root    1024 2012-02-20 15:50 time_zone_leap_second.MYI
-rwxrwxrwx  1 mysql root       0 2011-11-12 15:42 time_zone.MYD
-rwxrwxrwx  1 mysql root    1024 2012-02-20 15:50 time_zone.MYI
-rwxrwxrwx  1 mysql root    8606 2012-02-20 15:50 time_zone_name.frm
-rwxrwxrwx  1 mysql root       0 2011-11-12 15:42 time_zone_name.MYD
-rwxrwxrwx  1 mysql root    1024 2012-02-20 15:50 time_zone_name.MYI
-rwxrwxrwx  1 mysql root    8686 2012-02-20 15:50 time_zone_transition.frm
-rwxrwxrwx  1 mysql root       0 2011-11-12 15:42 time_zone_transition.MYD
-rwxrwxrwx  1 mysql root    1024 2012-02-20 15:50 time_zone_transition.MYI
-rwxrwxrwx  1 mysql root    8748 2012-02-20 15:50 time_zone_transition_type.frm
-rwxrwxrwx  1 mysql root       0 2011-11-12 15:42 time_zone_transition_type.MYD
-rwxrwxrwx  1 mysql root    1024 2012-02-20 15:50 time_zone_transition_type.MYI
-rwxrwxrwx  1 mysql root   10630 2012-02-20 15:50 user.frm
-rwxrwxrwx  1 mysql root    5456 2011-11-12 21:01 user.MYD
-rwxrwxrwx  1 mysql root    4096 2012-02-20 15:50 user.MYI
Alex
sumber
Apa "sesuatu" yang Anda coba lakukan ketika Anda mendapatkan kesalahan itu?
jamaah
@nickgrim misalnya saya mencoba menghapus prosedur. lihat contoh di atas.
Alex
Hentikan layanan mysql dan jalankan lsof. Apakah ada sesuatu yang membuka file itu?
longneck
Bisakah Anda juga menempelkan output log yang Anda lihat di log mysql, ketika Anda mencoba melakukan sesuatu.
GeekRide

Jawaban:

52

Ini kemungkinan besar akan diselesaikan ketika menjalankan upgrade MySQL, karena ini tampaknya merupakan hasil dari perubahan skema.

mysql_upgrade -u root -p

Jika nama pengguna Anda untuk akun administratif Anda bukan root, harap ubah dalam contoh di atas.

Mojah
sumber
3
saya perlu menggunakan mysql_upgrade -uadmin -p`cat /etc/psa/.psa.shadow`plesk, untuk berjaga-jaga seandainya seseorang memiliki masalah ini dengan plesk
Ikatan
@Ikatan terima kasih, Anda akan solusi Anda bekerja untuk saya !!!
Dipesh KC
1
Saya mengalami masalah ini dari CentOS ke Debian. Versi MySQL yang sama juga. Hanya mysql_upgrade cepat memperbaiki masalah.
frustasi
Sama seperti @frustratedtech. Menemukan ini bergerak dari CentOS ke Ubuntu dan ini menyelesaikannya. Saya harus menambahkan --forceargumen ke perintah karena saya "memutakhirkan" dari satu versi MySQL ke versi MySQL yang sama.
Nate
Bagi yang memiliki MySQL 5.7. Kolom "kata sandi" diganti nama menjadi "authentication_string".
Darmen Amanbayev
1

Saya juga mengalami masalah ini dan alasannya menunjukkan kesalahan itu karena saya memanggil fungsi yang salah ....

mysql> select count(*) from authmap where strlen(authname) > 255;

ERROR 1548 (HY000): Cannot load from mysql.proc. The table is probably corrupted

mysql> select count(*) from authmap where char_length(authname) > 255;
+----------+
| count(*) |
+----------+
|        0 |
+----------+
1 row in set (0.00 sec)

# mysql --version
mysql  Ver 14.14 Distrib 5.5.41, for Linux (x86_64) using readline 5.1
Jorge Omar Vazquez
sumber
0

Mungkin yang berikut ini akan memperbaikinya?

mysql> REPAIR TABLE mysql.proc;
pendatang
sumber
tolong, lihat upd2
Alex
Bisakah Anda menambahkan hasil ls -la /srv/mysql/myDB/mysql?
jamaah
yakin. tolong, lihat UPD3
Alex