平常 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
- 方法一:直接执行 dumpDb.sh
$ sh dumpDb.sh
- 方法二:为 dumpDb.sh 添加可执行权限
$ chmod u+x dumpDb.sh
$ ./dumpDb.sh
- 创建后台执行脚本 dump.sh,后台执行
$ cat dump.sh
nohup sh dumpDb.sh >/dev/null 2>&1 &
$ sh dump.sh
以上几种方式均可以执行导出脚本,将数据库数据导出。