某些场景下需要将数据库分开备份,有些场景又需要将所有数据库合在一起备份,特此整理此备份脚本

#!/bin/bash
##===========================================================================##
## use mysqldump to backup all user database, keey days.
##===========================================================================##
## mysql_backup_database option:
## ONE_BACKUP: backup all user database into one zip file
## MORE_BACKUP: backup user database into different zip files.
## DATABASE_NAME: only backup the specified database. ##===========================================================================##
## mysql backup config
mysql_exe="/export/servers/mysql/bin/mysql"
mysqldump_exe="/export/servers/mysql/bin/mysqldump"
mysql_backup_folder="/export/data/mysql/dumps/"
mysql_backup_log="${mysql_backup_folder}mysql_dump_log.txt"
mysql_backup_log_his="${mysql_backup_folder}mysql_dump_log_his.txt"
mysql_backup_host="127.0.0.1"
mysql_backup_port=
mysql_backup_user="root"
mysql_backup_password="rootpwd"
mysql_backup_database="ONE_BACKUP"
mysql_backup_table_name_list=""
mysql_backup_keep_days= ##====================================================##
## get mysql version
##====================================================##
function get_mysql_version()
{
master_version_tmp=`${mysql_exe} \
--host="${mysql_backup_host}" --port=${mysql_backup_port} \
--user="${mysql_backup_user}" --password="${mysql_backup_password}" \
-e "select @@version;"`
if [[ master_version_tmp == 5.5.* ]]
then
mysql_version="mysql55"
elif [[ master_version_tmp == 5.6.* ]]
then
mysql_version="mysql56"
else
mysql_version="mysql57"
fi
} ##===========================================================================##
## remove expired backup file
## keep the backup file of the last N days
function remove_expired_file()
{
echo "$(date "+%Y-%m-%d %H:%M:%S") start to remove expired backup file." >> ${mysql_backup_log}
echo "keep days: ${mysql_backup_keep_days}" >> ${mysql_backup_log}
find "${mysql_backup_folder}" -mtime +${mysql_backup_keep_days} -name "*" -exec rm -rf {} \;
echo "$(date "+%Y-%m-%d %H:%M:%S") start to mysqldump." >> ${mysql_backup_log}
} ##===========================================================================##
## backup single database
function backup_single_database()
{
current_database_name=$
mysql_backup_file_path="${mysql_backup_folder}""${current_database_name}-`date -I`.sql.gz"
echo "$(date "+%Y-%m-%d %H:%M:%S") start to backup database ${current_database_name} to ${mysql_backup_file_path}" >> ${mysql_backup_log} ($mysqldump_exe \
--host="${mysql_backup_host}" \
--port=$mysql_backup_port \
--user="${mysql_backup_user}" \
--password="${mysql_backup_password}" \
--databases "${current_database_name}" \
--set-gtid-purged=OFF \
--single-transaction \
--hex-blob --opt --quick \
--events --routines --triggers \
--default-character-set="utf8" \
--master-data= \
|gzip > "${mysql_backup_file_path}" \
) >>${mysql_backup_log} >>${mysql_backup_log} if [ $? = ]
then
echo "$(date "+%Y-%m-%d %H:%M:%S") backup database ${current_database_name} success." >> ${mysql_backup_log}
else
echo "$(date "+%Y-%m-%d %H:%M:%S") backup database ${current_database_name} failed." >> ${mysql_backup_log}
fi
} function backup_more_databases()
{
for database_name in ${database_name_list};
do
if [ "$database_name" == "" ]
then
echo "database name can be empty"
else
backup_single_database "${database_name}"
fi
done
} function backup_all_databases()
{
mysql_backup_file_path="${mysql_backup_folder}""full-backup-`date -I`.sql.gz"
echo "$(date "+%Y-%m-%d %H:%M:%S") start to backup all databases to ${mysql_backup_file_path}" >> ${mysql_backup_log} ($mysqldump_exe \
--host="${mysql_backup_host}" \
--port=$mysql_backup_port \
--user="${mysql_backup_user}" \
--password="${mysql_backup_password}" \
--all-databases \
--ignore-table='mysql.*' \
--ignore-table='information_schema.*' \
--ignore-table='performance_schema.*' \
--ignore-table='sys.*' \
--set-gtid-purged=OFF \
--single-transaction \
--hex-blob --opt --quick \
--events --routines --triggers \
--default-character-set="utf8" \
--master-data= \
|gzip > "${mysql_backup_file_path}" \
) >>${mysql_backup_log} >>${mysql_backup_log} if [ $? = ]
then
echo "$(date "+%Y-%m-%d %H:%M:%S") backup database ${current_database_name} success." >> ${mysql_backup_log}
else
echo "$(date "+%Y-%m-%d %H:%M:%S") backup database ${current_database_name} failed." >> ${mysql_backup_log}
fi
} function backup_databases()
{
if [ "${mysql_backup_database}" == "ONE_BACKUP" ];
then
backup_all_databases
elif [ "${mysql_backup_database}" == "MORE_BACKUP" ];
then
database_name_list=`${mysql_exe} --host="${mysql_backup_host}" --port=$mysql_backup_port --user="${mysql_backup_user}" --password="${mysql_backup_password}" -Ne "show databases;" |egrep -v "(mysql|sys|test|information_schema|performance_schema|dada_call_center)"`
backup_more_databases
else
database_name_list=${mysql_backup_database}
backup_more_databases
fi
} ##====================================================##
## . dump user script on mysql
## . this script only can be used on mysql 5.7
##====================================================##
function dump_user_script_5_7()
{
script_file_path="${mysql_backup_folder}""user-script-`date -I`.sql"
echo "$(date "+%Y-%m-%d %H:%M:%S") start backup user script." >> ${mysql_backup_log}
(echo "select concat('show create user ''',user,'''@''',host, ''';
','show grants for ''',user,'''@''',host, ''';')
from mysql.user where user <>'root' and user<>'' and host <> '' " | \
${mysql_exe} --host="${mysql_backup_host}" --port=${mysql_backup_port} \
--user="${mysql_backup_user}" --password="${mysql_backup_password}" -N | \
${mysql_exe} --host="${mysql_backup_host}" --port=${mysql_backup_port} \
--user="${mysql_backup_user}" --password="${mysql_backup_password}" -N | \
sed "s/$/;/" >> ${script_file_path}) >>${mysql_backup_log} >>${mysql_backup_log} if [ $? = ]
then
echo "$(date "+%Y-%m-%d %H:%M:%S") backup user script success." >> ${mysql_backup_log}
else
echo "$(date "+%Y-%m-%d %H:%M:%S") backup user script failed." >> ${mysql_backup_log}
fi
} ##====================================================##
## . dump user script on mysql
## . this script only can be used on mysql 5.5
##====================================================##
function dump_user_script_5_5()
{
script_file_path="${mysql_backup_folder}""user-script-`date -I`.sql"
echo "$(date "+%Y-%m-%d %H:%M:%S") start backup user script." >> ${mysql_backup_log} (echo "select concat('show grants for ''',user,'''@''',host, ''';')
from mysql.user where user <>'root' and user<>'' and host <> '' " | \
${mysql_exe} --host="${mysql_backup_host}" --port=${mysql_backup_port} \
--user="${mysql_backup_user}" --password="${mysql_backup_password}" -N | \
${mysql_exe} --host="${mysql_backup_host}" --port=${mysql_backup_port} \
--user="${mysql_backup_user}" --password="${mysql_backup_password}" -N | \
sed "s/$/;/" >> ${script_file_path}) >>${mysql_backup_log} >>${mysql_backup_log} if [ $? = ]
then
echo "$(date "+%Y-%m-%d %H:%M:%S") backup user script success." >> ${mysql_backup_log}
else
echo "$(date "+%Y-%m-%d %H:%M:%S") backup user script failed." >> ${mysql_backup_log}
fi
} ##===========================================================================## function backup_mysql_user()
{
if [[ mysql_version == "mysql55" ]]
then
dump_user_script_5_5
else
dump_user_script_5_7
fi
} ##===========================================================================##
function mysql_backup()
{
echo > ${mysql_backup_log}
get_mysql_version
remove_expired_file
backup_databases
backup_mysql_user
cat ${mysql_backup_log} > ${mysql_backup_log_his}
} mysql_backup

MySQL Backup--使用mysqldump依次备份所有数据库的更多相关文章

  1. Mysql启停以及恢复备份恢复数据库

    1.mysql启停 进入cmd 输入如下命令 net stop mysql(自己起的mysql名称) -------停 net strat mysql   ---------------------- ...

  2. mysql导入导出.sql文件 备份还原数据库

    从数据库导出数据库文件:   进入你的MySQL的安装目录的bin目录或者在C盘的根目录都行,我选的是在bin目录下,下面的例子出第一个外将以在C盘的根目录来讲解   我的mysql安装在了C盘,C: ...

  3. 使用mysqldump命令备份恢复MySQL数据库

    1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump file] 上述命令将指定数据库备份到某dump文 ...

  4. mysql学习(4)-mysqldump备份和恢复数据

    背景 最近在公司做数据迁移方面的工作,使用mysql数据库在测试环境模拟数据迁移,在迁移测试的过程中需要做数据备份和恢复 mysql数据备份和恢复比较简单,可以选择mysqldump工具,这里简单提一 ...

  5. MySQL 5.7.10 自动备份、自动清理旧备份集

    http://blog.csdn.net/mchdba/article/details/51527081 MySQL版本是5.7.10-log社区版本,需要进行备份,但是备份时间长了后,磁盘不够用,所 ...

  6. mysql 容灾 灾备 备份

    一.数据备份 1.使用mysqldump命令备份 mysqldump命令将数据库中的数据备份成一个文本文件.表的结构和表中的数据将存储在生成的文本文件中. mysqldump命令的工作原理很简单.它先 ...

  7. MySQL 5.7.10 自动备份、自动清理旧备份集(转)

    1,mysqldump备份脚本 备份脚本为,里面有几个需要注意的参数: (1)--master-data=2 :这个参数可以在搭建从库的时候,记录当前备份的复制点信息. (2)--extended-i ...

  8. 动态备份SQL-SERVER数据库——SQLDMO

    转载:http://www.cnblogs.com/liulanglang/archive/2007/12/04/981812.html 上周要写一个SQL-SERVER数据库备份还原的程序,很没有思 ...

  9. MySQL Backup mysqldump备份流程学习

    我们都知道MySQL逻辑备份工具mysqldump可以保证备份数据的一致性,但是它是怎么保持一致性的? 本文不讨论mysqldump具体的选项和用法,一直对mysqldump的工作机制梳理的不太清楚, ...

随机推荐

  1. 生鲜超市项目错误及解决办法(安装mysqlclient)

    错误1:安装Mysqlclient D:\Mxshop>pip install mysqlclient- 1.4.4-cp27-cp27m-win32 报错: ERROR: Could not ...

  2. [LeetCode] 18. 4Sum 四数之和

    Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = tar ...

  3. 第09组 Beta冲刺(1/5)

    队名:观光队 链接 组长博客 作业博客 组员实践情况 王耀鑫 过去两天完成了哪些任务 文字/口头描述 任务分配 展示GitHub当日代码/文档签入记录 接下来的计划 完成短租车,页面美化 还剩下哪些任 ...

  4. Swagger简单介绍

    一句话介绍 Swagger Swagger是一个接口文档生成工具,同时提供接口测试调用的辅助功能. 关于 Swagger Swagger能成为最受欢迎的REST APIs文档生成工具之一,有以下几个原 ...

  5. oracle批量新增更新数据

    本博客介绍一下Oracle批量新增数据和更新数据的sql写法,业务场景是这样的,往一张关联表里批量新增更新数据,然后,下面介绍一下批量新增和更新的写法: 批量新增数据 对于批量新增数据,介绍两种方法 ...

  6. Laravel关联模型中has和with区别

    本篇文章给大家带来的内容是关于Laravel关联模型中has和with区别(详细介绍),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 首先看代码: 1 2 3 4 5 6 $user ...

  7. 每个php程序员都应该知道的15个最佳PHP库

    PHP是一种功能强大的web站点脚本语言,通过PHP,web网站开发者可以更容易地创建动态的引人入胜的web页面.开发人员可以使用PHP代码与一些网站模板和框架来提升功能和特性.然而,编写PHP代码是 ...

  8. 系统内置委托Action和func

    Action委托, action是系统内置的委托,它可指向无返回值,没有参数的方法. using System; using System.Collections.Generic; using Sys ...

  9. iOS block疑难解答

    1,为什么需要加__block ARC环境下,一旦Block赋值就会触发copy,__block就会copy到堆上,Block也是__NSMallocBlock.ARC环境下也是存在__NSStack ...

  10. golang学习笔记---命令源码文件接收参数(flag包)

    命令源码文件怎样接收参数 go标准库中有一个代码包专门用于接收和解析命令参数.这个包叫flag 实例1: package main import ( "flag" "fm ...