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. 直接复制数据文件和表结构文件

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/15412087/viewspace-2152193/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/15412087/viewspace-2152193/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是MySQL大表迁移的介绍和演示: MySQL大表迁移是指将一个大型MySQL表从一个服务器迁移到另一个服务器的过程。这个过程可能会非常耗时和复杂,因为大型表可能包含数百万行数据,而且需要在迁移期间保持在线状态以确保业务连续性。为了解决这个问题,可以使用一些工具和技术来提高迁移效率和成功率。 NineData是一种高效、稳定的MySQL大表迁移工具,它使用智能分片、行级并发和动态攒批等核心技术来提高迁移性能。同时,NineData具备完善的容灾能力,提高了大表迁移的成功率。使用NineData进行MySQL大表迁移的步骤如下: 1.安装NineData并配置源和目标数据库的连接信息。 2.使用NineData的智能分片功能将大表分成多个小片段,每个小片段都可以独立迁移。 3.使用NineData的行级并发功能在源和目标数据库之间并行传输数据,以提高迁移速度。 4.使用NineData的动态攒批功能将多个小数据包合并成一个大数据包,以减少网络传输开销。 5.使用NineData的容灾能力来处理迁移过程中的错误和故障,以确保迁移的成功率。 另外,如果你想手动进行MySQL大表迁移,可以使用mysqldump和mysql命令行工具。具体步骤如下: 1.使用mysqldump将源数据库中的大表导出为一个SQL文件。 2.将SQL文件传输到目标服务器。 3.在目标服务器上创建一个新的数据库,并使用mysql命令行工具将SQL文件导入到新的数据库中。 4.在源和目标数据库之间进行数据同步,以确保业务连续性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值