iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL 复制表的方法
  • 231
分享到

MySQL 复制表的方法

MySQLMySQL复制表 2022-05-31 12:05:50 231人浏览 薄情痞子
摘要

1、Mysqldump 执行过程: 一、将数据导出为 sql 文件。 mysqldump -h$host -P$port -u$user --add-locks=0 --no-create-info

1、Mysqldump

执行过程:

一、将数据导出为 sql 文件。


mysqldump -h$host -P$port -u$user --add-locks=0 --no-create-info --single-transaction --set-gtid-purged=OFF db1 t --where="a>900" --result-file=/client_tmp/t.sql

将数据导出为 sql 文件保存。上面几个参数的含义分别是:

?single-transaction 的作用是,在导出数据的时候不需要对表 db1.t 加表,而是使用 START TRANSACTION WITH CONSISTENT SNAPSHOT 的方法;

?add-locks 设置为 0,表示在输出的文件结果里,不增加" LOCK TABLES t WRITE;" ;

?no-create-info 的意思是,不需要导出表结构;

?set-gtid-purged=off 表示的是,不输出跟 GTID 相关的信息;

?result-file 指定了输出文件的路径,其中 client 表示生成的文件是在客户端机器上的。

二、执行文件,添加到表中


mysql -h127.0.0.1 -P13000 -uroot db2 -e "source /client_tmp/t.sql"

source 并不是一条 SQL 语句,而是一个客户端命令。也就是服务器端具体执行的是文件中的一条条 sql 语句,所以 binlog 记录的都是具体的 sql。

特点

生成的 sql 文件保存在客户端

默认保存数据方式是多个记录对,如下面格式

如果想要保存为一条语句只保存一条记录,那么可以加上参数?skip-extended-insert。

2、导出 CSV 文件(最灵活)

执行过程

一、导出为 CSV 文件


select * from db1.t where a>900 into outfile '/server_tmp/t.csv';

注意:

into outfile 指定了文件的生成位置(/server_tmp/),这个位置必须受参数 secure_file_priv 的限制。

参数 secure_file_priv 的可选值和作用分别是:

  1)如果设置为 empty,表示不限制文件生成的位置,这是不安全的设置;

  2)如果设置为一个表示路径的字符串,就要求生成的文件只能放在这个指定的目录,或者它的子目录;

  3)如果设置为 NULL,就表示禁止在这个 MySQL 实例上执行 select … into outfile 操作。

如果同一个目录下存在同名文件,就会报错

一般情况下一条记录就对应 CSV 文件中的一行,但是如果某个字段值中有 "换行、制表符" 那么文件中也会包含,并且使用 "\" 来转义。

二、导入数据


load data infile '/server_tmp/t.csv' into table db2.t;

过程:

打开文件 /server_tmp/t.csv,以制表符 (\t) 作为字段间的分隔符,以换行符(\n)作为记录之间的分隔符,进行数据读取;

启动事务

判断每一行的字段数与表 db2.t 是否相同:

  1)若不相同,则直接报错,事务回滚;

  2)若相同,则构造成一行,调用 InnoDB 引擎接口,写入到表中。

重复步骤 3,直到 /server_tmp/t.csv 整个文件读入完成,提交事务。

特点

文件保存在服务器端

关于 binlog 的记录,过程如下:

  1)主库执行完成后,将 /server_tmp/t.csv 文件的内容直接写到 binlog 文件中。

  2)往 binlog 文件中写入语句 load data local infile ‘/tmp/SQL_LOAD_MB-1-0' INTO TABLE `db2`.`t`。

  3)把这个 binlog 日志传到备库。

  4)备库的 apply 线程在执行这个事务日志时:

    a. 先将 binlog 中 t.csv 文件的内容读出来,写入到本地临时目录 /tmp/SQL_LOAD_MB-1-0 中;

    b. 再执行 load data 语句,往备库的 db2.t 表中插入跟主库相同的数据。

  关于 "local":

    1)不加“local”,是读取服务端的文件,这个文件必须在 secure_file_priv 指定的目录或子目录下;

    2)加上“local”,读取的是客户端的文件,只要 mysql 客户端有访问这个文件的权限即可。这时候,MySQL 客户端会先把本地文件传给服务端(其他会话涉及的操作),然后执行上述的 load data 流程。

上面的导出操作并不会导出表结构,所以,如果向导出表结构,可以使用 mysqldump 来同时导出 CSV 和表结构


mysqldump -h$host -P$port -u$user --single-transaction --set-gtid-purged=OFF db1 t --where="a>900" --tab=$secure_file_priv

会在$secure_file_priv 定义的目录下,创建一个 t.sql 文件保存建表语句,同时创建一个 t.txt 文件保存 CSV 数据。

3、物理拷贝(最快)

在5.6之前,想要直接把.frm和.ibd文件拷贝到要拷贝的目录下是不行的,因为一个Innodb表除了需要这两个文件还需要在数据字典中注册。但是从 5.6 开始可以解决这一问题,在 5.6 引入了可传输空间,可以通过导出 + 导入表空间来实现拷贝

过程

假设我们现在的目标是在 db1 库下,复制一个跟表 t 相同的表 r,具体的执行步骤如下:

执行 create table r like t,创建一个相同表结构的空表;

执行 alter table r discard tablespace,这时候 r.ibd 文件会被删除;

执行 flush table t for export,这时候 db1 目录下会生成一个 t.cfg 文件;

在 db1 目录下执行 cp t.cfg r.cfg; cp t.ibd r.ibd;这两个命令(这里需要注意的是,拷贝得到的两个文件,MySQL 进程要有读写权限);

执行 unlock tables,这时候 t.cfg 文件会被删除;

执行 alter table r import tablespace,将这个 r.ibd 文件作为表 r 的新的表空间,由于这个文件的数据内容和 t.ibd 是相同的,所以表 r 中就有了和表 t 相同的数据。

注意:

在第 3 步执行完 flsuh table 命令之后,db1.t 整个表处于只读状态,直到执行 unlock tables 命令后才释放读锁;

在执行 import tablespace 的时候,为了让文件里的表空间 id 和数据字典中的一致,会修改 r.ibd 的表空间 id。而这个表空间 id 存在于每一个数据页中。因此,如果是一个很大的文件(比如 TB 级别),每个数据页都需要修改,所以你会看到这个 import 语句的执行是需要一些时间的。当然,如果是相比于逻辑导入的方法,import 语句的耗时是非常短的。

局限

必须是全表拷贝,不能条件拷贝

需要到服务器上拷贝数据,在用户无法登录数据库主机的场景下无法使用

由于是通过拷贝物理文件实现的,源表和目标表都是使用 InnoDB 引擎时才能使用

总结

前两个都是逻辑备份,也就是可以跨引擎使用,最后一个不行

前两个可以条件拷贝,最后一个不行

第二个功能是最灵活的,但是在集群从库接收时会比较耗时(需要先拷贝 CSV 文件数据到本地临时文件),最后一个执行效率是最高的,但是不能跨引擎,且只能进行全量拷贝。

以上就是MySQL 复制表的方法的详细内容,更多关于MySQL 复制表的资料请关注自学编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL 复制表的方法

本文链接: https://www.lsjlt.com/news/10216.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql表结构的复制方法
    本篇内容主要讲解“mysql表结构的复制方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“mysql表结构的复制方法”吧!我们特别是oracle dbas常常会...
    99+
    2024-04-02
  • MySQL复制表的方法有哪些
    这篇文章将为大家详细讲解有关MySQL复制表的方法有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。复制表的几种方式只复制表结构create table tableNa...
    99+
    2024-04-02
  • mysql复制表的几种方式
    mysql复制表的几种方式  所描述的方法还请实际测试一下再使用. 1、复制表结构及数据到新表 CREATE TABLE 新表SELECT * FROM 旧表 这种方法会将oldtable中所有的内容都拷贝过来,当然我们可以用del...
    99+
    2023-09-03
    数据库 sql mysql
  • Mysql 5.6库级表级复制的搭建方法
    本篇内容主要讲解“Mysql 5.6库级表级复制的搭建方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mysql 5.6库级表级复制的搭建方法”吧! ...
    99+
    2024-04-02
  • Mysql复制Replication的实现方法
    本篇内容主要讲解“Mysql复制Replication的实现方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mysql复制Replication的实现方法”吧...
    99+
    2024-04-02
  • navicat复制SQL数据表的方法
    这篇文章给大家分享的是有关navicat复制SQL数据表的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。在我们的电脑里打开navicat软件,选择要复制的数据表,如下所示:点...
    99+
    2024-04-02
  • oracle goldengate复制表的方法是什么
    Oracle GoldenGate可以通过多种方式复制表,包括以下几种方法: 初始加载(Initial Load):Golden...
    99+
    2024-04-09
    oracle
  • 重置MySQL主从复制的方法
    这篇文章给大家分享的是有关重置MySQL主从复制的方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。注意:使用本文的方法后,将删除所有bin-log文件,因此,如果需要可以先备份...
    99+
    2024-04-02
  • 设置MySQL主从复制的方法
    设置MySQL主从复制的方法?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!设置细节:主服务器:192.168.1.10从服...
    99+
    2024-04-02
  • MySQL配置主从复制的方法
    今天小编给大家分享一下MySQL配置主从复制的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、检测通信查看主库(mas...
    99+
    2023-07-02
  • MySQL 复制表结构
    介绍 有时候我们需要原封不动的复制一张表的表结构来生成一张新表,MYSQL提供了两种便捷的方法。 例:CREATE TABLE tb_base( id IN...
    99+
    2024-04-02
  • MySQL如何复制表
    这篇文章将为大家详细讲解有关MySQL如何复制表,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、mysqldump执行过程:一、将数据导出为 sql 文件。mysqldump -h$...
    99+
    2023-06-08
  • Mysql搭建主从复制的方法
    本篇内容主要讲解“Mysql搭建主从复制的方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mysql搭建主从复制的方法”吧!主库:192.168.1.1 从库...
    99+
    2024-04-02
  • mysql文件的复制迁移方法
    这篇文章主要讲解了“mysql文件的复制迁移方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql文件的复制迁移方法”吧!一台mysql服务器由于要更...
    99+
    2024-04-02
  • MySQL主从复制的实现方法
    这篇文章给大家分享的是有关MySQL主从复制的实现方法的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。          &nbs...
    99+
    2024-04-02
  • MySQL怎么复制表
    本篇内容介绍了“MySQL怎么复制表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.MySQL中的外键1...
    99+
    2024-04-02
  • MySQL 数据表修复方法
    MySQL表检查与修复 — check/repair指令 目录 MySQL表检查与修复 --- check/repair指令1. 指令详解2. 操作方法:命令提示符(cmd指令)操作方法SQLyog 操作方法(推荐) ...
    99+
    2023-08-19
    mysql 数据库
  • MySQL 5.7如何在线设置忽略表复制方法
    这篇文章主要介绍MySQL 5.7如何在线设置忽略表复制方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! MySQL5.7版本后增加了在线设置忽略表复...
    99+
    2024-04-02
  • MySQL中复制表的方式你知道几种
    mysql 想必大家比较熟悉了, 我们常见的crud  sql 想必大家也是手到拈来。 但是我在今儿上数据库课的时候,我好像连mysql中复制表的基础写法 都不会。 可能工作中不常用,但作为基础 还是想写出来分享给大家。 这里 我介绍四种常...
    99+
    2023-09-05
    mysql 数据库 sql
  • mysql复制表的几种常用方式总结
    目录mysql复制表的几种方式 1、复制表结构及数据到新表2、只复制表结构到新表3、复制旧表的数据到新表(假设两个表结构一样)4、复制旧表的数据到新表(假设两个表结构不一样)5、可以将表1结构复制到表26、可以...
    99+
    2023-04-10
    mysql复制表语句 mysql如何复制表 mysql数据表复制
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作