select … into outfile 备份恢复(load data)以及mysqldump时间对比
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时间对比的更多相关文章
- mysql load data infile的使用 和 SELECT into outfile备份数据库数据
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE] INTO TABLE t ...
- select ... into outfile备份及恢复使用
select ... into outfile语句是一种逻辑备份的方法,更准确地说是导出一张表中的数据. Syntax:SELECT [ALL | DISTINCT | DISTINCTROW ...
- MySQL select into outfile 和 load data infile数据跨库转移
select into outfile用法 SELECT ... FROM TABLE_A INTO OUTFILE "/path/to/file" FIELDS TERMINAT ...
- mysql迁移-----拷贝mysql目录/load data/mysqldump/into outfile
摘要:本文简单介绍了mysql的三种备份,并解答了有一些实际备份中会遇到的问题.备份恢复有三种(除了用从库做备份之外), 直接拷贝文件,load data 和 mysqldump命令.少量数据使用my ...
- Mybatis拦截器 mysql load data local 内存流处理
Mybatis 拦截器不做解释了,用过的基本都知道,这里用load data local主要是应对大批量数据的处理,提高性能,也支持事务回滚,且不影响其他的DML操作,当然这个操作不要涉及到当前所lo ...
- MySQL innobackupex全量备份恢复
转自 http://blog.itpub.net/27099995/viewspace-1295099/ 先简单介绍一下这个工具:innobackupexinnobackupex比xtarbackup ...
- 逻辑备份,mysqldump,SELECT…INTO OUTFILE,恢复
逻辑备份 mysqldump mysqldump备份工具最初由Igor Romanenko编写完成,通常用来完成转存(dump)数据库的备份以及不同数据库之间的移植,例如从低版本的MySQL数据库升级 ...
- mysql into outfile 和 load data local备份还原
在 my.ini 的 [mysqld] 节点增加如下配置: secure-file-priv="D:/mysql_secure_file" max_allowed_packet= ...
- select into outfile 与 load data infile
select into outfile用法 MySQL中,可以使用SELECT...INTO OUTFILE语句将表的内容导出为一个文本文件. SELECT [列名] FROM table [WHER ...
随机推荐
- 学习 shell —— 条件判断 if 的参数
1. 文件判断表达式 -e filename:如果 filename 存在(exist),则为真: -d filename:如果 filename 为目录(directory),则为真: -f fil ...
- oracle得到建表语句
第一种方法是使用工具,如:pl/sql developer,在[工具]--[导出用户对象]出现就可以得到建表脚本. 第二种方法是,sql语句. DBMS_METADATA.GET_DDL包可以得到数据 ...
- 利用bat批处理——实现数据库的自动备份和删除
之前见别人一直在玩批处理,最近公司也在用,就顺便学习下: 首先创建一个 txt文件 命名BackupDataBase 并修改后缀为.bat 编写两条命令: sqlcmd -S . -E -Q &qu ...
- spring-session与redis实现session共享
一.准备 两个不同端口号的输出request.getLocalPort() + " ---> " + request.getSession(true).getId()的简单S ...
- Pyhton学习——Day48
# 转载:http://www.cnblogs.com/yuanchenqi/articles/6437362.html#python关于mysql的API--pymysql模块# 执行sql语句# ...
- Pyhton学习——Day41
#一个完整的 JavaScript 实现是由以下 3 个不同部分组成的:# 核心(ECMAScript)# 文档对象模型(DOM) Document object model (整合js,css,ht ...
- Android 7.0 Gallery图库源码分析4 - SlotView手势监听及页面跳转
上篇文章讲了初始化View时会实例化一个SlotView并监听其事件,至于它是怎么实现的,用的是Android自带的GestureDetector. GestureDetector是Android自带 ...
- js异步队列之理解
起因 最近看到一篇关于js异步执行顺序的解答,觉得有所收获,遂记录下来. marcotask和microtask js中异步队列可以分为两类,marcotask队列和microtask队列, marc ...
- BZOJ 4012 [HNOI2015]开店 (树分治+二分)
题目大意: 给你一棵树,边有边权,点有点权,有很多次询问,求点权$\in[l,r]$的所有节点到某点$x$的距离之和,强制在线 感觉这个题应该放在动态点分之前做= = 套路方法和动态点分是一样的 每次 ...
- 模板 FFT 快速傅里叶变换
FFT模板,原理不难,优质讲解很多,但证明很难看太不懂 这模板题在bzoj竟然是土豪题,服了 #include <cmath> #include <cstdio> #inclu ...