- 论坛徽章:
- 8
|
回复 1# levelhy
MySQL里面没有类似oracle里表空间的概念吗? 我看到有些文档把idbdata1叫做表空间,这个只是innodb的数据文件吧
A:mysql没有表空间的概念,但是mysql的innodb存储引擎有表空间的概念,有undo表空间和redo日志,数据和索引放在数据表空间里,数据表空间分是共享表空间,也可以是独立表空间(一个表一个表空间)。
这里和oracle有些区别,mysql的共享表空间逻辑上看就是所有segment的集合,物理上对应一个或者多个数据文件。mysql的独立表空间逻辑上就是一个表空间对应一个segment,索引segment和数据segment是放在一起的。oracle的表空间逻辑上可以对应包含一个或者多个segment,物理上对应一个或者多个数据文件。(简单来说oracle的表空间可以多以一张或者多张表,但是mysql的的有规范,要么对应一张,要么对应多张).extend和block概念差不多。
oracle和DB2都有实例的概念,我MySQL里用root进去后,就可以随意创建和切换数据库,是否MySQL本身就是一个大的实例呢?
A: mysql的实例就是一个mysql主进程和一块内存,可以包含多个库,一个库指的就是一个目录.oracle的实例也是一组oracle的进程和内存空间,但是oracle一个实例就是一个数据库。
另外MySQL中的数据库,感觉和oracle中的数据库概念很不相同,innodb的表数据都存在idbdata1里面,那这些数据库之间不是相互独立的吗?
A:这就是上面我提到的独立表空间和共享表空间的概念了。
那要是idbdata1损坏了不是影响了所有数据库吗,这样太不科学了吧,我怎么感觉MySQL里的数据库其实像是oracle里表空间呢
A:所以建议使用共享表空间
而且数据库的迁移怎么办呢,就只能导入导出了吗,冷备的话不现实了吧
A:复制可以实现迁移,热备可以使用xtrabackup。 |
|