База данных MySQL зависает после «использования»


17

Я недавно сделал довольно глупую ошибку и испортил мою установку Ubuntu. Чтобы решить эту проблему, я загрузился с live cd и скопировал файлы базы данных. Тем не менее, теперь я скопировал папки из старой установки в новую, всякий раз, когда я набираю «use database_name», он просто зависает на этом:

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

А потом зависает, не отдавая терминал.

Ответы:


28

При первой команде «use» после входа в систему MySQL сканирует базу данных, имена таблиц и столбцов для автоматического завершения. Если у вас много дБ, таблиц это может занять некоторое время.

Чтобы избежать этого, запустите ваш клиент с опцией -A (или --no-auto-rehash)

mysql -uroot -p -A

Вы также можете добавить переменную disable_auto_rehash в my.cnf (в разделе [mysql]), если хотите полностью отключить ее. Это изменение не требует перезагрузки (это клиент, а не сервер, переменная).


Может ли «время» быть больше, чем день для базы данных ~ 2,5 ГБ, или это неоправданно долго?
lucidbrot

2

В моем случае «Чтение информации из таблицы» занимало неоправданное количество времени. Когда я запустился, mysql -e 'show processlist'я обнаружил, что «зависание» процесса было «Ожидание блокировки метаданных таблицы». Это имело некоторый смысл, поскольку у меня был длительный запрос формы, create table from select ...выполняемой в другом месте, поэтому на одном уровне я мог понять, что до тех пор, пока эта новая таблица не будет завершена, метаданные о таблицах не будут доступны. (Полагаю, было бы предпочтительнее, если бы при автозаполнении сканирования любые «неполные» таблицы в запросе метаданных были просто опущены.)


0

📌

Когда вы копируете всю базу данных из другой системы:

/ Вар / Lib / MySQL / *

Вы можете выбрать -R mysql: mysql / var / lib / mysql / * и снова запустить службу.

☝ это решило мою проблему 👊


2
Добро пожаловать в DBA Stack Exchange! Вы отформатировали это как цитату; если вы действительно получили это решение из другого места, вы должны предоставить источник . Если нет, пожалуйста, удалите форматирование.
Глорфиндель
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.