mysql表空间传输过程

发布时间:2021-08-31 16:19:17 作者:chen
来源:亿速云 阅读:163

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

在MySQL 5.6 版本中引入了一个可移动表空间的新特性(复制的表空间到另一个服务器),即mysql表空间传输。这使得我们传输表或者单个库的数据变得十分方便。


    但是,传输表空间必须满足以下的条件

1.必须使用独立表空间

2.两个mysql数据库的page大小必须一样

3.两个表的表结构必须一样

下面我们对lala库下面的score表进行传输

首先,先从主库导出score

我们可以在导出之前对错误日志-f命令进行输出,跟踪它做了什么

[root@potato data]# tail -f error.log

root@localhost:mysql.sock  01:31:46 [lala]>flush tables score for export;

root@localhost:mysql.sock  02:08:21 [lala]>select * from score;                 +------+----------+-------+

| id   | name     | score |

+------+----------+-------+

|    3 | xiaohong |    99 |

|    2 | xiaoming |    65 |

|    1 | xiaojun  |    55 |

+------+----------+-------+

3 rows in set (0.00 sec)

以下是错误日志的输出

2016-12-19 01:32:44 25547 [Note] InnoDB: Sync to disk of '"lala"."score"' started.

2016-12-19 01:32:44 25547 [Note] InnoDB: Stopping purge

2016-12-19 01:32:44 25547 [Note] InnoDB: Writing table metadata to './lala/score.cfg'

2016-12-19 01:32:44 25547 [Note] InnoDB: Table '"lala"."score"' flushed to disk

可见,它首先对表停止操作,再把score的数据和元数据写到磁盘。

此时可以访问这张表,但是不能对数据进行DML操作,如

发起查询语句,成功

root@localhost:mysql.sock  01:33:11 [(none)]>select * from lala.score;          +------+----------+-------+

| id   | name     | score |

+------+----------+-------+

|    3 | xiaohong |    99 |

|    2 | xiaoming |    65 |

|    1 | xiaojun  |    55 |

+------+----------+-------+

3 rows in set (0.00 sec)

发起插入语句,一直在等待

root@localhost:mysql.sock  01:31:23 [(none)]>insert into lala.score values(4,'xiaolin',74);

在库文件夹下面多了cfg文件

[root@potato lala]# ls -l score*

-rw-r-----. 1 mysql mysql   470 Dec 19 02:07 score.cfg

-rw-rw----. 1 mysql mysql  8618 Dec 19 02:03 score.frm

-rw-r-----. 1 mysql mysql 98304 Dec 19 02:07 score.ibd

我们把cfg和ibd文件先复制到/tmp目录下

[root@potato lala]#cp score.cfg /tmp

[root@potato lala]#cp score.ibd /tmp

然后解锁表,让外部可以尽快访问表

root@localhost:mysql.sock  01:35:02 [lala]>unlock tables;

Query OK, 0 rows affected (0.00 sec)

备库此时没有该表

root@localhost:mysql.sock  01:35:28 [lala]>show tables;

+----------------+

| Tables_in_lala |

+----------------+

| haha           |

| test           |

| test1          |

+----------------+

3 rows in set (0.00 sec)

查看主库的score建表语句

root@localhost:mysql.sock  01:37:19 [lala]>show create table score\G

*************************** 1. row ***************************

Table: score

Create Table: CREATE TABLE `score` (

`id` int(11) DEFAULT NULL,

`name` varchar(15) DEFAULT NULL,

`score` int(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8

1 row in set (0.00 sec)

在从库上执行

root@localhost:mysql.sock  02:03:44 [lala]> CREATE TABLE `score` (

->   `id` int(11) DEFAULT NULL,

->   `name` varchar(15) DEFAULT NULL,

->   `score` int(11) DEFAULT NULL

-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Query OK, 0 rows affected (0.02 sec)

现在score表是没有数据的

root@localhost:mysql.sock  02:04:11 [lala]>select * from score;

Empty set (0.00 sec)

卸载score表空间

root@localhost:mysql.sock  02:05:12 [lala]>alter table score discard tablespace;

Query OK, 0 rows affected (0.02 sec)

[root@potato lala]# ls -l score*

-rw-rw----. 1 mysql mysql 8618 Dec 19 02:03 score.frm

在主库上把两个文件传到备库上

[root@potato lala]# scp /tmp/score* 192.168.161.55:/data/mysql/mytest_3306/data/lala

root@192.168.161.55's password:

score.cfg                                     100%  470     0.5KB/s   00:00   

score.ibd                                     100%   96KB  96.0KB/s   00:00

修改传输过去的文件属主

[root@potato lala]# ls -l score*

-rw-r-----. 1 root root  8618 Dec 19 01:37 score.cfg

-rw-rw----. 1 mysql mysql  8618 Dec 19 02:03 score.frm

-rw-r-----. 1 root root 98304 Dec 19 01:37 score.ibd

[root@potato lala]# chown mysql:mysql score*

[root@potato lala]# ls -l score*

-rw-r-----. 1 mysql mysql   470 Dec 19 02:07 score.cfg

-rw-rw----. 1 mysql mysql  8618 Dec 19 02:03 score.frm

-rw-r-----. 1 mysql mysql 98304 Dec 19 02:07 score.ibd

导入score表空间

root@localhost:mysql.sock  02:05:29 [lala]>alter table score import tablespace; Query OK, 0 rows affected (0.36 sec)

root@localhost:mysql.sock  02:08:21 [lala]>select * from score;                 +------+----------+-------+

| id   | name     | score |

+------+----------+-------+

|    3 | xiaohong |    99 |

|    2 | xiaoming |    65 |

|    1 | xiaojun  |    55 |

+------+----------+-------+

3 rows in set (0.00 sec)
     至此,表空间传输成功

“mysql表空间传输过程”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

推荐阅读:
  1. Oracle传输表空间
  2. 使用expdp/impdp传输表空间

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql

上一篇:如何使用Docker Compose改善Node.js的开发

下一篇:Linux文本分析命令awk的用法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》