各位好,小第在学习的过程中遇到如下问题:
  现有服务器A和服务器B以及服务器C,服务器 A 每20分钟产生一个mysql表(frm MYI MYD),通过rsync机制,发送到服务器B和服务器C,服务器B,C分别对表文件进行解析,并做后续处理.
  产生如下现象:
   1.部分表 在服务器B和服务器C上解析正常.
   2.部分表 在服务器B上解析正常,在服务器C上无法解析,主要表现在:
    1)select count(*) from 表名  的返回结果为0,但是 MYD文件的大小是17M多,也就是说表内是有内容的.
    2) 强调的是,该表在服务器B上可以解析.   对于服务器C无法解析的表做如下操作:
            1) create 一个新的数据库
            2) 将无法解析的表文件(frm,MYI,MYD)拷贝到新的数据库下
            3) 在新的数据库下 select count(*) from 表名  后,返回结果正常,也就是非0.
  产生的问题比较奇怪,请指教下.

解决方案 »

  1.   

    select count(*) from 表名  的返回结果为0,但是 MYD文件的大小是17M多,也就是说表内是有内容的.在C上是否可以查询到记录,比如
    select * from tt
    有无记录 
      

  2.   

    无论是利用C语言查询的返回结果,还是在mysql的命令行模式下,select * from 表名 返回的结果是没有记录的.这是在MYD文件大小为17M多的情况下的.
    奇怪的问题是,在另一台服务器上,是可以解析而且成功的.
    奇怪的问题之二是,假设该表在服务器X上不能解析,我在该服务器上重新建立一个数据库,把这个表拷贝到新建的数据库下,之后在select count(*) from 表名,返回的接非0,也就是说表解析正确.
      

  3.   

    考虑是不是因为在rsync的时候,或是拷贝的情况下,对表或是数据库的某些标志位有影响.
      

  4.   

    你的B,C的操作系统是否兼容?
    另外MYSQL的版本是否一致?
      

  5.   

    表没有索引,
    MYSQL的版本是一致的.操作系统统一为linux 2.6
      

  6.   

    把你B上的文件复制到C上,看一下是否能够识别。感觉上应该是 rsync 在发送中是不是改变了文件内容。 rsync 有没有二进制文件传送的设置?或者把这A,B,C三台机的上这个MYD文件都复制到WINDOWS机器上,进行比较。
      

  7.   

    建议您使用replication复制表格到B\C\D 而不是使用rsync