无法重新启动MySQL的Docker容器,给出错误,如`不能打开mysql.plugin表和`表'mysql.user'不存在`

在服务器空间不足之后,Docker MySQL的文件似乎被损坏了。

当试图重新启动mysql:5.6容器我得到错误[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist

我无法find损坏的文件,并可能删除它或修复权限。

这是一个完整的错误输出:

 $ docker start -a mysql_1 2016-11-23 10:22:17 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 2016-11-23 10:22:17 0 [Note] mysqld (mysqld 5.6.34) starting as process 1 ... 2016-11-23 10:22:17 1 [Note] Plugin 'FEDERATED' is disabled. mysqld: Table 'mysql.plugin' doesn't exist 2016-11-23 10:22:17 1 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it. 2016-11-23 10:22:17 1 [Note] InnoDB: Using atomics to ref count buffer pool pages 2016-11-23 10:22:17 1 [Note] InnoDB: The InnoDB memory heap is disabled 2016-11-23 10:22:17 1 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins 2016-11-23 10:22:17 1 [Note] InnoDB: Memory barrier is not used 2016-11-23 10:22:17 1 [Note] InnoDB: Compressed tables use zlib 1.2.8 2016-11-23 10:22:17 1 [Note] InnoDB: Using Linux native AIO 2016-11-23 10:22:17 1 [Note] InnoDB: Using CPU crc32 instructions 2016-11-23 10:22:17 1 [Note] InnoDB: Initializing buffer pool, size = 128.0M 2016-11-23 10:22:17 1 [Note] InnoDB: Completed initialization of buffer pool 2016-11-23 10:22:17 1 [Note] InnoDB: Highest supported file format is Barracuda. 2016-11-23 10:22:17 1 [Note] InnoDB: Log scan progressed past the checkpoint lsn 49463 2016-11-23 10:22:17 1 [Note] InnoDB: Database was not shutdown normally! 2016-11-23 10:22:17 1 [Note] InnoDB: Starting crash recovery. 2016-11-23 10:22:17 1 [Note] InnoDB: Reading tablespace information from the .ibd files... 2016-11-23 10:22:17 1 [Note] InnoDB: Restoring possible half-written data pages 2016-11-23 10:22:17 1 [Note] InnoDB: from the doublewrite buffer... InnoDB: Doing recovery: scanned up to log sequence number 1600607 2016-11-23 10:22:17 1 [Note] InnoDB: Starting an apply batch of log records to the database... InnoDB: Progress in percent: 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 InnoDB: Apply batch completed 2016-11-23 10:22:18 1 [Note] InnoDB: 128 rollback segment(s) are active. 2016-11-23 10:22:18 1 [Note] InnoDB: Waiting for purge to start 2016-11-23 10:22:18 1 [Note] InnoDB: 5.6.34 started; log sequence number 1600607 2016-11-23 10:22:18 1 [Note] Server hostname (bind-address): '*'; port: 3306 2016-11-23 10:22:18 1 [Note] IPv6 is available. 2016-11-23 10:22:18 1 [Note] - '::' resolves to '::'; 2016-11-23 10:22:18 1 [Note] Server socket created on IP: '::'. 2016-11-23 10:22:18 1 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist 

因此需要docker-compose rm mysql来删除断开的连接,然后再次启动容器。