mysql can't rmdir linux,Can't rmdir './mydatabase', Errno: 39

本文介绍了一种常见的MySQL错误——当尝试删除包含未被MySQL管理文件的数据库时出现的错误1010,并提供了解决方案。通过删除问题文件并重新运行删除数据库命令可以解决此问题。

Issue

Mysql drop table command returns:

ERROR 1010 (HY000): Error dropping database (can't rmdir './mydatabase', errno: 39)

Likely Cause

There is a file in the database folder which isn't being managed by Mysql. This file could be hidden detritus or, more likely, an orphaned .ibd file.

# cd /var/log/mysql/mydatabase

# ls -la

total 72

drwx------ 2 mysql mysql 4096 Jun 23 19:57 ./

drwx------ 7 mysql mysql 4096 Jun 23 21:08 ../

-rw-rw---- 1 mysql mysql 65536 Jun 23 19:56 actions.ibd

Something Like a Solution

I just delete the problem file and run the database drop command again.

# rm -f actions.iddmysql> drop database mydatabase;

Query OK, 0 rows affected (0.00 sec)

References

include ../make/makefile.inc MAKE = make RMDIR = rm -Rf RM = rm -f LIBRARY := $(shell find .. -maxdepth 1 -type d -name "Lib*") DS_MODS := $(shell find .. -maxdepth 1 -type d -name "DS*") MODULES := $(shell find .. -maxdepth 1 -type d -name "Mod*") MODULES += $(shell find .. -maxdepth 1 -type d -name "SP*") ALL_MODS = $(LIBRARY) $(DS_MODS) $(MODULES) CL_MODS := $(addprefix _clean_,$(ALL_MODS)) RM_MODS := $(addprefix _rm_,$(ALL_MODS)) .PHONY: all $(ALL_MODS) clean erase builddir copylibs all: copylibs $(ALL_MODS) @$(COPY) $(DSPATH)/exe/dshost.out ./dsp @$(COPY) $(DSPATH)/libs/Proto*.so . @$(COPY) $(DSPATH)/libs/Mod*.so ../components clean: $(CL_MODS) install: $(RM_MODS) @$(RMDIR) ../Debug @$(RMDIR) ../Release @$(RMDIR) ../build @$(RMDIR) ../libs @$(RMDIR) ../make @$(RMDIR) ../ModuleSource @$(RM) ../*.* @$(RM) ./*.a @echo all source codes erased. $(ALL_MODS): @$(MAKE) -C $@ --no-print-directory $(CL_MODS): @$(MAKE) -C $(patsubst _clean_%,%,$@) --no-print-directory clean $(RM_MODS): @$(RMDIR) $(patsubst _rm_%,%,$@) builddir: @$(MKDIR) ../build @$(MKDIR) ../libs ../libs/libDS.a: $(DSPATH)/libs/libDS.a @echo Update $(@F) @$(COPY) $^ $(@D) ../libs/libDSTL.a: $(DSPATH)/libs/libDSTL.a @echo Update $(@F) @$(COPY) $^ $(@D) ../libs/libMath.a: $(DSPATH)/libs/libMath.a @echo Update $(@F) @$(COPY) $^ $(@D) ../libs/libLua.so: $(DSPATH)/libs/libLua.so @echo Update $(@F) @$(COPY) $^ $(@D) @$(COPY) $^ ../exe/ copylibs: builddir ../libs/libDS.a ../libs/libDSTL.a ../libs/libMath.a ../libs/libLua.so 分析printf不打印
最新发布
11-05
在 aarch64-none-linux-gnu-g++ 编译器、CUDA 11.4 环境及给定 Makefile 配置下,`printf` 不打印可能有以下原因: ### 缓冲区问题 `printf` 函数通常是行缓冲或全缓冲的。行缓冲意味着遇到换行符 `\n` 时才会将缓冲区内容输出;全缓冲则需要缓冲区满或者手动刷新才会输出。如果代码中 `printf` 语句没有换行符,且没有手动刷新缓冲区,内容可能会一直停留在缓冲区中。 ```c #include <stdio.h> int main() { printf("This may not print immediately"); // 手动刷新缓冲区 fflush(stdout); return 0; } ``` ### 编译选项问题 Makefile 中使用了 `-fno-builtin-printf` 选项,这会禁用 GCC 的内置 `printf` 函数。如果没有正确链接标准库或者提供自定义的 `printf` 实现,`printf` 可能无法正常工作。需要确保标准库被正确链接,并且没有其他因素影响标准库的使用。 ### 程序崩溃或异常 如果程序在执行 `printf` 之前就崩溃或抛出异常,`printf` 自然不会有输出。可以在代码中添加更多的调试信息,或者使用调试工具(如 GDB)来检查程序是否在 `printf` 之前出现了问题。 ```c #include <stdio.h> int main() { // 可能导致程序崩溃的代码 int *ptr = NULL; *ptr = 10; // 这里会导致段错误 printf("This will not print"); return 0; } ``` ### CUDA 异步执行问题 在 CUDA 代码中,很多操作是异步执行的。如果 `printf` 语句在 CUDA 核函数中或者与 CUDA 操作相关的代码中,可能由于异步执行的原因,在 `printf` 执行时程序已经继续执行后续代码,导致输出不及时或者丢失。可以使用 `cudaDeviceSynchronize()` 来确保所有 CUDA 操作完成后再继续执行后续代码。 ```c #include <stdio.h> #include <cuda_runtime.h> __global__ void kernel() { printf("Hello from CUDA kernel\n"); } int main() { kernel<<<1, 1>>>(); // 同步设备,确保 CUDA 操作完成 cudaDeviceSynchronize(); return 0; } ``` ### 环境问题 如果程序运行的环境有问题,例如标准输出被重定向或者设备驱动有问题,也可能导致 `printf` 不打印。可以检查程序的运行环境,确保标准输出正常。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值