MySQL(Percona 5.6)无法启动。
这个错误发生在我身上好几次。每次,我都必须删除MySQL数据目录并重新安装MySQL。
还有另一种修复MySQL的方法吗? (特别是数据没有被吹走的那个?)
/var/log/mysql/error.log
150214 16:36:39 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
2015-02-14 16:36:40 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.
2015-02-14 16:36:40 0 [Warning] 'THREAD_CONCURRENCY' is deprecated and will be removed in a future release.
2015-02-14 16:36:40 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2015-02-14 16:36:40 1018 [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.
2015-02-14 16:36:40 1018 [Note] Plugin 'FEDERATED' is disabled.
/usr/sbin/mysqld: Incorrect file format 'plugin'
2015-02-14 16:36:40 1018 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
2015-02-14 16:36:40 1018 [Note] InnoDB: Using atomics to ref count buffer pool pages
2015-02-14 16:36:40 1018 [Note] InnoDB: The InnoDB memory heap is disabled
2015-02-14 16:36:40 1018 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2015-02-14 16:36:40 1018 [Note] InnoDB: Memory barrier is not used
2015-02-14 16:36:40 1018 [Note] InnoDB: Compressed tables use zlib 1.2.8
2015-02-14 16:36:40 1018 [Note] InnoDB: Using Linux native AIO
2015-02-14 16:36:40 1018 [Note] InnoDB: Using CPU crc32 instructions
2015-02-14 16:36:40 1018 [Note] InnoDB: Initializing buffer pool, size = 256.0M
2015-02-14 16:36:40 1018 [Note] InnoDB: Completed initialization of buffer pool
2015-02-14 16:36:40 1018 [Note] InnoDB: Highest supported file format is Barracuda.
2015-02-14 16:36:40 1018 [Note] InnoDB: The log sequence numbers 714340126 and 714340126 in ibdata files do not match the log sequence number 716513090 in the ib_logfiles!
2015-02-14 16:36:40 1018 [Note] InnoDB: Database was not shutdown normally!
2015-02-14 16:36:40 1018 [Note] InnoDB: Starting crash recovery.
2015-02-14 16:36:40 1018 [Note] InnoDB: Reading tablespace information from the .ibd files...
2015-02-14 16:36:40 1018 [Note] InnoDB: Restoring possible half-written data pages
2015-02-14 16:36:40 1018 [Note] InnoDB: from the doublewrite buffer...
InnoDB: Last MySQL binlog file position 0 292596, file name binlog.000056
2015-02-14 16:36:40 1018 [Note] InnoDB: 128 rollback segment(s) are active.
2015-02-14 16:36:40 1018 [Note] InnoDB: Waiting for purge to start
2015-02-14 16:36:40 1018 [Note] InnoDB: Percona XtraDB (http://www.percona.com) 5.6.21-70.1 started; log sequence number 716513090
2015-02-14 16:36:40 1018 [Note] Recovering after a crash using binlog
2015-02-14 16:36:40 1018 [Note] Starting crash recovery...
2015-02-14 16:36:40 1018 [Note] Crash recovery finished.
2015-02-14 16:36:40 1018 [Note] RSA private key file not found: /var/lib/mysql//private_key.pem. Some authentication plugins will not work.
2015-02-14 16:36:40 1018 [Note] RSA public key file not found: /var/lib/mysql//public_key.pem. Some authentication plugins will not work.
2015-02-14 16:36:40 1018 [Note] Server hostname (bind-address): '*'; port: 3306
2015-02-14 16:36:40 1018 [Note] IPv6 is available.
2015-02-14 16:36:40 1018 [Note] - '::' resolves to '::';
2015-02-14 16:36:40 1018 [Note] Server socket created on IP: '::'.
2015-02-14 16:36:40 1018 [ERROR] Fatal error: Can't open and lock privilege tables: Incorrect file format 'user'
150214 16:36:40 mysqld_safe mysqld from pid file /tmp/mysqld.pid ended
答案 0 :(得分:15)
您必须修复主机表。为此,请发出以下命令以启动服务器绕过权限系统
在一个终端中,运行
$ sudo mysqld --skip-grant-tables
打开另一个终端并执行这些命令
$ mysql
mysql> use mysql
mysql> repair table host use_frm;
mysql> exit
然后重启mysql服务
$ sudo service mysql restart
答案 1 :(得分:7)
感谢约翰让我走上了正确的轨道,我还有一些其他的箍要跳过我的系统。希望这有助于某人。
这是一个损坏的权限表。可能是由升级或电源故障引起的。我的系统是OpenSUSE 13.2,MySQL 5.6。简单的重新安装无法修复,必须在重新安装OR之前删除所有MySQL的痕迹......
关闭MySQL的所有实例
$ systemctl stop mysql.service
$ pkill -9 mysqld
启动服务器绕过权限系统
$ sudo mysqld_safe --user=root --skip-grant-tables
启动MySQL命令行工具
$ mysql
如果你收到
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
mysqld_safe正在其他地方运行其套接字。找到它。
$ sudo find / -type s
我在/ var / run / mysql / 编辑my.cnf中的套接字行,记下您现有的套接字设置。 我的路线成了
socket=/var/run/mysql/mysql.sock
返回'关闭所有MySQL实例'(这些指令的顶部)。按照它们“启动MySQL命令行工具”进行操作。希望你能成功打开mysql。从mysql命令行。
mysql> use mysql
mysql> repair table user use_frm;
mysql> exit
关闭MySQL的所有实例
$ systemctl stop mysql.service
$ pkill -9 mysqld
重新编辑my.cnf,将套接字行恢复为原始设置。
我不得不重置我的mysql数据目录中的2个文件的权限。
$ chown mysql:mysql server2.err
$ chown mysql:mysql server2.pid
启动MySQL服务器
$ systemctl start mysql.service
然后我与另一个表(db)
得到了相同的原始错误[ERROR] Fatal error: Can't open and lock privilege tables: Incorrect file format 'db'
不得不多次重复上述过程,修改'repair'命令,直到所有权限表都被修复。
mysql> repair table db use_frm;
答案 2 :(得分:0)
如果您正在运行 Docker ,则这里是 @John Linhart 答案的设置:
首先,从mysql
-容器(与用于写入数据库的容器相同)中使用适当的标签启动一个新的docker容器。
$ docker run --rm -it -v <named_volume>:/var/lib/mysql mysql:<tag> /bin/bash
这将启动一个新容器,并在容器中安装正确的命名卷(或安装的卷),并将您作为根用户放入外壳中。 mysqld
-守护进程将拒绝以root用户身份启动,因此我们将以mysql
-user用户身份运行它:
$ whoami
root
$ which mysqld
/usr/sbin/mysqld
$ su mysql
$ whoami
mysql
$ /usr/sbin/mysqld --skip-grant-tables
....
现在要运行SQL命令,我们将从一个新的终端连接到正在运行的容器:
$ docker ps
CONTAINER ID [...]
abc123 [...]
$ docker exec -it abc123 /bin/bash
# We're on the container now!
$ whoami
root
$ mysql
...
然后从那里继续。完成后,通过exit
将容器保留在第二个终端上。运行mysqld
的终端将不会响应CMD + C,因此我们将通过Docker停止容器:
$ docker ps
CONTAINER ID [...]
abc123 [...]
$ docker stop abc123