大家好,今天给大家带来的是一个分库备份脚本
下面是准备好的4个数据库 aa bb cc dd
执行效果如下
恢复一下看看
shell脚本如下:
#!/bin/bash
myuser=root
mypasswd=123456
mycmd="mysqldump -u$myuser -p$mypasswd"
for dname in `mysql -uroot -p123456 -e "show databases;"| sed 1d | egrep -v "schema|test|mysql"`
do
$mycmd --databases $dname >/opt/${dname}_`date +%F`.sql
done
解析如下:
#!/bin/bash
myuser=root #定义数据库用户
mypasswd=123456 #定义数据库密码
mycmd="mysqldump -u$myuser -p$mypasswd" #备份数据库的命令,这里调用了上面的用户密码。
#然后使用正则取出每个数据库的名字然后使用for循环分别备份,不知道怎么取的可以继续往下看
for dname in `mysql -uroot -p123456 -e "show databases;"| sed 1d | egrep -v "schema|test|mysql"`
do
$mycmd --databases $dname >/opt/${dname}_`date +%F`.sql
#这里调用上面取出的数据库名字和备份命令,备份到指定位置并以时间命名
done
这个脚本的重点是在于取数据库的名字
`mysql -uroot -p123456 -e "show databases;"| sed 1d | egrep -v "schema|test|mysql"`
`mysql -uroot -p123456 -e "show databases;" 可以直接在终端查看数据库
加管道符 sed 1d 可以删除第一行,效果如下
|egrep -v "schema|mysql|test"
再加管道符使用egrep过滤并取反排除不需要备份的数据库
注:egrep是扩展grep可以同时过滤多个 -v是取反
取出数据库名字然后就可以用for循环来备份数据库了,希望对你有所帮助,拜拜。