千家信息网

如何实现linux下使用ssh远程执行命令批量导出数据库到本地

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍"如何实现linux下使用ssh远程执行命令批量导出数据库到本地",在日常操作中,相信很多人在如何实现linux下使用ssh远程执行命令批量导出数据库到本地问题上存在疑惑,小编查阅了各
千家信息网最后更新 2026年11月04日如何实现linux下使用ssh远程执行命令批量导出数据库到本地

这篇文章主要介绍"如何实现linux下使用ssh远程执行命令批量导出数据库到本地",在日常操作中,相信很多人在如何实现linux下使用ssh远程执行命令批量导出数据库到本地问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何实现linux下使用ssh远程执行命令批量导出数据库到本地"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

  先配置ssh通过key登录服务器。

  然后就是通过ssh执行命令。先看一下ssh的帮助文档:

usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]      [-D [bind_address:]port] [-E log_file] [-e escape_char]      [-F configfile] [-I pkcs11] [-i identity_file]      [-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec]      [-O ctl_cmd] [-o option] [-p port]      [-Q cipher | cipher-auth | mac | kex | key]      [-R [bind_address:]port:host:hostport] [-S ctl_path] [-W host:port]      [-w local_tun[:remote_tun]] [user@]hostname [command]

最后一项就是执行指令的。假如远程服务器地址为180.97.33.108,开启的ssh端口为998,ssh用户名为xzc,然后想通过在远程服务器上执行命令ls,那么脚本应该这么写:

代码如下:

ssh xzc@180.97.33.108 -p 998 "ls"

如果ssh的认证key已配置好,那么会把登录后当前目录下的文件列出来,当然第一次登录会提示保存远程服务器的指纹。现在是要导出数据库的数据,那么需要把ls命令换成导出数据库的命令。

代码如下:

echo "select * from user;" | mysql xzc_db -uxzc -pxzcpwd
#或者
mysql xzc_db -uxzc -pxzcpwd -e "select * from user"

上面两命令都可以使用数据库用户xzc,密码xzcpwd从数据库xzc_db打印出user表,使用的是默认的本地数据库地址localhost,默认的端口。如果不是默认,需要指定。

   登录OK了,打印也OK了,那么下一步就是导出到文件了。这在bash也就是一个 > 的事。把上面的命令拼起来就是:

代码如下:

ssh xzc@180.97.33.108 -p 998 'echo "select * from user;" | mysql xzc_db -uxzc -pxzcpwd' > user.txt

这样就把user表导出来本地的user.txt中了。注意"> user.txt"如果放到 ''里则是在远程服务器执行,导出的文件在远程服务器。文件现在也有了,不过是txt,这样交给运营不太好吧。那就导出excel吧。不过遗憾的是我查了N多资料,也找不到mysql不依赖第三方插件或工具导出原生excel的方法。而navicat导出的可是货真价实的excel,如果用notepad++之类的文本工具打开是会乱码的,并且导出的文件不会有编码问题。幸好如果一个txt以tab分割的话,excel也是能认得出来的。于是把user.txt改名user.xls就可以了。但这样做的问题是excel会按自己的方式处理内容的。比如把一个很大的数字转换成科学记数法形式。这些都得手动去处理一下了。

  最后,就是写成脚本批量操作了。附上我使用的脚本一个:

#!/bin/bash# 通过ssh远程执行远程指令# 需要先部署key认证,保证ssh只需要ip、port即可连接# 如果需要和远程服务器交互,请参考ssh的-t、-tt参数# 如果需要反复登录服务器执行多条指令,请使用ssh的通道重用# 参考:http://en.wikibooks.org/wiki/OpenSSH/Cookbook/Multiplexing# 使用通道需要注意退出通道,如"ssh github.com -O exit"或者"ssh github.com -O stop"#                       --by coding my life#分别设置ssh用户名、数据库用户名、数据库密码、导出数据SSH_USER='xzc_ssh'DB_USER='xzc_db'DB_PWD='xzc_db_pwd123'EXP_PATH=export_data/# 执行远程命令# $1 服务器ip# $2 ssh端口# $3 指令function exec_remote_command(){  ssh $SSH_USER@$1 -p $2 '$3'}# 执行远程sql,导出数据# $1 服务器ip# $2 ssh端口# $3 指令,多个sql指令如select * from user;select * from bag;也可执行,但结果将会写到同一个文件# s4 服务器# $5 导出文件function export_remote_sql(){  echo export from $4 ...  cmd="echo \"$3\" | mysql $4 -u$DB_USER -p$DB_PWD --default-character-set=utf8"  ssh $SSH_USER@$1 -p $2 "$cmd" > $EXP_PATH$4_$5  #如果要导出到远程服务器,将把 > $EXP_PATH$4_$5放到cmd中}# $1 区服名# $2 ip# $3 端口function exec_sqls(){  cat SQLS | while read sql ; do      fc=${sql:0:1}    if [ "#" == "$fc" ]; then  #被注释的不处理      continue    fi    #sql语句中包含空格,不能再以空格来区分。最后一个空格后的是导出的文件名    exp_file="${sql##* }"        #两个#表示正则以最大长度匹配*和一个空格(*后面的空格),截取余下的赋值给exp_file    sql_cmd="${sql%% $exp_file}"     #两个%表示从右至左删除%%以后的内容        export_remote_sql $2 $3 "$sql_cmd" $1 "$exp_file"  done}# 需要在当前目录下创建服务器列表文件SERVERS,格式为"数据库名 ip ssh端口",如"xzc_game_s99 127.0.0.1 22"# 需要在当前目录下创建sql命令列表文件SQLS,格式为"sql语句 导出的文件",如"select * from user; user.xls"# 多个sql请注意用;分开,sql必须以;结束# 文件名中不能包含空格,最终导出的文件为"数据库名_文件名",如"xzc_game_s99_user.xls"mkdir -p $EXP_PATHcat SERVERS | while read server ; do  fc=${server:0:1}  if [ "#" == "$fc" ]; then  #被注释的不处理    continue  fi  name=`echo $server|awk '{print $1}'`  ip=`echo $server|awk '{print $2}'`  port=`echo $server|awk '{print $3}'`  exec_sqls $name $ip $portdone

当前目录下的文件如下,其中SERVERS是服务器列表,里面指定数据库名,ip,ss端口,SQLS则指定sql指令及导出的文件名。这两个文件里以#开头的都不会处理:

xzc@xzc-HP-ProBook-4446s:~/桌面/remote_cmd$ lsremote_cmd.sh SERVERS SQLSxzc@xzc-HP-ProBook-4446s:~/桌面/remote_cmd$ cat SERVERS xzc_game_s99 120.0.0.99 6162xzc_game_s91 120.0.0.91 6162xzc_game_s92 120.0.0.92 6162xzc_game_s93 120.0.0.93 6162xzc_game_s94 120.0.0.94 6162#xzc_game_s91 120.0.0.91 6162xzc@xzc-HP-ProBook-4446s:~/桌面/remote_cmd$ cat SQLS #select * money from money; money.xlsselect * from user; user.xlsxzc@xzc-HP-ProBook-4446s:~/桌面/remote_cmd$

到此,关于"如何实现linux下使用ssh远程执行命令批量导出数据库到本地"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

数据 文件 数据库 服务器 服务 命令 指令 端口 空格 就是 处理 登录 文件名 桌面 用户 目录 学习 两个 代码 脚本 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司简介 苏州找大状互联网科技有限公司 科技互联网政务服务 互联网金融 金融科技 奇酷互联网科技公司 唐信互联网科技 互联网科技logo 华脉科技工业互联网产品 安控科技rtu产品工业互联网 北京三清互联网科技 互联网科技实习生岗位职责 中国互联网有什么科技含量 智腾互联网科技有限公司 允成互联网科技有限公司融资 企晟互联网信息科技有限公司 深圳市罗太互联网科技有限公司 徐州市互联网科技有限公司 21世纪互联网科技成就 萌小萌互联网科技河南有限公司 中国新注册互联网科技 手冲咖啡和咖啡机区别 重生之互联网科技帝国 互联网科技英文 万易互联网科技有限公司 互联网科技博客 安控科技rtu产品工业互联网 银川新华互联网科技职业技术培训学校图片 中国科技创新与世界互联网大会 互联网科技股为什么大涨 江苏互联网智能科技产品出厂价
0