无法启动mysqld/mysql

13

首先我必须说我是一个MySQL新手。

基本上MySQL无法启动并显示以下信息:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysql.sock' (2)

以下是我毁掉一切的步骤:

由于我无法登录我的系统(otrs),我认为恢复旧备份会有所帮助。

在还原过程中,备份管理器说我需要删除旧数据库。我尝试了这个操作,但进程没有完成,所以我取消了它。

之后,我试图重新启动系统,但遇到了很大的问题。当我完成重启后,我尝试运行mysql,但它说找不到mysql.socket。

此时,我认为重新安装mysql可能会更好,但这并没有帮助。

当我尝试将mysqld作为mysql用户启动时,它会提示:

[ERROR] Found 1 prepared transactions! It means that mysqld was not shut down properly last time and critical recovery information (last binlog or tc.log file) was manually deleted after a crash. You have to start mysqld with --tc-heuristic-recover switch to commit or rollback pending transactions. 

尝试两者都没有帮助:

mysql:/root> /usr/sbin/mysqld  --tc-heuristic-recover commit
131213 16:46:00 InnoDB: The InnoDB memory heap is disabled
131213 16:46:00 InnoDB: Mutexes and rw_locks use GCC atomic builtins
131213 16:46:00 InnoDB: Compressed tables use zlib 1.2.7
131213 16:46:00 InnoDB: Using Linux native AIO
131213 16:46:00 InnoDB: Initializing buffer pool, size = 128.0M
131213 16:46:00 InnoDB: Completed initialization of buffer pool
131213 16:46:00 InnoDB: highest supported file format is Barracuda.
131213 16:46:01  InnoDB: Waiting for the background threads to start
131213 16:46:02 Percona XtraDB (http://www.percona.com) 5.5.33-MariaDB-31.1 started; log sequence number 3710898915
131213 16:46:02 [Note] Server socket created on IP: '0.0.0.0'.
131213 16:46:02 [ERROR] Event Scheduler: Failed to open table mysql.event
131213 16:46:02 [ERROR] Event Scheduler: Error while loading from disk.
131213 16:46:02 [Note] Event Scheduler: Purging the queue. 0 events
131213 16:46:02 [ERROR] Aborting

131213 16:46:02  InnoDB: Starting shutdown...
131213 16:46:03  InnoDB: Shutdown completed; log sequence number 3710898915
131213 16:46:03 [Note] /usr/sbin/mysqld: Shutdown complete

无论何时运行systemctl start mysql.service都会失败:

mysql.service - LSB: Start the MySQL database server
          Loaded: loaded (/etc/init.d/mysql)
          Active: failed (Result: timeout) since Fri, 13 Dec 2013 16:27:12 +0100; 23min ago
         Process: 8845 ExecStart=/etc/init.d/mysql start (code=killed, signal=TERM)
          CGroup: name=systemd:/system/mysql.service

Dec 13 16:31:21  mysql[8845]: otrs.user_preferences                              OK
Dec 13 16:31:21  mysql[8845]: otrs.users                                         OK
Dec 13 16:31:21  mysql[8845]: otrs.valid                                         OK
Dec 13 16:31:21  mysql[8845]: otrs.virtual_fs                                    OK
Dec 13 16:31:21  mysql[8845]: otrs.virtual_fs_db                                 OK
Dec 13 16:31:21  mysql[8845]: otrs.virtual_fs_preferences                        OK
Dec 13 16:31:21  mysql[8845]: otrs.web_upload_cache                              OK
Dec 13 16:31:21  mysql[8845]: otrs.xml_storage                                   OK
Dec 13 16:31:21  mysql[8845]: performance_schema
Dec 13 16:31:21  mysql[8845]: Phase 3/3: Running 'mysql_fix_privilege_tables'...

我完全不知道该怎么做。有人能帮我吗? 在不使用mysql DROP命令的情况下,如何删除otrs表格? 这样做有用吗?

谢谢。


我想补充一下,在 Fedora 28 和 MariaDB 10.2.21 服务器崩溃后,我遇到了这个问题。我使用 root 用户执行了 sudo -u mysql mysqld_safe --tc-heuristic-recover=commit 命令,然后使用 systemctl 正常启动了 mariadb 服务,问题得到解决。 - Stefan Midjich
6个回答

25
mysqld --tc-heuristic-recover=ROLLBACK

对我来说没有完全奏效,但是以下方法可行:

mysqld_safe --tc-heuristic-recover=COMMIT

7

我能够在CentOS 6上解决这个问题,方法如下:

service mysql start --tc-heuristic-recover=ROLLBACK

最终舍弃了相关提交。我不确定systemd脚本是否支持传递额外的参数。也许你可以尝试使用=手动运行它。

mysqld --tc-heuristic-recover=ROLLBACK

4
在mysql 5.6.x上,由于这个off-by-one bug的存在(详情请见https://bugs.mysql.com/bug.php?id=70860),我通过以下方式成功解决了该问题:
sudo service mysql start --tc-heuristic-recover=0

这通常是提交事务的操作。


2
如果上述任何方法都不适用于您,请按以下步骤编辑mysql配置文件:sudo nano /etc/mysql/my.cnf,并在[mysqld]下添加tc-heuristic-recover=rollback。然后尝试启动mysql/mariadb服务器sudo systemctl start mysqld.service,它应该会显示错误信息Can't init tc log。不要担心,只需再次编辑配置文件并将tc-heuristic-recover=rollback注释掉。然后再次尝试启动mysql服务器sudo systemctl start mysqld.service,这次应该可以正常工作。最后,使用systemctl status mysqld.service检查状态以确认。

不错的交易,今天对我来说解决了一个Mariadb服务器的问题。 - undefined

1

来自答案 ->> https://www.youtube.com/watch?v=qr-t8ksYO78

打开 my.cnf 文件,注意你可能会找到多个 my.cnf 文件,我不得不查看所有文件才找到这个:

 # The MySQL server
    [mysqld]
    user = mysql
    port=3306
    socket      = /opt/lampp/var/mysql/mysql.sock

复制套接字路径并写入 ->

mysql -u root -p --socket=/opt/lampp/var/mysql/mysql.sock 

谢谢


0
你可以尝试使用我在Centos 7上使用的这个命令,它是有效的:
#mysqld_safe --wsrep-recover --tc-heuristic-recover=ROLLBACK
然后再重新启动服务。

请在您的回答中提供更多细节。目前的写法让人难以理解您的解决方案。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接