mysql分享表空间的扩容、收缩和迁移
发布时间:2022-01-19 13:07 所属栏目:115 来源:互联网
导读:本篇内容介绍了mysql共享表空间的扩容、收缩和迁移的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 一.扩容innodb文件 1.关闭mysql db # /usr/local/m
本篇内容介绍了“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表空间迁移 原库表结构: 点击(此处)折叠或打开 CREATE TABLE `wwj`.`t1` ( `id` INT NOT NULL, `name` VARCHAR(45) NULL, PRIMARY KEY (`id`)); alter table wwj.t1 add index idx_name (name) ; insert into wwj.t1 values(1,'wwj'); 1.在目标实例上创建一个相同的表 点击(此处)折叠或打开 CREATE TABLE `wwj2`.`t1` ( `id` INT NOT NULL, `name` VARCHAR(45) NULL, 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共享表空间的扩容、收缩和迁移”的内容就介绍到这里了,感谢大家的阅读。 (编辑:ASP站长网) |
相关内容
网友评论
推荐文章
热点阅读