“使用”后MySQL数据库冻结


17

我最近犯了一个非常愚蠢的错误,损坏了我的Ubuntu安装。为了解决这个问题,我启动了一个实时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

然后冻结而不给终端。

Answers:


28

登录后,在第一个“使用”命令上,MySQL扫描数据库,表和列的名称以自动完成。如果您有许多数据库,则表可能需要一段时间。

为了避免这种情况,请使用-A选项(或--no-auto-rehash)启动客户端

mysql -uroot -p -A

如果要完全禁用它,也可以在my.cnf(在[mysql]部分中)中添加disable_auto_rehash变量。此更改不需要重新引导(它是客户端,而不是服务器,变量)。


一个〜2.5GiB数据库的“时间”可以超过一天,还是那么长?
lucidbrot

2

就我而言,“读取表信息”所花费的时间不合理。当我运行时,mysql -e 'show processlist'我发现“挂起”的进程是“等待表元数据锁定”。由于我有一个长期查询在create table from select ...其他地方运行的表单的情况,因此这具有某种意义,因此在一个级别上我可以理解,直到完成创建新表之前,有关表的元数据将不可用。(我想如果可能的话,如果自动完成扫描只是从元数据查询中省略了任何“不完整”表,那将是更好的选择。)


0

📌

当你复制其他系统整个数据库:

/ var / lib / mysql / *

您可以使用-R mysql:mysql / var / lib / mysql / *并重新启动服务。

solved这解决了我的问题👊


2
欢迎使用DBA Stack Exchange!您已将其格式化为引号;如果您确实从其他地方获得了此解决方案,则必须提供源。如果没有,请删除格式。
Glorfindel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.