2016-06-14 54 views
0

我正在用mysql-5.5數據啓動mysql-5.6服務器。我收到以下錯誤。我不能運行mysql_upgrade 錯誤啓動服務器:如何修復mysql.user表?

2016-06-14 11:07:54 5827 [Note] InnoDB: Using atomics to ref count buffer pool pages 
2016-06-14 11:07:54 5827 [Note] InnoDB: The InnoDB memory heap is disabled 
2016-06-14 11:07:54 5827 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins 
2016-06-14 11:07:54 5827 [Note] InnoDB: Memory barrier is not used 
2016-06-14 11:07:54 5827 [Note] InnoDB: Compressed tables use zlib 1.2.8 
2016-06-14 11:07:54 5827 [Note] InnoDB: Using Linux native AIO 
2016-06-14 11:07:54 5827 [Note] InnoDB: Using CPU crc32 instructions 
2016-06-14 11:07:54 5827 [Note] InnoDB: Initializing buffer pool, size = 128.0M 
2016-06-14 11:07:54 5827 [Note] InnoDB: Completed initialization of buffer pool 
2016-06-14 11:07:54 5827 [Note] InnoDB: Highest supported file format is Barracuda. 
2016-06-14 11:07:54 5827 [Note] InnoDB: 128 rollback segment(s) are active. 
2016-06-14 11:07:54 5827 [Note] InnoDB: Waiting for purge to start 
2016-06-14 11:07:54 5827 [Note] InnoDB: 5.6.30 started; log sequence number 1600607 
2016-06-14 11:07:54 5827 [Note] Server hostname (bind-address): '*'; port: 3306 
2016-06-14 11:07:54 5827 [Note] IPv6 is available. 
2016-06-14 11:07:54 5827 [Note] - '::' resolves to '::'; 
2016-06-14 11:07:54 5827 [Note] Server socket created on IP: '::'. 
2016-06-14 11:07:54 5827 [ERROR] Fatal error: Can't open and lock privilege tables: Incorrect key file for table 'user'; try to repair it 
160614 11:07:54 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended 

開始用--skip-贈款表

mysqld --skip-grant-tables & 
[1] 6534 
[email protected]:/var/lib/mysql# 2016-06-14 11:16:17 0 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead. 
2016-06-14 11:16:17 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 
2016-06-14 11:16:17 0 [Note] mysqld (mysqld 5.6.30-0ubuntu0.14.04.1) starting as process 6534 ... 
2016-06-14 11:16:18 6534 [Warning] Using unique option prefix myisam-recover instead of myisam-recover-options is deprecated and will be removed in a future release. Please use the full name instead. 
2016-06-14 11:16:18 6534 [Note] Plugin 'FEDERATED' is disabled. 
2016-06-14 11:16:18 6534 [Note] InnoDB: Using atomics to ref count buffer pool pages 
2016-06-14 11:16:18 6534 [Note] InnoDB: The InnoDB memory heap is disabled 
2016-06-14 11:16:18 6534 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins 
2016-06-14 11:16:18 6534 [Note] InnoDB: Memory barrier is not used 
2016-06-14 11:16:18 6534 [Note] InnoDB: Compressed tables use zlib 1.2.8 
2016-06-14 11:16:18 6534 [Note] InnoDB: Using Linux native AIO 
2016-06-14 11:16:18 6534 [Note] InnoDB: Using CPU crc32 instructions 
2016-06-14 11:16:21 6534 [Note] InnoDB: Initializing buffer pool, size = 128.0M 
2016-06-14 11:16:21 6534 [Note] InnoDB: Completed initialization of buffer pool 
2016-06-14 11:16:21 6534 [Note] InnoDB: Highest supported file format is Barracuda. 
2016-06-14 11:16:21 6534 [Note] InnoDB: 128 rollback segment(s) are active. 
2016-06-14 11:16:21 6534 [Note] InnoDB: Waiting for purge to start 
2016-06-14 11:16:21 6534 [Note] InnoDB: 5.6.30 started; log sequence number 1600617 
2016-06-14 11:16:21 6534 [Note] Server hostname (bind-address): '*'; port: 3306 
2016-06-14 11:16:21 6534 [Note] IPv6 is available. 
2016-06-14 11:16:21 6534 [Note] - '::' resolves to '::'; 
2016-06-14 11:16:21 6534 [Note] Server socket created on IP: '::'. 
2016-06-14 11:16:21 6534 [Note] mysqld: ready for connections. 
Version: '5.6.30-0ubuntu0.14.04.1' socket: '/var/run/mysqld/mysqld.sock' port: 3306 (Ubuntu) 

[email protected]:/var/lib/mysql# mysql 
Welcome to the MySQL monitor. Commands end with ; or \g. 
Your MySQL connection id is 1 
Server version: 5.6.30-0ubuntu0.14.04.1 (Ubuntu) 

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. 

Oracle is a registered trademark of Oracle Corporation and/or its 
affiliates. Other names may be trademarks of their respective 
owners. 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 

mysql> select TABLE_NAME,ENGINE from information_schema.tables where TABLE_SCHEMA='mysql'; 
+---------------------------+--------+ 
| TABLE_NAME    | ENGINE | 
+---------------------------+--------+ 
| columns_priv    | MyISAM | 
| db      | MyISAM | 
| event      | MyISAM | 
| func      | MyISAM | 
| general_log    | CSV | 
| help_category    | MyISAM | 
| help_keyword    | MyISAM | 
| help_relation    | MyISAM | 
| help_topic    | MyISAM | 
| innodb_index_stats  | InnoDB | 
| innodb_table_stats  | InnoDB | 
| ndb_binlog_index   | MyISAM | 
| plugin     | MyISAM | 
| proc      | MyISAM | 
| procs_priv    | MyISAM | 
| proxies_priv    | MyISAM | 
| servers     | MyISAM | 
| slave_master_info   | InnoDB | 
| slave_relay_log_info  | InnoDB | 
| slave_worker_info   | InnoDB | 
| slow_log     | CSV | 
| tables_priv    | MyISAM | 
| time_zone     | MyISAM | 
| time_zone_leap_second  | MyISAM | 
| time_zone_name   | MyISAM | 
| time_zone_transition  | MyISAM | 
| time_zone_transition_type | MyISAM | 
| user      | MyISAM | 
+---------------------------+--------+ 
28 rows in set (0.50 sec) 

mysql> repair table mysql.user; 
+------------+--------+----------+-------------------------------------------------------+ 
| Table  | Op  | Msg_type | Msg_text            | 
+------------+--------+----------+-------------------------------------------------------+ 
| mysql.user | repair | Error | Incorrect key file for table 'user'; try to repair it | 
| mysql.user | repair | error | Corrupt            | 
+------------+--------+----------+-------------------------------------------------------+ 
2 rows in set (0.00 sec) 

我怎樣才能修復表?我試過這個,但是我在用戶表中丟失了我的數據。

mysql> repair table mysql.user USE_FRM; 
+------------+--------+----------+--------------------------------------------------+ 
| Table  | Op  | Msg_type | Msg_text           | 
+------------+--------+----------+--------------------------------------------------+ 
| mysql.user | repair | info  | Key 1 - Found wrong stored record at 0   | 
| mysql.user | repair | info  | Found block that points outside data file at 184 | 
| mysql.user | repair | info  | Found block that points outside data file at 292 | 
| mysql.user | repair | info  | Found block that points outside data file at 296 | 
| mysql.user | repair | info  | Found block that points outside data file at 300 | 
| mysql.user | repair | info  | Found block that points outside data file at 304 | 
| mysql.user | repair | info  | Found block that points outside data file at 308 | 
| mysql.user | repair | info  | Found block that points outside data file at 312 | 
| mysql.user | repair | info  | Found block that points outside data file at 316 | 
| mysql.user | repair | info  | Found block that points outside data file at 340 | 
| mysql.user | repair | info  | Found block that points outside data file at 392 | 
| mysql.user | repair | info  | Found block that points outside data file at 396 | 
| mysql.user | repair | info  | Found block that points outside data file at 400 | 
| mysql.user | repair | info  | Found block that points outside data file at 404 | 
| mysql.user | repair | info  | Found block that points outside data file at 408 | 
| mysql.user | repair | info  | Found block that points outside data file at 412 | 
| mysql.user | repair | info  | Found block that points outside data file at 416 | 
| mysql.user | repair | info  | Found block that points outside data file at 420 | 
| mysql.user | repair | info  | Found block that points outside data file at 448 | 
| mysql.user | repair | info  | Found block that points outside data file at 452 | 
| mysql.user | repair | info  | Found block that points outside data file at 456 | 
| mysql.user | repair | info  | Found block that points outside data file at 460 | 
| mysql.user | repair | info  | Found block that points outside data file at 464 | 
| mysql.user | repair | info  | Found block that points outside data file at 468 | 
| mysql.user | repair | info  | Found block that points outside data file at 472 | 
| mysql.user | repair | info  | Found block that points outside data file at 500 | 
| mysql.user | repair | info  | Found block that points outside data file at 504 | 
| mysql.user | repair | info  | Found block that points outside data file at 508 | 
| mysql.user | repair | info  | Found block that points outside data file at 512 | 
| mysql.user | repair | info  | Found block that points outside data file at 516 | 
| mysql.user | repair | info  | Found block that points outside data file at 520 | 
| mysql.user | repair | info  | Found block that points outside data file at 524 | 
| mysql.user | repair | info  | Found block that points outside data file at 528 | 
| mysql.user | repair | info  | Found block that points outside data file at 556 | 
| mysql.user | repair | info  | Found block that points outside data file at 560 | 
| mysql.user | repair | info  | Found block that points outside data file at 564 | 
| mysql.user | repair | info  | Found block that points outside data file at 568 | 
| mysql.user | repair | info  | Found block that points outside data file at 572 | 
| mysql.user | repair | info  | Found block that points outside data file at 576 | 
| mysql.user | repair | info  | Found block that points outside data file at 580 | 
| mysql.user | repair | info  | Found block that points outside data file at 604 | 
| mysql.user | repair | info  | Found block that points outside data file at 608 | 
| mysql.user | repair | info  | Found block that points outside data file at 612 | 
| mysql.user | repair | info  | Found block that points outside data file at 616 | 
| mysql.user | repair | info  | Found block that points outside data file at 620 | 
| mysql.user | repair | info  | Found block that points outside data file at 624 | 
| mysql.user | repair | info  | Found block that points outside data file at 628 | 
| mysql.user | repair | info  | Found block that points outside data file at 632 | 
| mysql.user | repair | status | OK            | 
+------------+--------+----------+--------------------------------------------------+ 
49 rows in set (0.03 sec) 


mysql> select * from mysql.user; 
Empty set (0.01 sec) 

回答

0

問題現在已經解決。每個MYISAM表在數據目錄中都有3個文件。

對於用戶表,

  1. user.frm - 表元數據
  2. user.MYI - 索引
  3. user.MYD就 - 數據

我錯過覆蓋user.frm文件(由於採取碼頭rw變化)。所以user.frm來自mysql-5.6和user.MYI,來自mysql-5.5的user.MYD。 password_expired列中添加了5.6中的mysql用戶表。由於與user.frm和其他文件不兼容,它是不可恢復的。我試圖從mysql-5.5和它的工作中複製user.frm。