Pembekuan database MySQL setelah 'digunakan'

17

Baru-baru ini saya membuat kesalahan yang agak bodoh dan merusak instalasi Ubuntu saya. Untuk mengatasinya, saya boot dengan live cd dan menyalin file database. Namun, sekarang saya telah menyalin folder dari instalasi lama ke yang baru, setiap kali saya mengetik "gunakan database_name" itu hanya membeku di ini:

mysql> use my_database_name;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Dan kemudian membeku tanpa memberikan terminal.

Matthew Haworth
sumber

Jawaban:

28

Pada perintah "use" pertama setelah login, MySQL memindai basis data, tabel dan kolom untuk penyelesaian otomatis. Jika Anda memiliki banyak db, tabel bisa memakan waktu cukup lama.

Untuk menghindarinya, luncurkan klien Anda dengan opsi -A (atau --tidak-otomatis-ulang)

mysql -uroot -p -A

Anda juga bisa menambahkan variabel disable_auto_rehash di my.cnf Anda (di bagian [mysql]) jika Anda ingin menonaktifkannya sepenuhnya. Perubahan ini tidak memerlukan reboot (itu adalah klien, bukan server, variabel).

Maxime Fouilleul
sumber
dapat "sebentar" menjadi lebih dari satu hari untuk database ~ 2.5GiB, atau itu terlalu lama?
lucidbrot
2

Dalam kasus saya, "Informasi tabel bacaan" mengambil jumlah waktu yang tidak masuk akal. Ketika saya berlari mysql -e 'show processlist'saya menemukan bahwa proses yang "menggantung" adalah "Menunggu kunci metadata meja". Ini masuk akal karena saya memiliki permintaan yang sudah berjalan lama dari formulir yang create table from select ...berjalan di tempat lain, jadi pada satu tingkat saya bisa memahami bahwa sampai tabel baru selesai dibuat, metadata tentang tabel tidak akan tersedia. (Saya kira akan lebih baik jika pemindaian lengkapi-otomatis hanya menghilangkan tabel "tidak lengkap" dari kueri data meta jika ini memungkinkan.)

wwkudu
sumber
0

📌

Ketika Anda menyalin seluruh database dari sistem lain:

/ var / lib / mysql / *

Anda dapat chown -R mysql: mysql / var / lib / mysql / * dan memulai layanan lagi.

☝ ini menyelesaikan masalah saya 👊

Rafael Lemos
sumber
2
Selamat datang di DBA Stack Exchange! Anda telah memformat ini sebagai kutipan; jika Anda benar-benar mendapatkan solusi ini dari tempat lain, Anda harus menyediakan sumbernya . Jika tidak, harap hapus pemformatannya.
Glorfindel