mysqldump分库备份-参考脚本

系统环境:
  • CentOS 7.2.1511
  • MySQL 5.7.22

mysqldump属于单进程数据备份方式。
优点:属于服务自带备份工具不需要而外安装备份工具。
缺点:备份还原速度慢。
注释:不建议用来备份较大数据最建议好不要超过2G以上,推荐使用mysqldumper 或者xtrabackup来进行备份。
该脚本仅用于参考,如果特殊需求可以自己改进。


数据库备分库备份样板:
#!/bin/bash
#NAME: JDS
#ENAMIL:cu97ming@hotmail.com


#获取系统相关的值

#用于设置保留备份天数的时间
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
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注