欢迎光临
我们一直在努力

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目录生成三个库的压缩文件

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表的内容。

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。