MySQL与外部资源不稳定的行为

在我们的项目中,我们使用MySQL 5.0.90(InnoDB引擎)服务器和外部存储。 我们将MySQL数据文件存储在外部存储器中。 当外部存储器因为某种原因而出现不稳定的行为时。 所以我们做了一些testing。

在Windows Server 2008中

我们closures外部存储物理。 MySQL服务停止,我们无法到达服务器。 然后我们打开存储单元,我们可以开始服务

日志

  1. 120618 14:49:30 InnoDB:文件操作中的操作系统错误号码21。
  2. InnoDB:某些操作系统错误编号描述如下
  3. InnoDB: http : //dev.mysql.com/doc/refman/5.0/en/operating-system-error-codes.html
  4. InnoDB:文件名E:\ Data \ ibdata1
  5. InnoDB:文件操作调用:'aio write'。
  6. InnoDB:无法继续运行。

我们使存储单元脱离操作系统。 3-4分钟和一些插入试验(一些插入试验成功)MySQL服务停止,我们无法到达服务器。

日志

  1. 120618 14:27:21 InnoDB:文件操作中的操作系统错误号码21。
  2. InnoDB:某些操作系统错误编号描述如下
  3. InnoDB: http : //dev.mysql.com/doc/refman/5.0/en/operating-system-error-codes.html
  4. InnoDB:文件名E:\ Data \ ibdata1
  5. InnoDB:文件操作调用:'aio read'。
  6. InnoDB:无法继续运行。

然后,我们使存储单元联机并尝试启动服务

日志

  1. InnoDB:第一个指定的数据文件E:\ ibdata1不存在:
  2. InnoDB:一个新build的数据库!
  3. 120618 14:29:00 InnoDB:设置文件E:\ ibdata1大小为10 MB
  4. InnoDB:数据库物理写入完整文件:等待…
  5. InnoDB:错误:所有日志文件必须同时创build。
  6. InnoDB:所有的日志文件也必须在创build数据库时创build。
  7. InnoDB:如果你想要更大或更小的日志文件,closures
  8. InnoDB:数据库,并确保在关机时没有错误。
  9. InnoDB:然后删除现有的日志文件。 编辑.cnf文件
  10. InnoDB:再次启动数据库。
  11. 120618 14:29:00 [错误]默认存储引擎(InnoDB)不可用
  12. 120618 14:29:00 [错误]正在中止

然后我们尝试重新configurationMySQL

日志

  1. InnoDB:页面转储结束
  2. 120618 14:34:02 InnoDB:页面校验和1575996416,4.0.14之前的校验和1371122432
  3. InnoDB:存储校验和0,在4.0.14之前存储校验和0
  4. InnoDB:Page lsn 0 0,页末尾的lsn的低4字节0
  5. InnoDB:页码(如果已存储到页面)0,
  6. InnoDB:空间id(如果使用> = MySQL-4.1.1创build并存储)0
  7. 120618 14:34:02 – mysqld得到exception0xc0000005;
  8. 这可能是因为你遇到了一个错误。 这个二进制文件或其中一个链接的库也可能是损坏的,不正确的构build或错误的configuration。 这个错误也可能是由于硬件故障造成的。 我们会尽可能地收集一些有助于诊断问题的信息,但由于我们已经崩溃了,所以肯定是错的,这可能会失败。

  9. 的key_buffer_size = 0

  10. read_buffer_size = 65536
  11. max_used_connections = 0
  12. MAX_CONNECTIONS = 100
  13. threads_connected的= 0
  14. 有可能mysqld最多可以使用key_buffer_size +(read_buffer_size + sort_buffer_size)* max_connections = 32000 K字节的内存希望没关系; 如果不是,则减less方程中的一些variables。

  15. THD = 00000000

  16. 试图回溯。 您可以使用以下信息来找出mysqld死亡的地方。 如果在这之后你看不到任何信息,那么事情就会变得非常糟糕。
  17. 006D2DB6 mysqld-nt.exe!page_cur_search_with_match()[page0cur.c:347]
  18. 0067A777 mysqld-nt.exe!btr_cur_search_to_nth_level()[btr0cur.c:500]
  19. 006B2E0E mysqld-nt.exe!btr_pcur_open_on_user_rec()[btr0pcur.c:549]
  20. 006A5615 mysqld-nt.exe!dict_load_indexes()[dict0load.c:604]
  21. 006A6424 mysqld-nt.exe!dict_load_sys_table()[dict0load.c:1023]
  22. 006BBB20 mysqld-nt.exe!dict_boot()[dict0boot.c:378]
  23. 00668A79 mysqld-nt.exe!innobase_start_or_create_for_mysql()[srv0start.c:1462]
  24. 00444462 mysqld-nt.exe!innobase_init()[ha_innodb.cc:1427]
  25. 0044B30D mysqld-nt.exe!ha_init()[handler.cc:483]
  26. 004B923E mysqld-nt.exe!init_server_components()[mysqld.cc:3431]
  27. 004BD070 mysqld-nt.exe!win_main()[mysqld.cc:3806]
  28. c004BD43B mysqld-nt.exe!mysql_service()[mysqld.cc:3967]
  29. 006E28EF mysqld-nt.exe!_threadstart()[thread.c:196]
  30. 75583677 kernel32.dll!BaseThreadInitThunk()
  31. 77359D72 ntdll.dll!RtlInitializeExceptionChain()
  32. 77359D45 ntdll.dll!RtlInitializeExceptionChain()
  33. http://dev.mysql.com/doc/mysql/en/crashing.html上的手册页包含的信息可以帮助您找出造成崩溃的原因。 120618 14:29:00 [注] C:\ Program Files(x86)\ MySQL \ MySQL Server 5.0 \ bin \ mysqld-nt:关机完成

在Windows Server 2003中

我们使存储单元脱机。 3-4分钟和一些插入试验(一些插入试验成功)MySQL服务停止,我们无法到达服务器。

日志

  1. InnoDB:日志扫描进展通过检查点lsn 0 9834427 120618 14:09:59 InnoDB:数据库没有正常closures!
  2. InnoDB:启动崩溃恢复。
  3. InnoDB:从.ibd文件读取表空间信息…
  4. InnoDB:从双写中恢复可能的半写数据页面
  5. InnoDB:缓冲区…
  6. InnoDB:进行恢复:扫描到日志序列号0 9834574
  7. 120618 14:09:59 InnoDB:开始应用一批日志logging到数据库…
  8. InnoDB:百分比进展:51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69。 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
  9. InnoDB:申请批量完成
  10. 120618 14:10:00 InnoDB:开始; 日志序号0 9834574
  11. 120618 14:10:00 [注意] C:\ Program Files(x86)\ MySQL \ MySQL Server 5.0 \ bin \ mysqld-nt:准备连接。
  12. 版本:'5.0.90-community-nt'socket:''port:3306 MySQL Community Edition(GPL)
  13. 120618 14:12:36 InnoDB:文件操作中的操作系统错误号码21。
  14. InnoDB:某些操作系统错误编号描述如下
  15. InnoDB: http : //dev.mysql.com/doc/refman/5.0/en/operating-system-error-codes.html
  16. InnoDB:文件名E:\ Data \ ibdata1
  17. InnoDB:文件操作调用:'aio read'。
  18. InnoDB:无法继续运行。

然后,我们使存储单元在线,我们无法启动服务,直到我们重新安装MySQL。 在重新安装之前,我们尝试重新configuration,但没有奏效。

日志

  1. 120618 14:16:53 InnoDB:文件操作中的操作系统错误编号3。
  2. InnoDB:错误意味着系统找不到指定的path。
  3. InnoDB:如果您正在安装InnoDB,请记住您必须创build
  4. InnoDB:你自己的目录,InnoDB不会创build它们。
  5. InnoDB:文件名E:\ Data \ ibdata1
  6. InnoDB:文件操作调用:“创build”。
  7. InnoDB:无法继续运行。

无法在本地计算机上启动MySQL服务。 错误1067:进程意外终止(错误消息)

我们closures外部存储物理。 MySQL服务停止,我们无法到达服务器。 之后,我们打开存储单元,我们可以开始服务(不是自动)

日志

  1. 120618 14:01:26 InnoDB:文件操作中的操作系统错误号码21。
  2. InnoDB:某些操作系统错误编号描述如下
  3. InnoDB: http : //dev.mysql.com/doc/refman/5.0/en/operating-system-error-codes.html
  4. InnoDB:文件名E:\ Data \ ibdata1
  5. InnoDB:文件操作调用:'aio write'。
  6. InnoDB:无法继续运行。

我们希望服务在存储单元在线/打开后自动启动。 但这些testing显示不稳定的行为。 有没有解决这个问题的方法

iSCSI只是一个允许服务器访问远程模拟SCSI磁盘的协议。 不知道更多关于实际的存储(有多less控制器,有没有写caching,是镜像),我不能肯定我的答案。 也就是说,这个问题可能是一致的。

如果您将连接到正在运行的数据库的存储上的插件拔出,则必须处理所有正在运行的IO,否则可能会导致数据不一致。 当你写一个外部存储器的时候,一旦它进入caching,通常会立即得到确认。 一旦发生这种情况,高速caching中的数据将被释放到磁盘,但不会按照接收的顺序。 任何让你失去caching的空中IO的能量损失都将导致磁盘丢失写入。

在我看来,你的错误根植于底层设备。 我会使用其他应用程序对设备进行IOtesting,看看你是否可以用这个来debugging你的错误。 设备未准备好,path未find错误似乎是根本原因,提示您的外部存储链接不正常。