select … into outfile 'path' 备份

此种方式恢复速度非常快,比insert的插入速度要快的多,他跟有备份功能丰富的mysqldump不同的是,他只能备份表中的数据,并不能包含表的结构。如果备份完成之后,表被drop,是无法实现恢复操作的(除非有表结构)。

mysql> select * from t1 into outfile '/mydata/mysql/mysql3307/data/t1.sql';

ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

mysql> show variables like '%secure%';

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

| Variable_name            | Value |

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

| require_secure_transport | OFF   |

| secure_auth              | ON    |

| secure_file_priv         | NULL  |

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

3 rows in set (0.00 sec)

mysql> set secure_file_priv='/tmp';

ERROR 1238 (HY000): Variable 'secure_file_priv' is a read only variable

mysql> set session secure_file_priv=='/tmp';

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=='/tmp'' at line 1

mysql>

关闭MYSQL数据库,设置secure_file_priv 目录。

[root@mysql5 ~]# mysqladmin -S /tmp/mysql3307.sock -uroot -pmysql shutdown

mysqladmin: [Warning] Using a password on the command line interface can be insecure.

[root@mysql5 ~]#

[root@mysql5 ~]#

[root@mysql5 ~]# ps -ef |grep mysql

root      3506  2071  0 01:24 pts/1    00:00:00 grep mysql

[root@mysql5 ~]#

vi /etc/my3307.cnf

[mysqld]里面加入

secure_file_priv=/tmp

启动后查看

mysql> show global variables like '%secu%';

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

| Variable_name            | Value |

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

| require_secure_transport | OFF   |

| secure_auth              | ON    |

| secure_file_priv         | /tmp/ |

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

3 rows in set (0.01 sec)

select * from t1 into outfile '/tmp/t1_onlydata.sql';

mysql> select * from t1 into outfile '/tmp/t1_onlydata.sql';

Query OK, 972864 rows affected (1.12 sec)

mysql> desc t1;

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

| Field | Type   | Null | Key | Default | Extra |

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

| id    | int(4) | YES  | MUL | NULL    |       |

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

1 row in set (0.00 sec)

全是文本文件数据。

select … into outfile 'path' 恢复

清除t1表数据,并进行恢复

mysql> truncate table t1;

Query OK, 0 rows affected (0.04 sec)

mysql> desc t1;

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

| Field | Type   | Null | Key | Default | Extra |

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

| id    | int(4) | YES  | MUL | NULL    |       |

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

1 row in set (0.00 sec)

LOAD DATA恢复数据(只能恢复数据)

语法:

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'

[REPLACE | IGNORE]

INTO TABLE tbl_name

[PARTITION (partition_name [, partition_name] ...)]

[CHARACTER SET charset_name]

[{FIELDS | COLUMNS}

[TERMINATED BY 'string']

[[OPTIONALLY] ENCLOSED BY 'char']

[ESCAPED BY 'char']

]

[LINES

[STARTING BY 'string']

[TERMINATED BY 'string']

]

[IGNORE number {LINES | ROWS}]

[(col_name_or_user_var

[, col_name_or_user_var] ...)]

[SET col_name={expr | DEFAULT},

[, col_name={expr | DEFAULT}] ...]

load data INFILE '/tmp/t1_onlydata.sql'  INTO TABLE test.t1;

查看表数据:

恢复成功。

load data 与insert的插入速度对比

于是,我猜想可以用mysqldump进行表结构的备份,用select …into outfile 备份数据,load data 恢复数据,测试两者速度。

创建一张表。

delimiter //

create procedure per2()

begin

declare i int;

set i=1;

while i <= 1000000 do

insert into test.L values(i,'aaaaa');

set i=i+1;

end while;

end

//

执行存储过程:

call per2();

//

查看数据(实际我只插入仅14万行数据)

mysqldump备份元数据文件

mysqldump -S /tmp/mysql3307.sock -uroot -pmysql --single-transaction --set-gtid-purged=OFF test L -d > /tmp/L_meta.sql

select … into outfile 'path' 备份

select * from test.L into outfile '/tmp/20180525test_Ldata.sql'

mysqldump备份整个表

mysqldump -S /tmp/mysql3307.sock -uroot -pmysql --single-transaction --set-gtid-purged=OFF test L  > /tmp/L_table.sql

恢复时间对比

1、MYSQLdump先恢复表结构(或者直接建表)

先删除,恢复表结构。

恢复表结构:

这核时间很快,就是建一张表的时间,不计算进去对整体时间没有影响。

例如我建表:

建表时间0.03s。

2、load data恢复时间

load data INFILE '/tmp/20180525test_Ldata.sql' INTO TABLE test.L;

时间是1.59s。

3、MYSQLDUMP这种插入方式恢复

time mysql -S /tmp/mysql3307.sock -uroot -pmysql test < /tmp/L_table.sql

将近2s MYSQLDUMP恢复时间。

总结

元数据恢复+LOAD DATA时间一共

T1=0.03+1.59=1.62s

MYSQLDUMP恢复一共花了

T2=1.99s

对于14万数据,load data比mysqldump快了近1/4,对于大数据量,应该快更多,在允许的情况下,可以利用元数据(或者表结构),配合LOAD DATA恢复单表。

select … into outfile 备份恢复(load data)以及mysqldump时间对比的更多相关文章

  1. mysql load data infile的使用 和 SELECT into outfile备份数据库数据

    LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE] INTO TABLE t ...

  2. select ... into outfile备份及恢复使用

    select ... into outfile语句是一种逻辑备份的方法,更准确地说是导出一张表中的数据. Syntax:SELECT    [ALL | DISTINCT | DISTINCTROW ...

  3. MySQL select into outfile 和 load data infile数据跨库转移

    select into outfile用法 SELECT ... FROM TABLE_A INTO OUTFILE "/path/to/file" FIELDS TERMINAT ...

  4. mysql迁移-----拷贝mysql目录/load data/mysqldump/into outfile

    摘要:本文简单介绍了mysql的三种备份,并解答了有一些实际备份中会遇到的问题.备份恢复有三种(除了用从库做备份之外), 直接拷贝文件,load data 和 mysqldump命令.少量数据使用my ...

  5. Mybatis拦截器 mysql load data local 内存流处理

    Mybatis 拦截器不做解释了,用过的基本都知道,这里用load data local主要是应对大批量数据的处理,提高性能,也支持事务回滚,且不影响其他的DML操作,当然这个操作不要涉及到当前所lo ...

  6. MySQL innobackupex全量备份恢复

    转自 http://blog.itpub.net/27099995/viewspace-1295099/ 先简单介绍一下这个工具:innobackupexinnobackupex比xtarbackup ...

  7. 逻辑备份,mysqldump,SELECT…INTO OUTFILE,恢复

    逻辑备份 mysqldump mysqldump备份工具最初由Igor Romanenko编写完成,通常用来完成转存(dump)数据库的备份以及不同数据库之间的移植,例如从低版本的MySQL数据库升级 ...

  8. mysql into outfile 和 load data local备份还原

    在 my.ini 的  [mysqld] 节点增加如下配置: secure-file-priv="D:/mysql_secure_file" max_allowed_packet= ...

  9. select into outfile 与 load data infile

    select into outfile用法 MySQL中,可以使用SELECT...INTO OUTFILE语句将表的内容导出为一个文本文件. SELECT [列名] FROM table [WHER ...

随机推荐

  1. 三大表连接方式详解之Nested loop join和 Sort merge join

    在早期版本,Oracle提供的是nested-loop join,两表连接就相当于二重循环,假定两表分别有m行和n行       如果内循环是全表扫描,时间复杂度就是O(m*n)       如果内循 ...

  2. [jzoj 5662] 尺树寸泓 解题报告 (线段树+中序遍历)

    interlinkage: https://jzoj.net/senior/#contest/show/2703/1 description: solution: 发现$dfs$序不好维护 注意到这是 ...

  3. checkbox的使用总结

    1 checkbox如何选中时显示内容,不被选中时隐藏内容 <!DOCTYPE html> <html> <head> <meta name="vi ...

  4. Combo Select – jQuery可搜索下拉框插件

    今天用到另一款jq插件..插件就是无脑,,引入相关文件,开始撸吧 引入相关文件: <link href="~/Scripts/combo-select/combo.select.css ...

  5. struts2学习之基础笔记3

    第8章Struts 2类型转换 使用类型转换器 自定义类型转换器 步骤:1. Struts 2 构建流程 2.自定义类型转换器类(继承 DefaultTypeConverter /StrutsType ...

  6. usaco No Change, 2013 Nov 不找零(二分查找+状压dp)

    Description 约翰带着 N 头奶牛在超市买东西,现在他们正在排队付钱,排在第 i 个位置的奶牛需要支付 Ci 元.今天说好所有东西都是约翰请客的,但直到付账的时候,约翰才意识到自己没带钱,身 ...

  7. 大话主席(superslide和 touchslide)插件的使用

    对于实现效果来说,插件的办事效率真的是太高了,而且里边也被处理过兼容性,用起来实在是特别方便,现在我们来说说大话主席中的slide插件,它分为pc端(superslide)和移动端(touchslid ...

  8. windows phone LongListSelector加载下一页

    LongListSelector利用ListHeader.ListFooter加载上一页和下一页XAML代码: <phone:LongListSelector> <phone:Lon ...

  9. 关于Java中equal函数和==的一些区别

    equal函数比较的到底是什么,很明显是比较的值,但是什么值?与==比较的堆中的内存地址不同,其比较的是对象的值,包括各个属性的值.我们在重新overriding此方法时首先要判断是否为同一对象,如果 ...

  10. Javascript常用字符串判断函数

    [代码] 字符串,函数,Javascript,脚本100 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ...