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.   

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

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

相关文章

这篇文章主要介绍“hive和mysql的区别是什么”,在日常操作中...
这篇“MySQL数据库如何改名”文章的知识点大部分人都不太理解...
这篇文章主要介绍“mysql版本查询命令是什么”的相关知识,小...
本篇内容介绍了“mysql怎么修改字段的内容”的有关知识,在实...
这篇文章主要讲解了“mysql怎么删除unique约束”,文中的讲解...
今天小编给大家分享一下mysql怎么查询不为空的字段的相关知识...