Saya mengubah datadir dari instalasi MySQL dan semua pangkalan bergerak dengan benar kecuali satu. Saya dapat terhubung dan USE
database. SHOW TABLES
juga mengembalikan saya semua tabel dengan benar, dan file dari setiap tabel ada di direktori data MySQL.
Namun, ketika saya mencoba SELECT
sesuatu dari tabel, saya mendapatkan pesan kesalahan bahwa tabel tersebut tidak ada. Namun, ini tidak masuk akal karena saya bisa menunjukkan tabel yang sama melalui SHOW TABLES
pernyataan.
Dugaan saya adalah bahwa SHOW TABLES
daftar keberadaan file tetapi tidak memeriksa apakah file rusak atau tidak. Akibatnya, saya bisa daftar file-file itu tetapi tidak mengaksesnya.
Namun demikian, itu hanyalah dugaan. Saya belum pernah melihat ini sebelumnya. Sekarang, saya tidak bisa me-restart database untuk pengujian, tetapi setiap aplikasi lain yang menggunakannya berfungsi dengan baik. Tapi itu hanya dugaan, saya belum pernah melihat ini sebelumnya.
Adakah yang tahu mengapa ini terjadi?
Contoh:
mysql> SHOW TABLES;
+-----------------------+
| Tables_in_database |
+-----------------------+
| TABLE_ONE |
| TABLE_TWO |
| TABLE_THREE |
+-----------------------+
mysql> SELECT * FROM TABLE_ONE;
ERROR 1146 (42S02): Table 'database.TABLE_ONE' doesn't exist
sumber
Jawaban:
Kalau-kalau ada orang yang peduli:
Saya memiliki masalah yang sama setelah menyalin direktori basis data secara langsung menggunakan perintah
Jika Anda melakukan ini dengan database yang menggunakan
InnoDB
tabel, Anda akan mendapatkan kesalahan 'tabel tidak ada' yang disebutkan di atas ini.Masalahnya adalah bahwa Anda memerlukan
ib*
file di root dari datadir MySQL (misalnyaibdata1
,ib_logfile0
danib_logfile1
).Ketika saya menyalinnya, itu berhasil untuk saya.
sumber
chown _mysql:wheel
dir databasename, ibdata, dan semua file dalam dir (gunakanchown -R ...
). Demikian pula, izin tidak benar di dalam dir sehinggachmod -R 660 databasename
diperlukan untuk mendapatkan tabel untuk muncul di basis data.chown
!!! Jadi, semua setelahcp
menggunakan perintah ini ->chown mysql:mysql /var/lib/mysql/ -R
sudo chmod -R 600 /var/lib/mysql
Bagi saya di Mac OS (Instalasi MySQL DMG), restart sederhana dari server MySQL memecahkan masalah. Saya menduga hibernasi yang menyebabkannya.
sumber
sudo /usr/local/mysql/support-files/mysql.server restart
check table TABLE_ONE;
saya mendapat beberapa kesalahan "partisi p2 kembali kesalahan", "idx_blah_1 ditandai sebagai rusak", dan "idx_blah_2 ditandai rusak". Sekarang saya kembali menjalankanoptimize table TABLE_ONE;
dan mendapatkan kesalahan "Tabel 'database.TABLE_ONE' tidak ada".Saya mendapatkan masalah ini ketika kasus untuk nama tabel yang saya gunakan tidak aktif. Jadi tabel disebut 'db' tetapi saya menggunakan 'DB' dalam pernyataan pilih. Pastikan kasingnya sama.
sumber
Kesalahan ini juga dapat terjadi ketika mengatur
lower_case_table_names
ke1
, dan kemudian mencoba mengakses tabel yang dibuat dengan nilai default untuk variabel itu. Dalam hal ini Anda dapat mengembalikannya ke nilai sebelumnya dan Anda akan dapat membaca tabel.sumber
cp -a /var/lib/mysql /var/lib/mysql-backup
/var/lib/mysql
mysqldump >dbase.mysql
/var/lib/mysql
/var/lib/mysql-backup
menjadi/var/lib/mysql
mysqldump < dbase.mysql
sumber
Silakan jalankan kueri:
Sayangnya MySQL memungkinkan karakter unicode dan non-cetak untuk digunakan dalam nama tabel. Jika Anda membuat tabel dengan menyalin kode buat dari beberapa dokumen / situs web, ada kemungkinan bahwa ia memiliki ruang nol-lebar di suatu tempat.
sumber
Saya baru saja menghabiskan tiga hari di mimpi buruk ini. Idealnya, Anda harus memiliki cadangan yang dapat Anda pulihkan, lalu cukup letakkan tabel yang rusak. Kesalahan semacam ini dapat menyebabkan ibdata1 Anda tumbuh besar (ukuran 100GB + untuk tabel sederhana)
Jika Anda tidak memiliki cadangan baru-baru ini, seperti jika Anda mengandalkan mySqlDump, maka cadangan Anda mungkin secara diam-diam rusak di beberapa titik di masa lalu. Anda perlu mengekspor basis data, yang tentu saja tidak dapat Anda lakukan, karena Anda akan mendapatkan kesalahan kunci saat menjalankan mySqlDump.
Jadi, sebagai solusinya, buka
/var/log/mysql/database_name/
dan hapus table_name. *Maka segera cobalah untuk membuang meja; melakukan ini sekarang seharusnya bekerja. Sekarang kembalikan database ke database baru dan bangun kembali tabel yang hilang. Kemudian buang database yang rusak.
Dalam kasus kami, kami juga terus menerima
mysql has gone away
pesan secara acak pada semua basis data; setelah database yang rusak dihapus semuanya kembali normal.sumber
Saya tidak tahu alasannya tetapi dalam kasus saya, saya menyelesaikan menonaktifkan dan mengaktifkan kunci asing
sumber
Saya memiliki masalah yang sama dan saya mencari selama 2-3 hari, tetapi solusi untuk saya benar-benar bodoh.
$ sudo service mysql restart
Sekarang tabel menjadi dapat diakses.
sumber
Ok ini akan terdengar sangat tidak masuk akal, tapi humor saya.
Bagi saya masalah terselesaikan ketika saya mengubah pernyataan saya menjadi ini:
Saya membuat dua perubahan
1.) Membuat huruf kecil nama tabel - Saya tahu !!
2.) Menggunakan simbol kutipan spesifik = ` : Ini adalah kunci di atas TAB Anda
Solusinya memang terdengar tidak masuk akal, tapi berhasil dan ini Sabtu malam dan saya sudah bekerja sejak jam 9 pagi - Jadi saya akan menerimanya :)
Semoga berhasil.
sumber
Saya memiliki masalah ini setelah memutakhirkan WAMP tetapi tidak memiliki cadangan basis data.
Ini bekerja untuk saya:
Hentikan WAMP baru
Salin direktori database yang Anda butuhkan dan file ibdata1 dari instalasi WAMP lama
Hapus
ib_logfile0
danib_logfile1
Mulai WAMP
Anda sekarang harus dapat membuat cadangan dari basis data Anda. Namun setelah server Anda restart lagi Anda masih akan mengalami masalah. Jadi sekarang instal ulang WAMP dan impor basis data Anda.
sumber
Cobalah menjalankan kueri sql untuk membuang tablespace sebelum menyalin file idb:
Salin file idb
Mulai ulang MySql
sumber
Setelah menginstal ulang MySQL saya punya masalah yang sama, tampaknya selama instalasi, beberapa file konfigurasi yang menyimpan data tentang file log InnoDB, file-file ini ib_logfile * (mereka file log kan?), Ditimpa. Untuk mengatasi masalah ini, saya baru saja menghapus file * ib_logfile.
sumber
Apa yang berhasil bagi saya, hanya menjatuhkan meja, meskipun tidak ada. Kemudian saya membuat tabel dan kembali dari dump sql yang dilakukan sebelumnya.
Pasti ada beberapa metabase nama tabel, dan kemungkinan besar masih ada di sana sampai saya menjatuhkannya.
sumber
Punya masalah yang sama dengan tabel hantu. Untungnya punya dump SQL dari sebelum kegagalan.
Dalam kasus saya, saya harus:
/var/mysql
mati ke cadangan/var/mysql/{dbname}
CATATAN: Membutuhkan file dump.
sumber
/var/lib/mysql
alih-alih/var/mysql
Lakukan mysqldump ke basis data:
Pulihkan basis data
Sekarang semua tabel dalam database telah dipulihkan sepenuhnya. Mencoba..
sumber
Saya menginstal MariaDB di komputer baru, menghentikan layanan Mysql mengubah nama folder data menjadi data- Saya memecahkan masalah saya menyalin hanya Mysql \ data \ table_folders dan ibdata1 dari crash data folder MySql HD ke folder data mysql yang baru diinstal.
Saya melewatkan ib_logfile0 dan ib_logfile1 (jika tidak, server tidak memulai layanan)
Memulai layanan mysql.
Kemudian server berjalan.
sumber
Tampaknya masalah harus dilakukan (setidaknya di tambang dan beberapa lainnya) dengan file innodb log yang tidak valid (rusak?). Secara umum, mereka hanya perlu diciptakan kembali.
Berikut adalah solusinya, yang sebagian besar membutuhkan restart mysql.
sumber
Berikut adalah skenario lain (peningkatan versi) :
Saya menginstal ulang OS saya (Mac OS El Captain) dan menginstal versi baru mysql (menggunakan homebrew). Versi yang terinstal (5.7) kebetulan lebih baru dari yang sebelumnya. Kemudian saya menyalin tabel, termasuk file ib *, dan me-restart server. Saya bisa melihat tabel di meja kerja mysql tetapi ketika saya mencoba untuk memilih apa pun, saya mendapat "Tabel tidak ada".
Larutan:
mysql.server stop
ataubrew services stop mysql
mysqld_safe --user=mysql --datadir=/usr/local/var/mysql/
(ubah jalur seperlunya)mysql_upgrade -u root -p password
(di jendela terminal lain)mysqladmin -u root -p password shutdown
mysql.server start
ataubrew services start mysql
Dokumen yang relevan ada di sini .
sumber
Dalam kasus saya, saya telah menetapkan pemicu pada tabel dan kemudian mencoba memasukkan baris dalam tabel. sepertinya, entah bagaimana pemicu itu salah, dan karenanya memasukkan memberikan kesalahan, tabel tidak ada.
sumber
Mungkin Anda memiliki karakter tersembunyi di nama tabel Anda. Itu tidak muncul ketika Anda melakukan tabel acara. Bisakah Anda melakukan "SHOW CREATE TABLE TABLE_ONE" dan tab lengkapi "TABLE_ONE" dan lihat apakah itu memasukkan karakter tersembunyi. Juga, sudahkah Anda mencoba menjatuhkan dan membuat ulang tabel. Hanya untuk memastikan tidak ada yang salah dengan hak istimewa dan tidak ada karakter tersembunyi.
sumber
Masalah yang sama persis setelah impor cadangan TimeMachine. Solusi saya adalah menghentikan server MySQL dan memperbaiki izin baca-tulis pada file ib *.
sumber
Satu jawaban lain yang saya pikir layak diangkat ke sini (karena saya datang ke sini dengan masalah yang sama dan ini ternyata menjadi jawaban bagi saya):
Periksa ulang apakah nama tabel dalam kueri Anda dieja sama persis dengan yang ada di database.
Agak hal yang jelas, pemula, tetapi hal-hal seperti "pengguna" vs "pengguna" dapat membuat orang tersandung dan saya pikir itu akan menjadi jawaban yang bermanfaat untuk ada dalam daftar di sini. :)
sumber
Dalam kasus saya, ketika saya mengimpor file sql yang diekspor, saya mendapatkan kesalahan seperti tabel tidak ada untuk permintaan tabel buat.
Saya menyadari bahwa ada garis bawah pada nama basis data saya dan mysql sedang meletakkan karakter pelarian sebelum itu.
Jadi saya menghapus garis bawah dalam nama database, semuanya berhasil.
Semoga ini bisa membantu orang lain juga.
sumber
Meja saya entah bagaimana telah diubah namanya menjadi
' Customers'
yaitu dengan ruang terdepanIni artinya
a) permintaan terputus
b) meja tidak muncul di tempat yang diharapkan dalam urutan abjad tabel saya, yang dalam kepanikan saya berarti saya tidak bisa melihatnya!
sumber
Dalam kasus saya itu adalah
SQLCA.DBParm
parameter.Saya menggunakan
tetapi harus demikian
Penjelasan:
Anda akan menggabungkan tiga string:
Jangan gunakan spasi di quatermarks. Terima kasih kepada kolega saya Jan.
sumber
Pergi ke:
xampp\mysql\data\dbname
di dalam dbname ada file tablename.frm dan tablename.ibd.
hapus dan restart mysql dan coba lagi.
sumber
Salin hanya
ibdata1
file dari direktori data lama Anda. Jangan menyalinib_logfile1
atauib_logfile0
file. Itu akan menyebabkan MySQL tidak mulai lagi.sumber
Datang lintas masalah yang sama hari ini. Ini adalah masalah mysql "Identifier Case Sensitivity".
Silakan periksa file data yang sesuai. Sangat mungkin bahwa nama file dalam huruf kecil pada sistem file tetapi nama tabel yang tercantum dalam perintah "show tables" dalam huruf besar. Jika variabel sistem "
lower_case_table_names
" adalah 0, kueri akan mengembalikan "tabel tidak ada" karena perbandingan nama adalah case-sensitive ketika "lower_case_table_names
" adalah 0.sumber
Saya memiliki masalah yang sama di windows. Selain menyalin file ib * dan direktori mysql di bawah direktori data thd, saya juga harus mencocokkan file my.ini.
File my.ini dari instalasi saya sebelumnya tidak memiliki baris berikut:
Tetapi instalasi baru saya lakukan. Mungkin karena saya tidak memiliki opsi itu di installer yang lebih lama. Saya menghapus ini dan memulai kembali layanan dan tabel berfungsi seperti yang diharapkan. Singkatnya, pastikan bahwa file my.ini baru adalah replika yang lama, dengan satu-satunya pengecualian adalah datadir, plugin-dir dan port #, tergantung pada instalasi baru Anda.
sumber