Oracle say: This is most probably due to table corruption. See the error number is 0, which indicates success, not actual error. So, this means that read from file was successful and OS returned 0, but actual read data length is different from expected data length. This is unlikely to be a problem on MySQL, but most likely to be a problem on OS including file system.
InnoDB writes data to data file per page. So, size of data file is always multiple of page size. In general, writes against a file is atomic. So, data file will never be non-multiple of page size, if OS works properly. If it's not multiple of page size, InnoDB will read incomplete page at the end of data file, then it results in this error.
Recommended solutions are:
Take following actions to mend or prevent this problem:
Run fsck and check if the file system is flawless.
Replace suspicious disk.
Ensure that the filesystem is transactional. (such as NTFS and ext4)
Check if journaling setting of filesystem is fine.
Change block size of filesystem to same as InnoDB page size (16KB by default)
Upgrade OS to the latest version.