XAMPP - 错误: MySQL意外关闭

33

出于某些原因,我重新安装了XAMPP,但MySQL无法工作,在控制台中显示以下错误:

01:56:03  [mysql]   Error: MySQL shutdown unexpectedly.
01:56:03  [mysql]   This may be due to a blocked port, missing dependencies, 
01:56:03  [mysql]   improper privileges, a crash, or a shutdown by another method.
01:56:03  [mysql]   Check the "/xampp/mysql/data/mysql_error.log" file
01:56:03  [mysql]   and the Windows Event Viewer for more clues

当检查"/xampp/mysql/data/mysql_error.log"文件时,我得到以下内容:
130302  1:48:06  InnoDB: Waiting for the background threads to start
130302  1:48:07 InnoDB: 1.1.8 started; log sequence number 1600324627
130302  1:48:07 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
130302  1:48:07 [Note]   - '0.0.0.0' resolves to '0.0.0.0';
130302  1:48:07 [Note] Server socket created on IP: '0.0.0.0'.
130302  1:51:12 [Note] Plugin 'FEDERATED' is disabled.
130302  1:51:12 InnoDB: The InnoDB memory heap is disabled
130302  1:51:12 InnoDB: Mutexes and rw_locks use Windows interlocked functions
130302  1:51:12 InnoDB: Compressed tables use zlib 1.2.3
130302  1:51:12 InnoDB: Initializing buffer pool, size = 16.0M
130302  1:51:12 InnoDB: Completed initialization of buffer pool
130302  1:51:12 InnoDB: highest supported file format is Barracuda.
InnoDB: The log sequence number in ibdata files does not match
InnoDB: the log sequence number in the ib_logfiles!
130302  1:51:12  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
130302  1:51:13  InnoDB: Waiting for the background threads to start
130302  1:51:14 InnoDB: 1.1.8 started; log sequence number 1600324627
130302  1:51:14 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
130302  1:51:14 [Note]   - '0.0.0.0' resolves to '0.0.0.0';
130302  1:51:14 [Note] Server socket created on IP: '0.0.0.0'.
130302  1:56:01 [Note] Plugin 'FEDERATED' is disabled.
130302  1:56:01 InnoDB: The InnoDB memory heap is disabled
130302  1:56:01 InnoDB: Mutexes and rw_locks use Windows interlocked functions
130302  1:56:01 InnoDB: Compressed tables use zlib 1.2.3
130302  1:56:01 InnoDB: Initializing buffer pool, size = 16.0M
130302  1:56:01 InnoDB: Completed initialization of buffer pool
130302  1:56:01 InnoDB: highest supported file format is Barracuda.
InnoDB: The log sequence number in ibdata files does not match
InnoDB: the log sequence number in the ib_logfiles!
130302  1:56:01  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Restoring possible half-written data pages from the doublewrite
InnoDB: buffer...
130302  1:56:02  InnoDB: Waiting for the background threads to start
130302  1:56:03 InnoDB: 1.1.8 started; log sequence number 1600324627
130302  1:56:03 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
130302  1:56:03 [Note]   - '0.0.0.0' resolves to '0.0.0.0';
130302  1:56:03 [Note] Server socket created on IP: '0.0.0.0'.

这只是日志的一部分,完整的日志有点太大了。
需要帮忙吗?

如果你遇到了相同的问题,这可能是你正在寻找的答案:https://dev59.com/MGMl5IYBdhLWcg3w5aiQ#61859561 - josemmo
24个回答

80

在采取任何行动之前,请确保备份所提到的文件夹!

对我来说,以下方法有效:

  1. 退出 XAMPP
  2. 剪切 C:\xampp\mysql\backup 中的所有文件
  3. 粘贴并替换到 C:\xampp\mysql\data
  4. 以管理员身份运行 XAMPP

1
有些人说最好的选择是更改端口,但这会变得混乱不堪。而我只是复制和粘贴文件,保持备份文件不变,这很简单易行。 - Srinivas08
1
请确保备份数据文件夹,例如 data_old,并创建新文件夹 data,然后从备份中粘贴。 - Shiva
你破坏了我的所有安装,现在所有网站都需要一个新的WordPress安装。 - Hammed
令人惊叹的回答,真是救了我的一天。 - undefined
第二次来,它仍然有效。 - undefined
显示剩余4条评论

41
在我的情况下,我做了两件事:
  1. xampp/mysql/backup 文件移动到 xampp/mysql/data
  2. 以管理员身份运行 XAMPP
这对我起作用了 :)

编辑:

重要提示:在尝试此方法之前,请先备份您的 xampp/mysql/data 文件夹。如果您的备份文件夹与数据文件夹不同步(这种情况经常发生),您将用备份文件夹覆盖数据,并且您的表将会丢失。


21
不要这样做,你会失去所有的表。我曾经这样做,现在面临“表不存在于引擎中”的问题。 - Alauddin Ahmed
1
正如@AlauddinAhmed所说。现在如何恢复表格数据? - hamid
1
为什么这个答案得到了很多赞?请不要尝试这个,否则您将失去所有的表和数据库。 - Vishal Nagvadiya
3
尽管MySQL会重新开始工作,但你将失去所有数据。这是一种无用的方法,请不要尝试。如果你因为点赞而非常想尝试,请首先备份备份文件夹。 - garg10may
1
不要尝试这种方法,否则你将会失去你的数据库表。如果你想尝试,请先备份数据文件夹,然后再进行尝试。 - Shiva
显示剩余5条评论

23
首先,您需要在硬盘的某个地方保留以下内容的副本。

C:\xampp\mysql\backup

C:\xampp\mysql\data

之后

复制“C:\xampp\mysql\backup”中的所有内容,并将其粘贴并替换到“C:\xampp\mysql\data”中。

现在您的mysql将在phpmyadmin中工作,但您的表将显示“引擎中未找到表”。

为此,您将需要进入在硬盘上创建的“备份和数据文件夹”的副本中,在那里复制“数据”文件夹中的“ibdata1”文件,然后将其粘贴并替换到“C:\xampp\mysql\data”中。

现在您的表数据将可用。


4
最佳答案,谢谢! - Adam IS
2
问题已经解决了。非常感谢。 - Rajeev
2
这一定是最好的答案。谢谢你,伙计。 - Arif Billah
最佳答案。它很有意义,而且很直接明了。 - Nelson Katale
太好了!这对我有用!谢谢! - Rotimi
显示剩余2条评论

12

注意!不要删除ibdata1文件!

只需按照以下步骤即可完成。

  1. 将文件夹C:\xampp\mysql\data重命名为C:\xampp\mysql\data_old(您可以使用任何名称)
  2. 创建一个新文件夹C:\xampp\mysql\data
  3. 将位于C:\xampp\mysql\backup中的内容复制到新的C:\xampp\mysql\data文件夹中
  4. 将所有存储在C:\xampp\mysql\data_old中的数据库文件夹复制到 C:\xampp\mysql\data 文件夹中(跳过C:\xampp\mysql\data_old中的mysql,performance_schema和phpmyadmin文件夹)
  5. 最后,将C:\xampp\mysql\data_old中的 ibdata1 文件复制并替换到 C:\xampp\mysql\data 文件夹内
  6. 现在从XAMPP控制面板启动MySQL

完成了,享受吧...


2
完美的答案,适用于Windows用户。谢谢。 - Tayyab Hayat

7
如果您的Skype正在运行,请退出并尝试以下操作:
或者
前往已安装的XAMPP/WAMP,搜索httpd.conf文件。 使用TextPad/Notepad打开该文件,搜索Listen或80, 将侦听端口更新为8081并保存该文件。 重新启动XAMPP/WAMP,开始服务器。
或者
按照以下步骤在Skype中进行操作:

1
我在最新版本的Skype上找不到高级选项! - Fernando Torres
还有其他解决方案吗? - Mediad

3
  1. 将文件夹mysql/data更名为mysql/data_old(您可以使用任何名称)
  2. 创建一个新的文件夹mysql/data,将存储在mysql/backup中的内容复制到新的mysql/data文件夹中
  3. 将位于mysql/data_old中的所有数据库文件夹复制到mysql/data中(跳过data_old中的mysql、performance_schema和phpmyadmin文件夹)
  4. 最后,将ibdata1文件从mysql/data_old复制并替换到mysql/data文件夹中
  5. 从XAMPP控制面板启动MySQL

2
如果Apache没有任何问题运行,并且您发现由于系统安全设置而受到阻塞,请允许它而不是阻止或关闭对话框。同时将MySQL的端口号更改为3607,就像之前的3606一样。这对我起作用了。

2
为了解决此问题,
进入您的XAMPP文件夹,
XAMPP -> mysql -> bin -> "my.ini"
打开my.ini配置文件,将几个地方的3306替换为3308,因为3308是一个空闲端口。
XAMPP -> php -> "php.ini"
在“my.ini”文件中所做的与更改端口33063308相同。
然后重启XAMPP服务器。
它就可以正常工作了。

1

我刚接触XAMPP,但我发现这些建议的组合效果最好(至少在Windows 8.1上使用最新版本的XAMPP,注意我测试的电脑上也安装了Skype)。

首先登录Skype并导航到“工具<选项<高级<连接”,然后勾选“使用端口80和443进行额外的传入连接”复选框。保存,关闭并退出Skype。

接下来,在您的XAMPP控制面板上,单击“config< my.ini”,然后将第19行和第27行(应该有端口= 3306)从“3306”更改为“3307”。

此外,您还需要导航到xampp< phpMyAdmin< config.inc并更改第27行,它应该像这样:

$cfg ['Servers'] [$i] ['host'] ='127.0.0.1';

您需要添加“3307”,如下所示:

$cfg ['Servers'] [$i] ['host'] ='127.0.0.1:3307';

现在,打开你的浏览器,当你输入“localhost”时,你应该会看到xampp页面。 此外,如果这是你第一次使用xampp,你可能会在localhost/phpmyadmin/页面上看到一个关于缺少密码的警告(用粉色突出显示)。这很容易解决,只需进入phpmyadmin中的“用户帐户”选项卡,点击“编辑权限”,并输入密码。记得保存所有创建的密码的哈希版本,因为我们接下来要用到它们!-我打开了一个记事本并保存了它们(并编号)。请注意,phpMyadmin会在更改当前会话密码时通知您(这将显示在phpMyadmin页面的顶部),这非常重要,因为您需要那个特定的哈希版本密码。
接下来,您需要在计算机上导航到以下位置“xampp < phpMyAdmin < config.inc”,然后使用文本编辑器打开和编辑文件。您需要在密码的单引号之间放入密码的哈希版本,并将“AllowNoPassword”从true更改为false。
这样就可以了。

1

你的电脑里可能已经安装了MySQL服务器,请尝试卸载它并在XAMPP中启动MySQL。这解决了我的问题。


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