采用 expect 自动交互命令导出 MySQL 数据库表

26 篇文章 3 订阅
6 篇文章 0 订阅

  平常 MySQL 数据库导出时,可用如下命令格式。

$ mysqldump -h [mysqlhost ip] -P [mysql port] -u [mysql user] -p [mysql database] --single-transaction --skip-opt -t --skip-tz-utc > [filename]

  各参数意义如下:

  • [mysqlhost ip]:数据库 IP
  • [mysql port]:数据库端口
  • [mysql user]:数据库访问用户
  • [mysql database]:数据库名
  • [filename]:导出文件名字
  • --skip-opt:跳过锁表(即导出时不锁表)
  • -t:只导数据,不导表结构

  示例:输入如下命令,回车输入密码即可导出 testdb 数据库全部表格。

$ mysqldump -h 101.132.242.27 -P 3306 -u testuser -p testdb --single-transaction --skip-opt -t --skip-tz-utc > testdb.sql
Enter password: 

  对于需要定时备份数据库的操作来说,上述语句每次都需要手动输入命令,不太方便。可以借助 expect 自动交互命令来实现自动输入数据库密码来完成导出文件。具体步骤如下。

一、创建脚本文件 dumpDb.sh,编辑脚本如下。

$ cat dumpDb.sh 
#!/bin/sh

starttime=$(date "+%Y-%m-%d %H:%M:%S")
echo $starttime "Starting dump testdb data" >> dump.log

/usr/bin/expect<<EOF
 set timeout 300
 spawn sh -c "/usr/bin/mysqldump -h 101.132.242.27 -P 3306 -u testuser -p testdb --single-transaction --skip-opt -t --skip-tz-utc > testdb.sql"
 expect "Enter password:" 
 send "yourpassword\n" 
 expect EOF
EOF

endTime=$(date "+%Y-%m-%d %H:%M:%S")
echo $endTime "Ending dump testdb data" >> dump.log

exit

  上述脚本文件,导出数据库前将开始时间追加到 dump.log 文件中,然后将数据库全库数据导出到文件 testdb.sql(具体参数值可修改为实际的数据库配置),最后将结束时间追加到 dump.log 文件中。

二、执行导出脚本 dumpDb.sh

  1. 方法一:直接执行 dumpDb.sh
$ sh dumpDb.sh
  1. 方法二:为 dumpDb.sh 添加可执行权限
$ chmod u+x dumpDb.sh 
$ ./dumpDb.sh
  1. 创建后台执行脚本 dump.sh,后台执行
$ cat dump.sh 
nohup sh dumpDb.sh >/dev/null 2>&1 &
$ sh dump.sh

  以上几种方式均可以执行导出脚本,将数据库数据导出。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值