免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2995 | 回复: 16
打印 上一主题 下一主题

【讨论中】新人才接触MySQL,请教几个问题,求解答,谢谢! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-08 11:34 |只看该作者 |倒序浏览
本帖最后由 cenalulu 于 2013-01-09 11:05 编辑

以前接触oracle和DB2多一些,才接触MySQL,发现结构上有些差异感到比较困惑

MySQL里面没有类似oracle里表空间的概念吗? 我看到有些文档把idbdata1叫做表空间,这个只是innodb的数据文件吧

oracle和DB2都有实例的概念,我MySQL里用root进去后,就可以随意创建和切换数据库,是否MySQL本身就是一个大的实例呢?

另外MySQL中的数据库,感觉和oracle中的数据库概念很不相同,innodb的表数据都存在idbdata1里面,那这些数据库之间不是相互独立的吗?

那要是idbdata1损坏了不是影响了所有数据库吗,这样太不科学了吧,我怎么感觉MySQL里的数据库其实像是oracle里表空间呢

而且数据库的迁移怎么办呢,就只能导入导出了吗,冷备的话不现实了吧

一口气问了这么多问题,实在是因为才接触MySQL实在有些不适应,希望不吝赐教,不胜感激!

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
2 [报告]
发表于 2013-01-08 13:29 |只看该作者
本帖最后由 seesea2517 于 2013-01-08 13:29 编辑

还以为新人的问题好回答呢,看来我想错了。除了Mysql,其它的数据库没有接触过,所以下面都是靠猜的:
你说的表空间,我认为两边不是一个概念。
你说的Mysql登录进去,这样可以算做一个“会话”(session),不知道是不是对应于你说的“实例”。
数据都在 idbdata1,这是物理存储,在数据库中逻辑上没有关联的表当然逻辑上也是独立的。
数据库迁移当然也可以复制整个数据库的文件来迁移,另外也可以借助第三方的工具。

你所说的只是对于 InnoDB 引擎,Mysql 可以有其它的引擎的,常用的还有 MyISAM 引擎,这个引擎的数据库文件就是单独存放的,可以直接复制进行迁移。InnoDB 也可以使用“独立表空间”,开启此功能后,它的数据文件也是单独的。

论坛徽章:
0
3 [报告]
发表于 2013-01-08 14:10 |只看该作者
InnoDB的独立表空间我也看到过介绍,自己也试了下,但是有的资料说,即使使用独立表空间,表的部分信息还是存放在idbdata1里的,那即是说,不能像MyISAM一样,直接进行迁移,不知道是不是这样。

另外有两个文件my.ini和my.cnf,我没有看到,是要自己创建吗,我是在windows下安装的5.5.29,不知道这个是和linux系统下的差异,还是真得就没有。

我看到很多配置都是通过修改这两个文件实现的,如果没有这两个文件的话,那参数那些又是记录在什么地方的呢?

谢谢!

论坛徽章:
2
摩羯座
日期:2014-05-29 17:38:40数据库技术版块每日发帖之星
日期:2016-08-05 06:20:00
4 [报告]
发表于 2013-01-08 15:06 |只看该作者
mysql还有很多奇妙的地方,慢慢你就喜欢上了

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
5 [报告]
发表于 2013-01-09 09:26 |只看该作者
levelhy 发表于 2013-01-08 14:10
InnoDB的独立表空间我也看到过介绍,自己也试了下,但是有的资料说,即使使用独立表空间,表的部分信息还是 ...


1. InnoDB 即使用独立表空间也会有需要一些共享的内容在 ibdata 里,但是你如果只把这些数据文件和表结构文件拿出去的话,也是可以恢复这个表的(个人印象,请不要直接做为结论,请测试)
2. win 下应该在 C:\WINDOWS 下会有一个 my.ini,对应于 linux 下的 /etc/my.cnf,安装目录下还会有几个示例用的配置文件,你可以找找

论坛徽章:
0
6 [报告]
发表于 2013-01-09 11:27 |只看该作者
我在全盘上搜索了,没有找到my.ini这个文件,我查看了一下服务,mysql55里路径如下:

"C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld" --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.5\my.ini" MySQL55

是不是说这个文件应该是在C:\ProgramData\MySQL\MySQL Server 5.5这个目录下的

但是这个目录下实际并没有这个文件,只有几个ini文件的实例,是要自己用示例文件来修改么

论坛徽章:
8
CU大牛徽章
日期:2013-09-18 15:20:48CU大牛徽章
日期:2013-09-18 15:20:58CU大牛徽章
日期:2013-09-18 15:21:06CU大牛徽章
日期:2013-09-18 15:21:12CU大牛徽章
日期:2013-09-18 15:21:17天秤座
日期:2013-10-30 14:01:03摩羯座
日期:2013-11-29 18:02:31luobin
日期:2016-06-17 17:46:36
7 [报告]
发表于 2013-01-09 12:43 |只看该作者
回复 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。

论坛徽章:
8
CU大牛徽章
日期:2013-09-18 15:20:48CU大牛徽章
日期:2013-09-18 15:20:58CU大牛徽章
日期:2013-09-18 15:21:06CU大牛徽章
日期:2013-09-18 15:21:12CU大牛徽章
日期:2013-09-18 15:21:17天秤座
日期:2013-10-30 14:01:03摩羯座
日期:2013-11-29 18:02:31luobin
日期:2016-06-17 17:46:36
8 [报告]
发表于 2013-01-09 12:52 |只看该作者
@levelhy
补充一下,mysql的 tablespace,extend,block都是自动管理的。一般来说不用设置。

论坛徽章:
0
9 [报告]
发表于 2013-01-09 14:23 |只看该作者
谢谢斑竹的回答,很认真,但是关于第四条,是不是应该是建议使用独立表空间?

不知道是否我理解有误,共享表空间不是把所有数据库的innodb的表的数据都存放在一起了吗,那如果innodb的数据文件损坏,就会影响到所有数据库吧。

所以才应该使用独立表空间,即使数据文件损坏,也只会影响到损坏的表的数据。

另外提到的undo表空间和redo日志文件,是存放在哪里呢? redo日志文件是不是就是ib_logfile0和ib_logfile1,那binlog又是做什么的呢?

麻烦再指教一下,谢谢!

论坛徽章:
0
10 [报告]
发表于 2013-01-09 15:31 |只看该作者
另外,我的服务里面有一个叫作MySQL55的服务,这个就是mysql的server的服务吧。

但是我启动这个服务后,不到10秒就这个服务就自动停止了,windows系统日志里面报错“服务 MySQL55 意外停止”。

但是我现在能正常的访问数据库并做操作,这是怎么回事呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP