mysql 帮助-服务器没有空间后无法重新启动

mysql 帮助-服务器没有空间后无法重新启动

最近,我的服务器磁盘满了,因此 mysql 停止工作。在我进行了一些清理并且服务器再次有足够的空间后,mysql 仍然无法重新启动。

root@admin:/# service mysql status
● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: activating (start) since Fri 2022-08-12 10:20:57 CEST; 1s ago
    Process: 2062543 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
   Main PID: 2062551 (mysqld)
     Status: "Server startup in progress"
      Tasks: 17 (limit: 38428)
     Memory: 1.8G
     CGroup: /system.slice/mysql.service
             └─2062551 /usr/sbin/mysqld

aug 12 10:20:57 admin systemd[1]: Starting MySQL Community Server...
root@admin:/# service mysql restart

以下是来自 /var/log/mysql/error.log 的最新错误日志:

2022-08-12T08:21:45.072730Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2022-08-12T08:21:46.588489Z 1 [ERROR] [MY-012574] [InnoDB] Unable to lock ./#innodb_redo/#ib_redo0 error: 13
2022-08-12T08:21:46.588749Z 1 [ERROR] [MY-012894] [InnoDB] Unable to open './#innodb_redo/#ib_redo0' (error: 11).
2022-08-12T08:21:46.588768Z 1 [ERROR] [MY-012930] [InnoDB] Plugin initialization aborted with error Cannot open a file.
2022-08-12T08:21:46.718858Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
2022-08-12T08:21:46.719078Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2022-08-12T08:21:46.719103Z 0 [ERROR] [MY-010119] [Server] Aborting
2022-08-12T08:21:46.737767Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.30-0ubuntu0.20.04.2)  (Ubuntu).
2022-08-12T08:21:47.569129Z 0 [Warning] [MY-000081] [Server] option 'thread_cache_size': unsigned value 67108864 adjusted to 16384.
2022-08-12T08:21:47.574505Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.30-0ubuntu0.20.04.2) starting as process 2063159
2022-08-12T08:21:47.813585Z 0 [Warning] [MY-013907] [InnoDB] Deprecated configuration parameters innodb_log_file_size and/or innodb_log_files_in_group have been used to compute innodb_redo_log_capacity=2147483648. Please use innodb_redo_log_capacity instead.
2022-08-12T08:21:47.816611Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2022-08-12T08:21:49.365445Z 1 [ERROR] [MY-012574] [InnoDB] Unable to lock ./#innodb_redo/#ib_redo0 error: 13
2022-08-12T08:21:49.365718Z 1 [ERROR] [MY-012894] [InnoDB] Unable to open './#innodb_redo/#ib_redo0' (error: 11).
2022-08-12T08:21:49.366083Z 1 [ERROR] [MY-012930] [InnoDB] Plugin initialization aborted with error Cannot open a file.
2022-08-12T08:21:49.472341Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
2022-08-12T08:21:49.472574Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2022-08-12T08:21:49.472605Z 0 [ERROR] [MY-010119] [Server] Aborting
2022-08-12T08:21:49.491138Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.30-0ubuntu0.20.04.2)  (Ubuntu).

有人能说出什么问题吗?

答案1

root:root对 MySQL 重做目录和文件拥有权限肯定会导致一些读取问题。这些应该mysql:mysql如下面的目录列表所示:

drwx------  9 mysql mysql     20480  8月 12 00:00  ./
drwxr-xr-x 77 root  root       4096  7月 14 01:34  ../
...
-rw-r-----  1 mysql mysql   2359296  8月 12 00:00 '#ib_16384_0.dblwr'
-rw-r-----  1 mysql mysql  10747904  7月 29 06:51 '#ib_16384_1.dblwr'
-rw-r-----  1 mysql mysql      6687  7月 29 06:51  ib_buffer_pool
-rw-r-----  1 mysql mysql 549453824  8月 12 00:00  ibdata1
-rw-r-----  1 mysql mysql  12582912  7月 29 06:52  ibtmp1
drwxr-x---  2 mysql mysql      4096  7月 29 06:51 '#innodb_redo'/
drwxr-x---  2 mysql mysql      4096  7月 29 06:51 '#innodb_temp'/
drwxr-x---  2 mysql mysql      4096  7月 29 06:51  mysql/
-rw-r-----  1 mysql mysql  37748736  7月 29 06:52  mysql.ibd
...
root@carbon:/var/lib/mysql# ll \#innodb_redo/
total 2097184
drwxr-x--- 2 mysql mysql     4096  7月 29 06:51  ./
drwx------ 9 mysql mysql    20480  8月 12 00:00  ../
-rw-r----- 1 mysql mysql 67108864  8月 12 00:00 '#ib_redo0'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo10_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo11_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo12_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo13_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo14_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo15_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo16_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo17_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo18_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo19_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo1_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo20_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo21_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo22_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo23_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo24_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo25_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo26_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo27_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo28_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo29_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo2_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo30_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo31_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo3_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo4_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo5_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo6_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo7_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo8_tmp'
-rw-r----- 1 mysql mysql 67108864  7月 29 06:51 '#ib_redo9_tmp'

请注意,此处的权限与您在评论中列出的权限截然不同。这可能表明您的 MySQL 文件存在更大的问题,但对于这个特定问题,让我们更正重做目录和日志:

  1. 恢复'#innodb_redo'目录权限:
    sudo chmod 750 /var/lib/mysql/#innodb_redo
    
    笔记:sudo如果您已经设置为超级用户,则无需使用。
  2. 恢复#ib_redo文件权限:
    sudo chmod 640 /var/lib/mysql/#innodb_redo/#ib_redo*
    
    笔记:这里使用完整路径是为了减少因权限更改而意外破坏系统其他部分的风险。
  3. 重新启动 MySQL:
    sudo service mysql start 
    

如果这是唯一一个权限设置不正确的目录,那么您的数据库应该可以再次运行。但是,如果 MySQL 数据目录中还有其他项目属于root或具有错误的权限集,您可能会收到另一组启动错误。

相关内容