千家信息网

mysql共享表空间的扩容、收缩和迁移

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇内容介绍了"mysql共享表空间的扩容、收缩和迁移"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
千家信息网最后更新 2026年11月03日mysql共享表空间的扩容、收缩和迁移

本篇内容介绍了"mysql共享表空间的扩容、收缩和迁移"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

一.扩容innodb文件
1.关闭mysql db
# /usr/local/mysql/bin/mysqladmin -S /tmp/mysql3307.sock shutdown

2.打开参数文件
innodb_data_file_path = ibdata1:512M:autoextend
将ibdata1调整至接近实际大小,并在后面追加新的文件:
innodb_data_file_path = ibdata1:512M;ibdata2:512M:autoextend

3.启动数据库
# /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my3307.cnf --user=mysql &

二.缩小表空间
共享表空间文件,一旦扩展无法自动缩小,需要通过手工缩小
1.导出全部数据库
# /usr/local/mysql/bin/mysqldump -uroot -p -A -S /tmp/mysql3307.sock > /tmp/3307all.sql
Enter password:

2.关闭mysql db
# /usr/local/mysql/bin/mysqladmin -S /tmp/mysql3307.sock shutdown

3.删除mysql的数据目录
rm -rf /home/mysql3307/mysql3307/*

4.初始化mysql
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my3307.cnf --initialize-insecure --basedir=/usr/local/mysql --datadir=/home/mysql3307/mysql3307 --user=mysql

5.启动mysql
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my3307.cnf --user=mysql &

6.导入数据
source /tmp/3307all.sql

三.innodb表空间迁移
原库表结构:

点击(此处)折叠或打开

  1. CREATE TABLE `wwj`.`t1` (

  2. `id` INT NOT NULL,

  3. `name` VARCHAR(45) NULL,

  4. PRIMARY KEY (`id`));


  5. alter table wwj.t1 add index idx_name (name) ;


  6. insert into wwj.t1 values(1,'wwj');


1.在目标实例上创建一个相同的表

点击(此处)折叠或打开

  1. CREATE TABLE `wwj2`.`t1` (

  2. `id` INT NOT NULL,

  3. `name` VARCHAR(45) NULL,

  4. PRIMARY KEY (`id`));

2.在目标库上执行ALTER TABLE t DISCARD TABLESPACE;
ALTER TABLE t1 DISCARD TABLESPACE;
- discard的意思就是从数据库detached,会删除ibd文件,保留frm文件。
- 也就意味着,你可以对frm文件操作,比如:rename table,drop table ,但是不能对ibd文件操作,比如:dml

3.在源库上执行FLUSH TABLES t FOR EXPORT;生成.cfg文件
flush tables t1 for export;

-rw-r-----. 1 mysql mysql 67 Mar 24 06:59 db.opt
-rw-r-----. 1 mysql mysql 467 Mar 24 18:32 t1.cfg
-rw-r-----. 1 mysql mysql 8586 Mar 24 06:59 t1.frm
-rw-r-----. 1 mysql mysql 114688 Mar 24 06:59 t1.ibd

此时,.cfg文件在InnoDB的data directory中
flush tables .. for export 会加锁,这时候,千万不能退出终端或session,否则加锁无效且.cfg文件自动删除。

4.讲.ibd文件和.cfg文件拷贝到目标实例
[root@mysql5 wwj]# cp t1.cfg /home/mysql3306/mysql3306/wwj2
[root@mysql5 wwj]# cp t1.ibd /home/mysql3306/mysql3306/wwj2

修改权限


5.在源库执行unlock tables;
mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)

6.在目标库执行ALTER TABLE t IMPORT TABLESPACE;

第一次执行:在目标库追加index后成功
mysql> alter table t1 import tablespace;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 3
Current database: wwj2

ERROR 1808 (HY000): Schema mismatch (Number of indexes don't match, table has 1 indexes but the tablespace meta-data file has 2 indexes)

innodb可传输表空间注意事项
-----------------------------
必须开启 innodb_file_per_table
当这个表处于quiesced状态,甚至不能被select
两边实例的page size 一致
5.7 版本之前,不支持分区表transport
外键相关的表,必须设置 foreign_key_checks=0 才能成功
ALTER TABLE ... IMPORT TABLESPACE 不需要.cfg metadata file . 但是,这样的话,MySQL就不会对schema进行verificate
5.6以及更高版本,import&export 版本必须在同一个series
在replication环境中,master & slave 都必须开启 innodb_file_per_table
对于InnoDB general tablespace,不支持discard & import tablespace
如果两边服务器的table row_format设置的不一样,会导致schema mismatch error
加密过的InnoDB tablespace 必须要拷贝.cfp 文件

四.MyISAM表空间迁移
1. flush table with read lock
2. 直接复制数据文件和表结构文件

"mysql共享表空间的扩容、收缩和迁移"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

文件 空间 数据 目标 实例 数据库 版本 收缩 内容 实际 拷贝 更多 知识 结构 支持 实用 相同 一致 成功 学有所成 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司怎么样 云信互联网科技有限公司 互联网与科技金融数据 金融科技创新监管互联网金融 世界互联网领先科技成果 互联网科技大会案例 海南科技产业互联网平台 互联网金融科技公司干啥的 中国航天科技大学国际工业互联网 移动互联网年度科技创新 互联网新科技动漫ppt素材 卓翼科技产业互联网合作 无锡工业互联网科技有限公司 高科技互联网套路 黑科技 体验场景 互联网大会 领航科技大厦互联网公司 广西科技产业互联网是什么 保山互联网科技靠谱吗 科技互联网企业在行动 科技发展第三阶段互联网时代 河南真二互联网科技有限公司 北京禾田雨橡互联网科技 长亮科技互联网金融 亿人帮互联网科技 居家互联网科技有限公司 丰台科技园 互联网公司 济南和联互联网科技有限公司 互联网科技热点资讯 宝灵互联网科技有限公司 晓花互联网科技有限公司网址
0