数据库要求:innodb_file_per_table=1 独立表空间:数据库wubo,表t1,此时在磁盘wubo目录下有t1.frm表结构和t1.ibd数据文件
数据库要求:innodb_file_per_table=1 共享表空间:数据库wubo,表t1,此时在磁盘wubo目录下有t1.frm表结构但是没有t1.ibd数据文件。此时的数据文件在ibdata01里面
frm:表结构
ibd:数据
需要先安装mysql-connector-python
wget https://dev.mysql.com/get/Downloads/Connector-Python/mysql-connector-python-2.1.7-1.el6.x86_64.rpm
wget ftp://ftp.pbone.net/mirror/dev.mysql.com/pub/Downloads/MySQLGUITools/mysql-utilities-1.6.5-1.el6.noarch.rpm
wget ftp.pbone.net/mirror/dev.mysql.com/pub/Downloads/MySQLGUITools/mysql-utilities-extra-1.5.6-1.el6.noarch.rpm
第一种方式:
mysqlfrm 是一个恢复性质的工具,用来读取.frm文件并从该文件中找到表定义数据生成CREATE语句。在大多数情况下,生成的CREATE语句用于在另一个服务器上创建表或进行诊断等。然而,有些功能是不保存在.frm文件中的,因此这些功能将被忽略的。如:
- 外键约束
- 自增长序列
mysqlfrm 有两种操作模式。默认的模式是再生个实例,使用--basedir选项或指定--server选项来连接到已经安装的实例。这种过程不会改变原始的.frm文件。该模式也需要指定--port选项来给再生的实例使用,该端口不能与现有的实例冲突。在读取.frm文件后,再生的实例将被关闭,所有的临时文件将被删除的。文章源自运维生存时间-https://www.ttlsa.com/mysql/mysql-utilities-mysqlfrm/
另一个模式是诊断模式,需要指定 --diagnostic 选项。byte-by-byte读取.frm文件 尽可能多的恢复信息。该模式有更多的局限性,不能校验字符集。文章源自运维生存时间-https://www.ttlsa.com/mysql/mysql-utilities-mysqlfrm/
当使用默认模式无法读取文件或者该服务器上没有安装MySQL实例就使用诊断模式。文章源自运维生存时间-https://www.ttlsa.com/mysql/mysql-utilities-mysqlfrm/
需要指定.frm文件的路径,也可以指定一个目录,该目录下的所有.frm文件将被读取。文章源自运维生存时间-https://www.ttlsa.com/mysql/mysql-utilities-mysqlfrm/
可以指定数据库名称用来产生CREATE语句,格式如下:database_name:table_name.frm,如:oltp:t1.frm。可选的数据库名称也可以使用路径,如 /home/me/oltp:t1.frm,将使用oltp作为数据库名。如果省略了数据库名称和路径,最后的一个文件夹将作为数据库名称的。如 /home/me/data1/t1.frm,data1将作为数据库名。如果不想最后的文件夹作为数据库名,只需指定冒号,如 /home/me/data1/:t1.frm,在这种情况下,CREATE语句将忽略数据库。
1. 创建一个临时实例来解析frm文件。
2. 使用诊断模式解析frm文件。
以下表进行测试,看看,
1. mysqlfrm解析的结果与原生表结构的区别。
2. 两种操作模式解析结果的不同。
首先看看第一种操作模式。
既然是创建临时实例,肯定需要知道软件所在的位置,有两种方式。
1. 指定--basedir
$ mysqlfrm --basedir=/usr/local/mysql7 /tmp/t_child.frm --port=3333
2. 指定--server
$ mysqlfrm --server=root:123456@127.0.0.1:3307 /tmp/t_child.frm --port=2323
https://www.cnblogs.com/ivictor/p/9302069.html
注意,指定--server和--basedir没有多大区别,主要也是为了获取basedir。
从上面的输出可以看到,相对于其原生表结构,打印出的表结构,
1. 没有自增主键的序列信息。
2. 没有外键约束。
再来看看通过诊断模式解析的结果。
$ mysqlfrm --diagnostic /tmp/t_child.frm
操作过程:
1. 默认模式:
mysqlfrm --server=root:1@103.164.33.207:3306 /data/jettechbasic/*.frm --diagnostic > jettechbasic_frm.sql
或
诊断模式:
mysqlfrm --server=root:1@103.164.33.207:3306 /data/jettechbasic/frm/:*.frm --port=3307 --user=mysql >a
2. mysql -uroot -p1 -h103.164.33.207 -P3306 -e "select concat('alter table ',table_name,' discard tablespace; ') from information_schema.tables where table_schema='jettechbasic';" > j1_discard.sql
3. mysql -uroot -p1 -h103.164.33.207 -P3306 -e "select concat('alter table ',table_name,' import tablespace; ') from information_schema.tables where table_schema='jettechbasic';" > j2_import.sql
4.mysql -uroot -p1 -h103.164.33.207 -P3306 jettechbasic < j1_discard.sql
5.mysql -uroot -p1 -h103.164.33.207 -P3306 jettechbasic < j2_import.sql