我希望Mysql将它的数据存储在Amazone S3上,所以我在我的服务器上安装了一个S3存储桶,并将数据目录的路径更改为my.cnf中的已安装目录.
执行此操作后,我重新启动服务器并创建了数据库,它没有引起任何问题但是当我尝试创建一个表(比如测试)时,它给了我以下错误.
ERROR 1033(HY000):文件中的信息不正确:'./ test/t.frm'
任何人都可以告诉我,我想要的东西实际上是可能的吗?
如果是的话,我哪里错了?
如果不是,为什么?
在S3上存储MySQL数据库没有可行的解决方案.没有.
在适当的有限应用程序中使用s3fs没有任何问题,但这里不合适.
S3不是文件系统.它是一个对象存储.要在S3中修改数千兆字节"文件"的单个字节,需要将整个文件复制到自身上.
现在......有像s3nbd和s3backer这样的工具采用不同的方法来使用S3进行存储.这些使用S3来模拟一个块设备,你可以在其上创建一个文件系统,这些设备比s3fs更接近于成为S3和MySQL需要什么之间的适当桥梁,但是这种方法仍然无法可靠地使用,原因.
一致性.
当MySQL将数据写入文件时,它需要绝对保证,如果它读取相同的数据,它将返回它写的内容.S3不保证这一点.
问:Amazon S3采用什么数据一致性模型?
所有Regions中的Amazon S3存储桶都为新对象的PUTS提供了读写后一致性,并为覆盖PUTS和DELETES提供了最终一致性.
当S3中的对象被"修改"(通过覆盖完成PUT)时,无法保证在写入发生后,该文件的读取不会在短时间内返回先前版本.
简而言之,您正在寻求一个基本上不可能的目标,试图将S3用于它不能设计的东西.
然而,MySQL中的内置机制可以节省存储成本:InnoDB本身支持动态表压缩.
或者,如果您有大型只读MyISAM表,那么也可以使用myisampack.
一些EC2实例包括短暂的磁盘/实例存储,它们是零成本但是易变的硬盘驱动器,永远不应该用于关键数据,但如果有问题的数据库是辅助数据库,那么这可能是一个很好的选择.在数据丢失的情况下,可以很容易地从权威来源重建.它们对于"一次性"数据库非常好,例如QA数据库或日志分析,其中数据库不是数据的权威存储.