使用Shell实现mysql分库备份

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_41772936/article/details/81264588

大家好,今天给大家带来的是一个分库备份脚本

 

下面是准备好的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循环来备份数据库了,希望对你有所帮助,拜拜。

猜你喜欢

转载自blog.csdn.net/qq_41772936/article/details/81264588