加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱制作网_潮州站长网 (http://www.0768zz.com/)- 物联安全、建站、操作系统、云计算、数据迁移!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

mysql表空间传输过程

发布时间:2022-01-18 14:23:26 所属栏目:MySql教程 来源:互联网
导读:本篇内容介绍了mysql表空间传输过程的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 在MySQL 5.6 版本中引入了一个可移动表空间的新特性(复制的表
        本篇内容介绍了“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 scoreG
 
*************************** 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表空间传输过程”的内容就介绍到这里了,感谢大家的阅读。

(编辑:我爱制作网_潮州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读