您的位置:首页 > 数据库 > MySQL

mysql innodb 独占表空间和共享表空间

2017-02-24 11:17 387 查看
mysql innodb 独立表空间和共享表空间

mysql> show variables like 'innodb_file_per_table';

+-----------------------+-------+

| Variable_name         | Value |

+-----------------------+-------+

| innodb_file_per_table | ON    |

+-----------------------+-------+

1 row in set (0.00 sec)

on表示为独立表空间;off表示为共享表空间

mysql> show variables like 'innodb_data%';

+-----------------------+------------------------+

| Variable_name         | Value                  |

+-----------------------+------------------------+

| innodb_data_file_path | ibdata1:12M:autoextend |

| innodb_data_home_dir  |                        |

+-----------------------+------------------------+

2 rows in set (0.00 sec)

修改数据库表空间的管理方式:

修改innodb_file_per_table的参数值即可,但是修改无法影响之前已经使用过的共享表空间和独立表空间;

innodb_file_per_table=1 为使用独占表空间

innodb_file_per_table=0 为使用共享表空间

独占表空间:在每个innodb表数据目录下都会有一个.ibd文件,用来存放对应表的数据和索引。

共享表空间:所有表数据和索引存放在一个存储空间中:ibdata1。缺点:增删数据库的时候,ibdata1文件不会自动收缩。

官方文档:

If innodb_file_per_table is disabled (the default), InnoDB creates tables in the system tablespace. 

If innodb_file_per_table is enabled, InnoDB creates each new table using its own .ibd file for storing data and indexes, rather than in the system tablespace. 

注:当启用独占表空间时,需要合理调整innodb_open_files参数。

数据结构存放:

MyISAM:

et_pages.frm  et_pages.MYD  et_pages.MYI,分别存放表结构、表数据、表索引。

InnoDB:

fkkk.frm fkkk.ibd,分别存放表结构、表数据和索引。(独占表空间模式下)

如果一开始用的是共享表空间,现在共享表空间已经增长到几百个G,需要需要进行收缩,如何进行操作:

以下操作前提:已经备份了所有数据,并停掉了连接的服务。

1.导出所有的数据: /usr/bin/mysqldump ––extended-insert ––all-databases ––add-drop-database ––disable-keys ––flush-privileges ––quick ––routines ––triggers > all-databases.sql

2.停止Mysql服务;

3.重命名mysql数据文件夹;

4.修改my.cnf中的参数,添加innodb_file_per_table;

5.mysql_install_db重新初始化mysqld;(/usr/local/mysql/bin/mysql_install_db --defaults-file=/data1/mysql/my.cnf --datadir=/data1/mysql/data)

6.开启Mysql服务;

7.进入Mysql Console执行: 

◦SET FOREIGN_KEY_CHECKS=0;

◦SOURCE all-databases.sql;

◦SET FOREIGN_KEY_CHECKS=1;

8.重启数据库测试OK就领赏去吧。

如果因为断电或者直接关机导致idb文件出错,就需要重构这些文件

[mysqld]

加 innodb_force_recovery=1

PS:

如何新增mysql实例的一种方法:

例如服务器上已经安装了3306端口的mysql服务,需要再启一个3308端口的mysql服务。

假设mysql安装在/usr/local/mysql路径下,找一个磁盘空间剩余比较大的盘,如/data1,把3308端口的mysql的数据保存在/data1下

#mkdir /data1/mysql_3308

#mkdir /data1/mysql_3308/data

#chown -R mysql:mysql /data1/mysql_3308

 

复制一个mysql配置文件my.cnf到/data1/mysql_3308目录下

#vi /data1/mysql_3308/my.cnf

修改配置文件,将端口和相关目录的都改为新的设置,如下:

[client]

character-set-server = utf8

port    = 3308

socket  = /tmp/mysql_3308.sock

[mysqld]

user    = mysql

port    = 3308

socket  = /tmp/mysql_3308.sock

basedir = /usr/local/mysql

datadir = /data1/mysql_3308/data

log-error = /data1/mysql_3308/mysql_error.log

pid-file = /data1/mysql_3308/mysql.pid

......其他略

运行下面命令进行数据库的初始化:

#/usr/local/mysql/bin/mysql_install_db --defaults-file=/data1/mysql_3308/my.cnf --datadir=/data1/mysql_3308/data

三、启动新mysql

启动3308端口的mysql服务

#/usr/local/mysql/bin/mysqld_safe --defaults-file=/data1/mysql_3309/my.cnf &

检查是否启动

#ps aux|grep mysql

如果有3308字样说明已经启动成功

可将启动命令加入/etc/rc.local随服务器启动

新加的mysql没有设置root密码,可以通过下面命令设置root密码:
#/usr/local/mysql/bin/mysqladmin -S /tmp/mysql_3308.sock -u root password 'new-password'

参考:
http://blog.csdn.net/jiangguilong2000/article/details/46869359 http://blog.csdn.net/imzoer/article/details/8287938 http://blog.itpub.net/12679300/viewspace-1379902/ http://www.linuxidc.com/Linux/2012-09/70416.htm
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: