最近,我的服务器磁盘满了,因此 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 文件存在更大的问题,但对于这个特定问题,让我们更正重做目录和日志:
- 恢复
'#innodb_redo'
目录权限:
笔记:sudo chmod 750 /var/lib/mysql/#innodb_redo
sudo
如果您已经设置为超级用户,则无需使用。 - 恢复
#ib_redo
文件权限:
笔记:这里使用完整路径是为了减少因权限更改而意外破坏系统其他部分的风险。sudo chmod 640 /var/lib/mysql/#innodb_redo/#ib_redo*
- 重新启动 MySQL:
sudo service mysql start
如果这是唯一一个权限设置不正确的目录,那么您的数据库应该可以再次运行。但是,如果 MySQL 数据目录中还有其他项目属于root
或具有错误的权限集,您可能会收到另一组启动错误。