系统环境:
CentOS 7.2.1511
MySQL 5.7.22
mysqldump属于单进程数据备份方式。
优点:属于服务自带备份工具不需要而外安装备份工具。
缺点:备份还原速度慢。
注释:不建议用来备份较大数据最建议好不要超过2G以上,推荐使用mysqldumper 或者xtrabackup来进行备份。
该脚本仅用于参考,如果特殊需求可以自己改进。
数据库备分库备份样板:
#!/bin/bash
#获取系统相关的值
#用于设置保留备份天数的时间
bakcup_save_day=15
#my_host_name 变量用于获取主机名
my_host_name=$(echo ${HOSTNAME})
dump_day=$(date +%-F)
#指定备份的目录
tmp_backup=/data/tmp_backup
zip_bakcup=/data/mysql_backup
#获取MySQL使用的命令
myclient=/usr/local/mysql/bin/mysql
mydump=/usr/local/mysql/bin/mysqldump
#下面需要填写主机连接信息
my_host=localhsot
my_port=3306
my_socket=/data/mysql_3306_core/run/mysql_3306_core.sock
#下面需要填写数据用户信息
my_name=root
my_pass=root
function init_base()
{
u_id=$(id -u)
#该函数用来检查及初始化环境
# 判断用户是否为root
if [ ${u_id} != '0' ];then
echo "Please run the script as root"
exit 1
fi
#用来判断 备份的是否不存在 有一个不存在则触发创建备份目录
if [ ! -d ${tmp_backup} -o ! -d ${zip_bakcup} ];then
mkdir -p {${tmp_backup},${zip_bakcup}}
fi
}
function get_db_name()
{
#该函数用于获取数据库实例中所有已经存在的数据库
#在数据库中查询存在的数据库名称
db_names=$(
${myclient} -u${my_name} -p${my_pass} -P${my_port} -S ${my_socket} \
-e 'SELECT schema_name FROM information_schema.schemata \
WHERE schema_name NOT IN ("information_schema","sys","performance_schema")' \
2> /dev/null )
#通过循环过滤去掉字段名称
for db_name in ${db_names}
do
if [ ${db_name} != "schema_name" ];then
echo ${db_name}
fi
done
}
function dump_db()
{
#该函数用来备份导库文件
#该变量用来获取数据库实例中需要备份库的名字
db_names=$(get_db_name)
#该循环用于将获取的存在的数据库逐一导出并生成SQL文件
for db_name in ${db_names}
do
${mydump} -p${my_pass} -P${my_port} -S ${my_socket} \
--master-data=2 --single-transaction --routines --triggers --events \
${db_name} > ${tmp_backup}/${my_host_name}_${db_name}.sql
done
}
function zip_db()
{
#该函数用来将导处的数据做压缩打包
db_names=$(get_db_name)
for db_name in ${db_names}
do
#该函数用于将导出的数据库进行压缩并清空临时备份的目录
cd ${tmp_backup}
tar -zcvf ${zip_bakcup}/${my_host_name}_${db_name}_${dump_day}.tar.gz \
${my_host_name}_${db_name}.sql
#仅保留打包过后的文件
rm -rf ${my_host_name}_${db_name}.sql
done
}
function clean_overdue()
{
#该函数用于清理指定天数之前的备份
#查找压缩备份的目录 并指定type 为文件格式 搜索名字为 带 tar.gz的格式
#根据 ctime 参数判断保留天数(查找在指定时间之时被更改的文件或目录,单位以24小时计算)
find ${zip_bakcup}/ -type f -name "*.tar.gz" -ctime +${bakcup_save_day} | \
xargs rm -f
}
init_base
dump_db
zip_db
clean_overdue
```
评论区