我想知道MySQL是否有能力指定属于某个帐户的数据(例如,代表特定的应用程序或特定的公司程序)存储在文件系统中的某个特定位置(例如特定的驱动器或RAID),而不是将其捆绑在同一个物理文件结构中,由MySQL为该服务器上的每个人管理的每个其他帐户,表和数据元素共享。我知道我可以将MySQL的整个数据包存储在默认位置以外的位置,但我希望有一种方法可以通过函数来实现这一点,因为“一些数据而不是所有数据”。
9gm1akwq1#
在MySQL 8.0中,有一些选项可以指定每个表或表空间的位置。参见https://dev.mysql.com/doc/refman/8.0/en/innodb-create-table-external.html在MySQL的早期版本中,这些选项并不一致。如果表已分区,则可以为各个表分区指定目录,但不能为未分区的表指定目录。Go figure.:-)也就是说,我从来没有遇到过值得花时间指定表的物理位置的情况。基本上,如果您的性能取决于一个RAID文件系统与仔细选择不同的驱动器,你已经输了。相反,我总是这样做:1.在快速RAID文件系统上使用一个datadir。使用此datadir下所有表和日志的默认配置。1.分配尽可能多的RAM给InnoDB缓冲池(当然,最多到数据库的大小-不需要使用更多的RAM)。RAM比任何磁盘都快几个数量级,即使是SSD。所以你更喜欢从RAM中阅读数据。如果这还不够,还有其他的事情可以优化,比如创建索引,或者修改应用程序代码以进行更多的缓存来减少数据库读取,或者使用消息队列来推迟数据库写入。如果性能仍然不够,那么可以扩展到多个数据库服务器。换句话说,就是分片。
datadir
mutmk8jj2#
从8.0.21开始,您还需要考虑将新目录添加到配置中CREATE TABLESPACE tablespace_name ADD DATAFILE '/my/table/space/dir';但是,InnoDB必须知道该目录。已知目录由以下设置定义:datadir、innodb_data_home_dir、innodb_undo_directory和innodb_directories。Luuk还指出,您需要innodb_file_per_table=1来删 debugging 误消息
innodb_file_per_table=1
Error Code: 3121. The DATAFILE location must be in a known directory.
Source关于manual
2条答案
按热度按时间9gm1akwq1#
在MySQL 8.0中,有一些选项可以指定每个表或表空间的位置。参见https://dev.mysql.com/doc/refman/8.0/en/innodb-create-table-external.html
在MySQL的早期版本中,这些选项并不一致。如果表已分区,则可以为各个表分区指定目录,但不能为未分区的表指定目录。Go figure.:-)
也就是说,我从来没有遇到过值得花时间指定表的物理位置的情况。基本上,如果您的性能取决于一个RAID文件系统与仔细选择不同的驱动器,你已经输了。
相反,我总是这样做:
1.在快速RAID文件系统上使用一个
datadir
。使用此datadir下所有表和日志的默认配置。1.分配尽可能多的RAM给InnoDB缓冲池(当然,最多到数据库的大小-不需要使用更多的RAM)。RAM比任何磁盘都快几个数量级,即使是SSD。所以你更喜欢从RAM中阅读数据。
如果这还不够,还有其他的事情可以优化,比如创建索引,或者修改应用程序代码以进行更多的缓存来减少数据库读取,或者使用消息队列来推迟数据库写入。
如果性能仍然不够,那么可以扩展到多个数据库服务器。换句话说,就是分片。
mutmk8jj2#
从8.0.21开始,您还需要考虑将新目录添加到配置中
CREATE TABLESPACE tablespace_name ADD DATAFILE '/my/table/space/dir';
但是,InnoDB必须知道该目录。已知目录由以下设置定义:datadir、innodb_data_home_dir、innodb_undo_directory和innodb_directories。
Luuk还指出,您需要
innodb_file_per_table=1
来删 debugging 误消息Source
关于manual