Bagaimana cara menjatuhkan semua tabel dalam database MySQL tanpa menjatuhkan database?
12
Saya perlu membuang semua tabel dalam database tanpa mengetahui nama mereka sebelumnya. Prosedur tipikal adalah menjatuhkan dan kemudian membuat ulang basis data tetapi ini bukan pilihan. Apa cara terbaik untuk melakukannya?
Omong-omong, mengapa Anda menulis '$' sebelum nilai IFS? Mengapa itu tidak terlihat seperti "IFS = '\ n'"?
kolypto
@ o_OTync Menggunakan $''penyebab bash untuk menginterpretasikan urutan backslashed alih-alih menganggapnya harfiah. '\n'akan mengandung tepat \ n, begitu saja, yang $IFSakan mengerti untuk membagi karakter \ dan n. $'\n'akan berisi karakter baris baru, 0x0D. Lihatlah di sini untuk info lebih lanjut: gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting .
Jeff Snider
Saya pikir ini lebih sederhana daripada menggunakan INFORMATION_SCHEMA.
Jika Anda memiliki akses sistem file, maka cukup rm -rf databasename/*:).
Pernyataan Drop database melakukan hal yang sama ... Kutipan dari manual MySQL:
Pernyataan DROP DATABASE menghapus dari direktori database yang diberikan file dan direktori yang dapat dibuat sendiri oleh MySQL selama operasi normal:
Gagasan yang sangat buruk untuk pengaturan non-sepele karena MySQL tidak mengharapkan file-file ini tiba-tiba menghilang dan bisa saja ada di tengah-tengah sejumlah operasi, transaksi, replikasi, kunci ...
bot403
Apakah Anda mempertimbangkan untuk merevisi jawaban Anda untuk memasukkan perintah dan prosedur yang tepat?
Jawaban:
Ada bash one-liner yang lebih sederhana menggunakan mysqldump (dari Thingy Ma Jig Blog ).
Jika Anda mendapatkan kesalahan ini:
Coba yang berikut ini:
Sekarang ia mengabaikan kendala.
sumber
Anda harus menggunakan tabel information_schema untuk mengambil metadata tentang database, dan kemudian drop tabel yang terdaftar di sana.
sumber
Anda dapat mencoba skrip shell cepat untuk melakukannya juga:
Hapus
echo
setelah Anda memeriksa bahwa itu akan melakukan apa yang Anda harapkan.sumber
$''
penyebab bash untuk menginterpretasikan urutan backslashed alih-alih menganggapnya harfiah.'\n'
akan mengandung tepat \ n, begitu saja, yang$IFS
akan mengerti untuk membagi karakter \ dan n.$'\n'
akan berisi karakter baris baru, 0x0D. Lihatlah di sini untuk info lebih lanjut: gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting .Ada entri di blog Xaprb baru-baru ini yang mencakup ini dengan baik.
Ini termasuk mengapa menggunakan
INFORMATION_SCHEMA
tidak selalu merupakan hal yang baik dan merujuk pada alat dari orang-orang cantik di Maatkit .Coba yang berikut ini dengan
mk-find
:Jika Anda puas dengan hasilnya, maka:
sumber
Jika Anda memiliki akses sistem file, maka cukup
rm -rf databasename/*
:).Pernyataan Drop database melakukan hal yang sama ... Kutipan dari manual MySQL:
Pernyataan DROP DATABASE menghapus dari direktori database yang diberikan file dan direktori yang dapat dibuat sendiri oleh MySQL selama operasi normal:
sumber