微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySQL分库备份脚本


vim /data/mysqlback.sh

#! /bin/bash

BAKPATH=/data/MysqL-back

MYUSER=root

MYPASS="123456"

SOCKET=/var/lib/MysqL/MysqL.sock

MYCMD="MysqL -u$MYUSER -p$MYPASS -S $SOCKET"

MYDUMP="MysqLdump -u$MYUSER -p$MYPASS -S $SOCKET -x -B -F -R"

DBLIST=`$MYCMD -e "show databases;" |sed "1d" |egrep -v "_schema|test"`


[ ! -d $BAKPATH ] && mkdir -p $BAKPATH

for dbname in $DBLIST

do

    $MYDUMP $dbname |gzip > $BAKPATH/${dbname}_$(date +%F).sql.gz

done


执行该脚本,可以在/data/MysqL-back目录生成三个库的压缩文件

MySQL分库备份脚本

MysqLdump命令参数说明

--lock-all-tables,  -x

提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭--single-transaction 和--lock-tables 选项。


--databases, -B

用于备份多个数据库,使用该选项,MysqLdump 把每个名字都当作为数据库名。如果没有该选项,MysqLdump 把第一个名字参数作为数据库名,后面的作为表名。


--flush-logs,-F

开始转储前刷新MysqL服务器日志文件。该选项要求RELOAD权限。请注意如果结合--all--database(或-A)选项使用该选项,根据每个转储的数据库刷新日志。

例外情况:当使用--lock-all-tables或--master-data的时候,在这种情况下,日志只刷新一次,在所有 表被锁定后刷新。如果你想要同时转储和刷新日志,应使用--flush-logs连同--lock-all-tables或--master-data。


--routines, -R

在转储的数据库中转储存储程序(函数和程序)。使用---routines产生的输出包含CREATE PROCEDURE和CREATE FUNCTION语句以重新创建子程序。但是,这些语句不包括属性,例如子程序定义者或创建和修改时间戳。这说明当重载子程序时,对它们进行创建时定义者应设置为重载用户,时间戳等于重载时间。如果你需要创建的子程序使用原来的定义者和时间戳属性,不使用--routines。相反,使用一个具有MysqL数据库相应权限的MysqL账户直接转储和重载MysqL.proc表的内容

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐