Mysql InnoDB 共享表空间和独立表空间
来源:互联网 发布:淘宝天猫优惠券在哪里 编辑:程序博客网 时间:2024/05/17 06:18
转载来自:http://blog.itpub.net/12679300/viewspace-1379902/
http://www.cnblogs.com/cuisi/p/6519939.html
http://blog.csdn.net/lqx0405/article/details/48373005
前言:学习mysql的时候总是习惯性的和oracle数据库进行比较。在学习mysql InnoDB的存储结构的时候也免不了跟oracle进行比较。Oracle的数据存储有表空间、段、区、块、数据文件;mysql InnoDB的存储管理也类似,但是mysql增加了一个共享表空间和独立表空间的概念;
一、概念
共享表空间: Innodb的所有数据保存在一个单独的表空间里面,而这个表空间可以由很多个文件组成,一个表可以跨多个文件存在,所以其大小限制不再是文件大小的限制,而是其自身的限制。从Innodb的官方文档中可以看到,其表空间的最大限制为64TB,也就是说,Innodb的单表限制基本上也在64TB左右了,当然这个大小是包括这个表的所有索引等其他相关数据。
独立表空间:
二、查看数据库的表空间
mysql> show variables like 'innodb_data%';
l 表空间有四个文件组成:ibdata1、ibdata2、ibdata3、ibdata4,每个文件的大小为10M,当每个文件都满了的时候,ibdata4会自动扩展;
l 当前的存储空间满的时候,可以在其他的磁盘添加数据文件,语法如下:语法如下所示:
pathtodatafile:sizespecification;pathtodatafile:sizespec;.;pathtodatafile:sizespec[:autoextend[:max:sizespecification]]
如果用 autoextend 选项描述最后一个数据文件,当 InnoDB 用尽所有表自由空间后将会自动扩充最后一个数据文件,每次增量为 8 MB。示例:
不管是共享表空间和独立表空间,都会存在innodb_data_file文件,因为这些文件不仅仅要存放数据,而且还要充当着类似于ORACLE的UNDO表空间等一些角色。
三、共享表空间优缺点
既然Innodb有共享表空间和独立表空间两种类型,那么这两种表空间存在肯定都有时候自己的应用的场景,存在即合理。以下是摘自mysql官方的一些介绍:
3.1 共享表空间的优点
表空间可以分成多个文件存放到各个磁盘,所以表也就可以分成多个文件存放在磁盘上,表的大小不受磁盘大小的限制(很多文档描述有点问题)。
数据和文件放在一起方便管理。
3.2 共享表空间的缺点
所有的数据和索引存放到一个文件,虽然可以把一个大文件分成多个小文件,但是多个表及索引在表空间中混合存储,当数据量非常大的时候,表做了大量删除操作后表空间中将会有大量的空隙,特别是对于统计分析,对于经常删除操作的这类应用最不适合用共享表空间。
共享表空间分配后不能回缩:当出现临时建索引或是创建一个临时表的操作表空间扩大后,就是删除相关的表也没办法回缩那部分空间了(可以理解为oracle的表空间10G,但是才使用10M,但是操作系统显示mysql的表空间为10G),进行数据库的冷备很慢;
四、独立表空间的优缺点
4.1 独立表空间的优点
每个表都有自已独立的表空间,每个表的数据和索引都会存在自已的表空间中,可以实现单表在不同的数据库中移动。
空间可以回收(除drop table操作处,表空不能自已回收)
Drop table操作自动回收表空间,如果对于统计分析或是日值表,删除大量数据后可以通过:alter table TableName engine=innodb;回缩不用的空间。
对于使innodb-plugin的Innodb使用turncate table也会使空间收缩。
对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理。
4.2 独立表空间的缺点
单表增加过大,当单表占用空间过大时,存储空间不足,只能从操作系统层面思考解决方法;
五、共享表空间和独立表空间之间的转换
5.1 查看当前数据库的表空间管理类型
脚本:show variables like "innodb_file_per_table";
mysql> show variables like "innodb_file_per_table";
ON代表独立表空间管理,OFF代表共享表空间管理;(查看单表的表空间管理方式,需要查看每个表是否有单独的数据文件)
5.2 修改数据库的表空间管理方式
修改innodb_file_per_table的参数值即可,但是修改不能影响之前已经使用过的共享表空间和独立表空间;
innodb_file_per_table=1 为使用独占表空间
innodb_file_per_table=0 为使用共享表空间
5.3共享表空间转化为独立表空间的方法(参数innodb_file_per_table=1需要设置)
单个表的转换操作,脚本:alter table table_name engine=innodb;
当有大量的表需要操作的时候,先把数据库导出,然后删除数据再进行导入操作,该操作可以用mysqldump进行操作(http://blog.itpub.net/12679300/viewspace-1259451/)
总结:经过以上操作便完成数据库的存储空间的转换,了解技术是为了更好的利用技术,当数据量很小的时候建议使用共享表空间的管理方式。数据量很大的时候建议使用独立表空间的管理方式。
关于共享表空间和独立表空间的知识总结!
MySQL Study之--MySQL增加新的表空间(tablespace)
该变量设置innoDB数据文件的位置和大小。指定的文件必须大于10M,如果不受系统文件限制,可以设置大于4G。该变量是mysql服务器容量规划和性能扩展能力的核心要素。通常设置是创建一个数据目录内容的基线大小,在10M到128M之间,第二个文件设置为10M并自动扩展。如innodb_data_file_path = ibdata1:128M;ibdata2:10M:autoextend。
1. 停止mysql服务
2. 备份配置文件,便于出现问题好回退
3. 编辑innodb_data_file_path值
根据你的环境更改ibdata1:$size;ibdataN:$size;…ibdataN:$size; 当前定义的表空间或默认表空间是不能改变的,否则启动失败,但是,可以额外的添加表空间,ibdataN序列根据当前的数量递增,$size自定义。
4. 启动mysql服务
6. 观察mysql错误日志是否有错
+-----------------------+------------------------------------+
| Variable_name | Value |
+-----------------------+------------------------------------+
| innodb_data_file_path | ibdata1:10M|
+-----------------------+------------------------------------+
1 row in set (0.01 sec)
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
innodb_data_file_path=ibdata1:10M;ibdata2:10M:autoextend
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
explicit_defaults_for_timestamp=true
innodb_buffer_pool_size = 128M
join_buffer_size = 128M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M
3、重新启动server
[root@rh64 mysql]# service mysql start
Starting MySQL (Percona Server).The server quit without updating PID file (/var/lib/mysql/rh64.pid).[FAILED]
启动失败,查看日志:
[root@rh64 mysql]# tail -100 /var/log/mysqld.log
150911 11:51:16 mysqld_safe mysqld from pid file /var/lib/mysql/rh64.pid ended
150911 11:54:38 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
2015-09-11 11:54:38 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2015-09-11 11:54:38 0 [Note] /usr/sbin/mysqld (mysqld 5.6.25-73.1) starting as process 3588 ...
2015-09-11 11:54:38 3588 [Note] Plugin 'FEDERATED' is disabled.
2015-09-11 11:54:38 3588 [Note] InnoDB: Using atomics to ref count buffer pool pages
2015-09-11 11:54:38 3588 [Note] InnoDB: The InnoDB memory heap is disabled
2015-09-11 11:54:38 3588 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2015-09-11 11:54:38 3588 [Note] InnoDB: Memory barrier is not used
2015-09-11 11:54:38 3588 [Note] InnoDB: Compressed tables use zlib 1.2.3
2015-09-11 11:54:38 3588 [Note] InnoDB: Using Linux native AIO
2015-09-11 11:54:38 3588 [Note] InnoDB: Not using CPU crc32 instructions
2015-09-11 11:54:38 3588 [Note] InnoDB: Initializing buffer pool, size = 128.0M
2015-09-11 11:54:39 3588 [Note] InnoDB: Completed initialization of buffer pool
2015-09-11 11:54:39 3588 [ERROR] InnoDB: Data file ./ibdata1 is of a different size 768 pages (rounded down to MB) than specified in the .cnf file 1280 pages!
2015-09-11 11:54:39 3588 [ERROR] InnoDB: Could not open or create the system tablespace. If you tried to add new data files to the system tablespace, and it failed here, you should now edit innodb_data_file_path in my.cnf back to what it was, and remove the new ibdata files InnoDB created in this failed attempt. InnoDB only wrote those files full of zeros, but did not yet use them in any way. But be careful: do not remove old data files which contain your precious data!
2015-09-11 11:54:39 3588 [ERROR] Plugin 'InnoDB' init function returned error.
2015-09-11 11:54:39 3588 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2015-09-11 11:54:39 3588 [ERROR] Unknown/unsupported storage engine: InnoDB
2015-09-11 11:54:39 3588 [ERROR] Aborting
----错误提示:ibdata1数据文件size设置大小和系统不匹配!!
查看表空间数据文件的大小:
total 167M
-rw-rw----. 1 mysql mysql 56 Sep 6 18:08 auto.cnf
-rw-rw----. 1 mysql mysql 12M Sep 11 11:56 ibdata1
-rw-rw----. 1 mysql mysql 10M Sep 11 11:50 ibdata2
-rw-rw----. 1 mysql mysql 48M Sep 11 11:56 ib_logfile0
-rw-rw----. 1 mysql mysql 48M Sep 6 18:06 ib_logfile1
-rw-rw----. 1 mysql mysql 48M Sep 11 11:50 ib_logfile101
drwx------. 2 mysql mysql 4.0K Sep 6 18:06 mysql
srwxrwxrwx. 1 mysql mysql 0 Sep 11 11:56 mysql.sock
drwx------. 2 mysql mysql 4.0K Sep 6 18:06 performance_schema
-rw-rw----. 1 mysql mysql 5 Sep 11 11:56 rh64.pid
-rw-r--r--. 1 root root 293 Sep 6 18:07 RPM_UPGRADE_HISTORY
-rw-r--r--. 1 mysql mysql 293 Sep 6 18:07 RPM_UPGRADE_MARKER-LAST
drwx------. 2 mysql mysql 4.0K Sep 6 18:06 test
重新修改配置文件配置参数:
[root@rh64 mysql]# vi /etc/my.cnf
innodb_data_file_path=ibdata1:12
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
innodb_data_file_path=ibdata1:12M;ibdata2:10M:autoextend
---对于已有的表空间数据文件的size,必须按照系统查看的size设置,否则报错!
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
explicit_defaults_for_timestamp=true
innodb_buffer_pool_size = 128M
join_buffer_size = 128M
sort_buffer_size = 2M
read_rnd_buffer_size = 2M
~
[root@rh64 mysql]# service mysql start
Starting MySQL (Percona Server).[ OK ]
登录server,查看tablespace:
[root@rh64 ~]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.25-73.1 Percona Server (GPL), Release 73.1, Revision 07b797f
Copyright (c) 2009-2015 Percona LLC and/or its affiliates
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show variables like '%innodb_data_file_path%';
+-----------------------+------------------------------------+
| Variable_name | Value |
+-----------------------+------------------------------------+
| innodb_data_file_path | ibdata1:12M;ibdata2:10M:autoextend |
+-----------------------+------------------------------------+
1 row in set (0.01 sec)
- [Mysql]Innodb 独立表空间和共享表空间
- MySQL InnoDB 共享表空间和独立表空间
- MySQL InnoDB 共享表空间和独立表空间
- MySQL InnoDB 共享表空间和独立表空间
- MySQL InnoDB 共享表空间和独立表空间
- MySQL InnoDB 共享表空间和独立表空间
- Mysql InnoDB 共享表空间和独立表空间
- Innodb共享表空间和独立表空间
- SQL InnoDB 共享表空间和独立表空间
- mysql之innodb引擎的共享表空间和独立表空间
- MySQL之INNODB表空间(共享、独立)
- mysql innodb 独占表空间和共享表空间
- mysql 共享表空间、独立表空间
- mysql共享表空间和独立表空间
- mysql共享表空间和独立表空间 优缺点
- mysql共享表空间和独立表空间
- mysql共享表空间和独立表空间
- mysql独立表空间和共享表空间的转换
- node.js——麻将算法(七)简易版麻将出牌AI2.0
- 第二章--电商设计表订单实体-电商项目
- 查询ubuntu系统版本号
- Windows下gdb调试Android程序环境搭建
- Deep Learning_deeplearning.ai(course3)简单总结
- Mysql InnoDB 共享表空间和独立表空间
- vi常用操作
- 逻辑运算符
- 团队各成员用GitHub共同编辑文档?
- python2/3 super
- DOM4J解析String类型的xml文件
- h5按钮css3动态特效,让页面静不下来
- Java 对象和类
- @Resource的一个问题