MySQL数据库 快速导出和导入 迁移
数据库快速导出和导入
在公司中,如果运营或者产品手里有几千万甚至几亿条数据,要求你将其导入数据中,请问如何做?
如果你依据运营或产品交给你的数据文件直接使用insert语句,一行一行地批量插入,那至少需要1-2天时间才能插入完毕,此时我们可以用load data infile
语句。load data infile
语句可以从一个文本文件中,将数据以很高的速度读入一个表中。MySQL官方文档也说明了,该方法比一次性插入一条数据性能快20倍。此外,mysql也支持快速导出语句select into outfile
。
使用MySQL的select into outfile
、load data infile
快速导出导入数据,12G的数据导出用时3分钟左右,导入用时4分钟左右(执行时间根据机器的配置会有所不同,不具有参考价值)。
快速导出
语法: select ... into outfile 导出文本文件要想导出成功,需要设置安全目录才行 vim /etc/my.cnf [mysqld] secure-file-priv=/tmp # 指定导出的目录
示例:
SELECT * FROM db1.t1 INTO OUTFILE '/tmp/db1_t1.txt' FIELDS TERMINATED BY ',' -- 定义字段分隔符 OPTIONALLY ENCLOSED BY '"' -- 定义字符串使用什么符号括起来 LINES TERMINATED BY '\n'; -- 定义换行符
快速导入
语法
load data infile 导入的文本文件路径
示例
mysql> delete from t1; mysql> create table new_t1(表结构与文件中数据保持一致); mysql> LOAD DATA INFILE '/tmp/db1_t1.txt'INTO TABLE new_db.new_t1FIELDS TERMINATED BY ','OPTIONALLY ENCLOSED BY '"'LINES TERMINATED BY '\n';
其他导出
mysql 命令导出文本文件
示例mysql -u root -p123 -e 'select * from db1.t1' > /tmp/db1_t1.txt mysql -u root -p123 --xml -e 'select * from db1.t1' > /tmp/db1_t1.xml -- xml文件跨平台性 mysql -u root -p123 --html -e 'select * from db1.t1' > /tmp/db1_t1.html
快速导入导出案例
创建表数据
create database db01;
use db01;create table employee(
id int not null unique auto_increment,
name varchar(20) not null,
sex enum("male","female") not null default "male",
age int(3) unsigned not null default 28,
hire_date date not null,
post varchar(50),
post_comment varchar(100),
salary double(15,2),
office int,
depart_id int
);# 插入数据
insert into employee(name,sex,age,hire_date,post,salary,office,depart_id) values
("sun","male",18,"20170301","猥琐欲为",1000.22,401,1),
("haha","male",78,"20150302","teacher",10000.31,401,1),
("xixi","male",81,"20130305","teacher",8300.31,401,1),
("dudu","male",72,"20150312","teacher",3100,401,1);
快速导出数据
# 修改配置文件,指定导出的目录
vim /etc/my.cnf
[mysqld]
secure-file-priv=/tmp# 重启数据库
systemctl restart mysql# 导出数据
mysql> SELECT * FROM db01.employee-> INTO OUTFILE '/tmp/employee.txt'-> FIELDS TERMINATED BY ','-> OPTIONALLY ENCLOSED BY '"'-> LINES TERMINATED BY '\n';-> LINES TERMINATED BY '\n';
Query OK, 4 rows affected (0.00 sec)# 查看导出的数据
cat /tmp/employee.txt
# 1,"sun","male",18,"2017-03-01","猥琐欲为",\N,1000.22,401,1
# 2,"haha","male",78,"2015-03-02","teacher",\N,10000.31,401,1
# 3,"xixi","male",81,"2013-03-05","teacher",\N,8300.31,401,1
# 4,"dudu","male",72,"2015-03-12","teacher",\N,3100.00,401,1
快速导入数据
# 创建表,表结构与数据保持一致
create table test(
id int not null unique auto_increment,
name varchar(20) not null,
sex enum("male","female") not null default "male",
age int(3) unsigned not null default 28,
hire_date date not null,
post varchar(50),
post_comment varchar(100),
salary double(15,2),
office int,
depart_id int
);# 导人数据
mysql> LOAD DATA INFILE '/tmp/employee.txt'-> INTO TABLE db01.test-> FIELDS TERMINATED BY ','-> OPTIONALLY ENCLOSED BY '"'-> LINES TERMINATED BY '\n';
Query OK, 4 rows affected (0.00 sec)
Records: 4 Deleted: 0 Skipped: 0 Warnings: 0# 查看导入的新表数据
mysql> select * from db01.test;
+----+------+------+-----+------------+--------------+--------------+----------+--------+-----------+
| id | name | sex | age | hire_date | post | post_comment | salary | office | depart_id |
+----+------+------+-----+------------+--------------+--------------+----------+--------+-----------+
| 1 | sun | male | 18 | 2017-03-01 | 猥琐欲为 | NULL | 1000.22 | 401 | 1 |
| 2 | haha | male | 78 | 2015-03-02 | teacher | NULL | 10000.31 | 401 | 1 |
| 3 | xixi | male | 81 | 2013-03-05 | teacher | NULL | 8300.31 | 401 | 1 |
| 4 | dudu | male | 72 | 2015-03-12 | teacher | NULL | 3100.00 | 401 | 1 |
+----+------+------+-----+------------+--------------+--------------+----------+--------+-----------+
4 rows in set (0.00 sec)
以html格式导出数据案例
[root@db01 ~]# mysql -u root -p123 --html -e 'select * from db01.test' > /opt/db1_t1.html
Warning: Using a password on the command line interface can be insecure.
[root@db01 ~]# ls /opt
db1_t1.html
MySQL迁移数据库的方案
通常有三种方案
1、数据库直接导出,拷贝文件到新服务器,在新服务器上导入。
例如
基于mysqldump
在源主机执行下述命令,需要目标主机开启远程账号权限
mysqldump -h 迁移源IP -uroot -p123 --databases db01 | mysql -h 目标IP -uroot -p456基于LOAD DATA INFILE
优点:
- 会重建数据文件,减少数据文件的占用空间(释放undo段),兼容性最好,导出导入很少发生问题,需求灵活
缺点:
- 导入导出都需要很长的时间,并且导出后的文件还要经过网络传输,也要占用一定的时间。
2、使用第三方迁移工具。
例如:使用【MySQL GUI Tools】中的 MySQLMigrationTool。优点:
- 设置完成后传输无人值守,自动完成
缺点:
- 不够灵活,设置繁琐
- 传输时间长,
- 传输中网络出现异常,不能及时的被发现,并且会一直停留在数据传输的状态不能被停止,如不仔细观察不会被发现异常。
- 异常后很难从异常的位置继续传输。
3、数据文件和库表结构文件直接拷贝到新服务器,挂载到同样配置的MySQL服务下。
优点:
- 时间占用最短,文件可断点传输,操作步骤少。
缺点:
- 新旧服务器中MySQL版本及配置必须相同,可能引起未知问题。
假如数据库迁移是因为业务瓶颈或项目改造等需要变动数据表结构的(比如分区分表),我们便只能使用第一种方法了。
第三种方案的迁移步骤:
保证Mysql版本一致,安装配置基本一致(注意:这里的数据文件和库表结构文件都指定在同一目录 data下)
停止两边的Mysql服务(A服务器–迁移–>B服务器)
删除B服务器Mysql的data目录下所有文件
拷贝A服务器Mysql的data目录下除了ib_logfile和.err之外的文件到B服务器data下
启动B服务器的Mysql服务,检测是否发生异常
MySQL数据库 快速导出和导入 迁移相关推荐
- 【Mysql】Mysql数据库数据导出\导入
如何在 MySQL / MariaDB 中导入导出数据,导入导出数据库文件.Excel.CSV - 卡拉云 本文介绍Mysql数据库数据导出及导入方法.以及重要补充内容 目录 1. MySQL 数据库 ...
- kibana数据导入导出_MySQL数据库批量导出和导入查询数据
MySQL数据库批量导出和导入查询数据的过程是使用-e参数去执行命令. 由于工作需要,我需要先在一个MySQL库中查询出结果,然后以查出结果为参数,去放入另外一个MySQL数据库中当成where的条件 ...
- mysql快速导入导出数据库_mysql快速导出与导入
前言:目前各种客户端越来越智能,数据库也随之越来越大,如果要做个什么数据库备份,如果数据库较小还好说,数据库随随便便几十个G,光导出就要耗费大量时间,更别说导入,那么有什么办法可以快速导出,导入呢? ...
- linux mysql批量导入数据,linux怎么快速导入Mysql数据库与导出
linux怎么快速导入Mysql数据库与导出 Era • 2013 年 05 月 19 日 搞了一个vps,最近在学习linux,就记录一些学习的心得吧. 使用phpadmin导入.卖出数据库比较慢不 ...
- excel和mysql php_php将mysql数据库和Excel相互导入和导出的方法
内容提要:本文介绍了PHP将mysql数据库数据导出至Excel及Excel导入到MySQL数据库的方法,并给出源码,可直接使用,非常方便. 做项目时,不少项目要求数据库中数据能导出到excel文档中 ...
- 将sql数据导入mysql数据库_将sql导入mysql数据库
MYSQL导入导出.sql文件 MYSQL导入导出.sql文件 一.MYSQL的命令行模式的设置:桌面->我的电脑->属性->环境变量->新建->PATH=": ...
- MySQL——表的导出和导入
有时会需要将MySQL数据4中的数据导出到外部存储文件中,MySQL数据库中的数据可以导出成qI文本文件.xml文件或者html文件,同样这些导出的文件也可以导入MySQL数据库中, 一. 表的导出 ...
- 从MySql 数据库中导出数据并生成指定格式xml文件
最近网站需要做数据迁移,需要我将网站的数据从mysql数据库中导出,并按照要求生成指定格式的xml文件. xml格式要求: 代码: package com.epsoft.gjjisp;import j ...
- linux如何导出mysql数据,linux下mysql数据的导出和导入
linux下mysql数据的导出和导入 2014年12月09号 发表于:评论 () 热度:1090 导出整个数据库中的所有数据 1.在linux命令行下输入: mysqldump -u userNam ...
最新文章
- 学习ui设计的流程是什么
- golang error信息 转 字符串 x := fmt.Sprintf(“%s“, err)
- RHEL6基础四十二之RHEL文件共享①NFS
- linux(gentoo)安装配置conky
- 3、编写一个prod()函数,可以接受一个list并利用reduce()求积
- scala学习笔记-Array、ArrayBuffer以及遍历数组(7)
- 生成函数Euler变换学习笔记(无标号有根树计数)
- [css] 举例说明微信端兼容问题有哪些?
- wordpress函数手册_WordPress主题开发手册
- linux隔一级目录找文件,linux查看文件和子目录
- python中一切都是对象_python中一切皆对象
- 甘特图看起来很生硬?教你使用智能颜色装饰你的甘特图!(一)
- ssis sql_SSIS OLE DB来源:SQL命令与表或视图
- Keras深度学习实战(4)——深度学习中常用激活函数和损失函数详解
- 数据结构之哈夫曼编码
- dede后台文章不能上传图片及缩略图的解决办法
- 2015 ccpc 南阳国赛
- 【二、玩转vim(vi)编辑器】三大模式及命令介绍、如何通过配置文件.vimrc配置vim编辑器
- 浅析机关单位人力资源内部控制
- 施乐j75服务器电源管理系统,富士施乐推出印刷系统 Color J75 Press