MySQL数据导出导入

有时候,我们需要跨MySQL服务器复制表的数据,可以使用MySQL的select语句将文件导出成文本,然后再使用load语句导入到另一台MySQL服务器。这种复制数据的方式,简单高效。

  1. 确认导出权限是否开启
    在进行数据导出之前,首先要确认导出权限是否开启,否则是禁止导出的。
mysql> show variables like '%secure%';
+--------------------------+-----------------------+
| Variable_name            | Value                 |
+--------------------------+-----------------------+
| require_secure_transport | OFF                   |
| secure_auth              | ON                    |
| secure_file_priv         | /var/lib/mysql-files/ |
+--------------------------+-----------------------+

会看到secure_file_priv的值,该值的路径就是允许数据导出的路径,必须将数据导出到secure_file_priv指定的路径。如果该值为NULL,说明禁止数据导出。那么需要进行设置,将导出权限打开。设置方法是Linux下,编辑my.cnf文件,具体如下:

[root@localhost ~]# vim /etc/my.cnf

在配置文件中添加指定数据导出路径的配置:
 secure_file_priv = /var/lib/mysql-files  #该值可以根据情况指定

指定好路径之后,需要对目录进行赋权,赋予可写的权限。否则可能报错没有写权限的错误。默认情况下,MySQL导出数据是使用的mysql用户,而不是root用户。赋权如下:

[root@localhost ~]# chmod 777 -R /var/lib/mysql-files
  1. 导出数据
    配置好数据导出权限后,就可以进行数据导出了,很简单,具体如下:
mysql> select * from dbname.tablename into outfile '/var/lib/mysql-files/tablename.txt' CHARACTER SET utf8;
###指定导出数据的字段分隔符
mysql> select * from dbname.tablename into outfile '/var/lib/mysql-files/tablename.txt' FIELDS terminated by '\,' character set utf8;

其中编码的设置,必须要跟需要导入数据的数据库相同,跟导出数据的数据库无关。导入数据的数据库的编码是什么?可以在MySQL客户端使用status命令查看。如下:

mysql> status;
--------------
mysql  Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using  EditLine wrapper

Connection id:		23481
Current database:
Current user:		root@localhost
SSL:			Not in use
Current pager:		stdout
Using outfile:		''
Using delimiter:	;
Server version:		5.7.17 MySQL Community Server (GPL)
Protocol version:	10
Connection:		Localhost via UNIX socket
Server characterset:	utf8
Db     characterset:	utf8
Client characterset:	utf8
Conn.  characterset:	utf8
UNIX socket:		/var/lib/mysql/mysql.sock
Uptime:			12 days 3 hours 23 min 51 sec

Threads: 5  Questions: 396746757  Slow queries: 0  Opens: 48403  Flush tables: 1  Open tables: 1808  Queries per second avg: 378.203
--------------
  1. 导入数据
    数据导出之后,可以通过scp命令将数据文件远程拷贝到目标服务器,然后在目标服务器进行数据导入。导入命令如下:
mysql>load data local infile '/var/lib/mysql-files/table.txt'  into table dbname.tablename character set utf8;
###指定导入数据的字段分割符
mysql>load data local infile '/var/lib/mysql-files/table.txt'  into table dbname.tablename FIELDS terminated by ',' character set utf8;

这样,数据就可以导入到数据库中了。关于load data更详细的语法可以在MySQL客户端使用help load data查看。

这种方式的数据导出导入还是很快的,比mysqldump要快很多。如果要进行两个MySQL服务器之间的数据复制,可以考虑这种方式。如果表较多,可以通过编写脚本,自动的进行数据导出导入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值