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
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
相关文章推荐
- MySQL的INNODB共享表空间与独占表空间分别与概念
- 使用参数innodb_file_per_table支持MySQL InnoDB表数据共享空间自动收缩
- 使用参数innodb_file_per_table支持MySQL InnoDB表数据共享空间自动收缩
- mysql之innodb引擎的共享表空间和独立表空间
- MySQL如何判别InnoDB表是独立表空间还是共享表空间
- MySQL InnoDB 共享表空间和独立表空间
- MySQL InnoDB 共享表空间和独立表空间
- 使用参数innodb_file_per_table支持MySQL InnoDB表数据共享空间自动收缩
- [Mysql]Innodb 独立表空间和共享表空间
- MySQL InnoDB 共享表空间和独立表空间
- MySQL InnoDB 共享表空间和独立表空间
- 使用参数innodb_file_per_table支持MySQL InnoDB表数据共享空间自动收缩
- 使用参数innodb_file_per_table支持MySQL InnoDB表数据共享空间自动收缩
- MySQL之INNODB表空间(共享、独立)
- MySql备忘 -- Innodb共享表空间VS独立表空间
- Mysql InnoDB 共享表空间和独立表空间
- 使用参数innodb_file_per_table支持MySQL InnoDB表数据共享空间自动收缩
- [Mysql]Innodb 独立表空间和共享表空间
- mysql InnoDB引擎 共享表空间和独立表空间(转载)
- MySQL InnoDB 共享表空间和独立表空间