前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 如何跨机器加载数据(附脚本)?

MySQL 如何跨机器加载数据(附脚本)?

原创
作者头像
serena
修改2021-08-03 14:56:05
1.3K0
修改2021-08-03 14:56:05
举报
文章被收录于专栏:社区的朋友们社区的朋友们

作者:温开源

近期有同事需要做跨机器将一个数据文件导入到MySQL的需求,所以将以前做的笔记及随带脚本分享一下。

跨机器 load data

若本机有一个文件: /tmp/load.txt,需要导入到远端的 mysqlxxx_table里,可以用如下命令:

代码语言:javascript
复制
mysql -hx.x.x.x -uxxxx -pxxxx db -BN --local-infile=1 
      -e "load data local infile '/tmp/load.txt' into table xxx_table;"
  • 解析: \--local-infile=1 参数: 打开远端服务器的 local-infile 开关,允许 local infile 操作。 SQL 中:local infile 语法不同于 infile,前者从客户端机器读取文件,后者从服务器读取文件。 官方参考:http://dev.mysql.com/doc/refman/5.7/en/load-data.html

问题解决

如果服务器端(mysqld) 启动时指定了 \--local-infile=0,则 local infile中的 local 不会生效,即使在 mysql 命令中指定 \--local-infile=1,也无用。

这个限制为了避免一些安全问题:http://dev.mysql.com/doc/refman/5.7/en/load-data-local.html

附:通用脚本

通用的一个脚本,改改其中的这些参数:-uUSER -pPASSWD -hHOST DB 即可使用,load 的文本数据必须是 utf8 编码的,若是其他编码,修改脚本中 sql 中的 CHARACTER SET 部分。

  • load_data.sh
代码语言:javascript
复制
#!/bin/bash

MYSQL='mysql -uUSER -pPASSWD -hHOST DB --default-character-set=utf8 --local-infile=1 '

function LOG()
{
    echo "[`date  "%Y-%m-%d %H:%M:%S"` $$] $*"
}

if [[ -z "$2" ]]
then
    echo "Usage:"
    echo "  $0 <file> <table> [cols] [create_sql]"
    exit 1
fi

FILE=`readlink -m "$1"`
TABLE=$2
COLS=$3
CREATE_SQL=$4

sql="${CREATE_SQL}load data local infile '${FILE}' into table ${TABLE} CHARACTER SET utf8 ${COLS};"

LOG "${sql}"

if ${MYSQL} -e "${sql}"
then
    LOG "Load ${FILE} into table ${TABLE} success."
    exit 0
else
    LOG "Load ${FILE} into table ${TABLE} fail."
    exit 1
fi
  • 调用样例 ./load_data.sh test_data.txt test_data '(hash, cnt, url)' 'create table if not exists test_data( hash bigint(20) unsigned, cnt int(10) unsigned, url text, ) ENGINE = MyISAM DEFAULT CHARSET = utf8;'

如果不需要自动创建数据表,最后这个参数可以不要。 如果不指定列名,倒数第二个参数也可以不要。

即下面两种写法都可以:

代码语言:javascript
复制
  ./load_data.sh test_data.txt test_data '(hash, cnt, url)'
  ./load_data.sh test_data.txt test_data

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 跨机器 load data
  • 问题解决
  • 附:通用脚本
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档