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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值