zoukankan      html  css  js  c++  java
  • mysql数据库使用脚本实现分库备份过程

    一条命令解决分库分表备份:

    [root@db01 data]# mysql -uroot -p123456  -e "show databases;"|egrep -v "Data|sche|mysql|inf"|sed -r 's#^(.*)#mysqldump -uroot -p123456 -B 1 >/data/db/1.sql.gz#g'|bash

    实现思路

    1)编程思想

    mysqldump db1>db1.sql

    mysqldump db2>db2.sql

    .............

    2)显示要备份的数据库

    [root@web03 ~]# mysql -uroot -p123456 -S /data/3306/mysql.sock  -e "show databases;"|grep -Evi "database|infor|perfor"
    abcdocker
    cnsyk
    mysql
    oldboy
    syk_utf8
    test

    3)循环db,dump

    实现脚本如下:

    #!/bin/bash 
    #created by yangqiqi 2017-08-24 
    
    USERNAME=root #备份的用户名 
    PASSWORD=123456  #备份的密码
    HOST=localhost #备份主机
    DATE=`date +%Y-%m-%d`  #用来做备份文件名字的一部分
    OLDDATE=`date +%Y-%m-%d -d '-10 days'`  #本地保存天数  
    
    #指定命令所用的全路径
    MYSQL=/application/mysql/bin/mysql
    MYSQLDUMP=/application/mysql/bin/mysqldump
    MYSQLADMIN=/application/mysql/bin/mysqladmin
    
    #创建备份的目录和文件
    BACKDIR=/data/backup/db
    [ -d ${BACKDIR} ] || mkdir -p ${BACKDIR}
    [ -d ${BACKDIR}/${DATE} ] || mkdir ${BACKDIR}/${DATE}
    [ ! -d ${BACKDIR}/${OLDDATE} ] || rm -rf ${BACKDIR}/${OLDDATE} #保存10天 多余的删除最前边的
    #开始备份  for循环想要备份的数据库
    MYSQLDUMP_LIST=`mysql -uroot -p'123456' -S /data/3306/mysql.sock  -e "show databases"| grep -Evi "database|infor|perfor"`
    
    for DBNAME in ${MYSQLDUMP_LIST} ##使用for依次罗列需要备份的数据库 
    do
      ${MYSQLDUMP} -B -F --master-data=2 --single-transaction -u${USERNAME} -p${PASSWORD}  -S /data/3306/mysql.sock  ${DBNAME} | gzip > ${BACKDIR}/${DATE}/${DBNAME}-backup-${DATE}.sql.gz 
      /bin/sleep 2
      logger "${DBNAME} has been backup successful - $DATE"
    done
    脚本出处:https://www.cnblogs.com/lazyball/p/8662586.html

    脚本注意点:

    MYSQLDUMP_LIST=`mysql -uroot -p'123456'  -e "show databases"| grep -Evi "database|infor|perfor"` 过滤掉不需要备份的数据库,这里需要注意,过滤完成
    后拿到的库名是自己需要备份的库名,如果自建的库有的也叫infor开头或者perfor的可能会被过滤掉,按照个人情况调整。

    每天的备份样式如下:

    [root@web03 ~]# cd /data/backup/db/
    [root@web03 db]# ll
    总用量 4
    drwxr-xr-x 2 root root 4096 7月   4 16:37 2018-07-04
    [root@web03 db]# cd 2018-07-04/
    [root@web03 2018-07-04]# ll
    总用量 164
    -rw-r--r-- 1 root root    604 7月   4 16:37 abcdocker-backup-2018-
    -rw-r--r-- 1 root root    602 7月   4 16:37 cnsyk-backup-2018-07-0
    -rw-r--r-- 1 root root 144592 7月   4 16:37 mysql-backup-2018-07-0
    -rw-r--r-- 1 root root    867 7月   4 16:37 oldboy-backup-2018-07-
    -rw-r--r-- 1 root root    603 7月   4 16:37 syk_utf8-backup-2018-0
    -rw-r--r-- 1 root root   1030 7月   4 16:37 test-backup-2018-07-04

     logger解释

    logger 是一个shell 命令接口,可以通过该接口使用Syslog的系统日志模块,还可以从命令行直接向系统日志文件写入一行信息。
    日志的级别
    日志的级别分为七级,从紧急程度由高到底:
    emerg 系统已经不可用,级别为紧急
    alert 警报,需要立即处理和解决
    crit 既将发生,得需要预防。事件就要发生
    warnig 警告
    err 错误信息,普通的错误信息
    notice 提醒信息,很重要的信息
    info 通知信息,属于一般信息
    debug 这是调试类信息

    上边的脚本备份完毕后  就可以在   看到每个数据库备份的信息  logger的作用

    [root@web03 ~]# tail -f /var/log/messages
    Jul  4 16:22:10 web03 rpc.statd[1147]: Version 1.2.3 starting
    Jul  4 16:22:10 web03 sm-notify[1148]: Version 1.2.3 starting
    Jul  4 16:32:35 web03 root: abcdocker has been backup successful - 2018-07-04
    Jul  4 16:32:37 web03 root: cnsyk has been backup successful - 2018-07-04
    Jul  4 16:37:34 web03 root: abcdocker has been backup successful - 2018-07-04
    Jul  4 16:37:36 web03 root: cnsyk has been backup successful - 2018-07-04
    Jul  4 16:37:38 web03 root: mysql has been backup successful - 2018-07-04
    Jul  4 16:37:41 web03 root: oldboy has been backup successful - 2018-07-04
    Jul  4 16:37:43 web03 root: syk_utf8 has been backup successful - 2018-07-04
    Jul  4 16:37:45 web03 root: test has been backup successful - 2018-07-04

    生成场景需求:

    每天凌晨1点把 A服务器上/data/backup/db/下的数据备份文件放到 B服务器里的/data/backup/db_192.168.1.11/目录下 
    不是累加 是增量更新 (--delete)
     
    A服务器:
    数据源服务器:
    yum install rsync
     
    打开防火墙 关闭seLinux:
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
     
    B服务器:ssh-keygen
    把公钥文件里的id_rsa.pub内容复制到 A服务器里的authorized_keys 
    文件中准备脚本文件  :
    #!/bin/bash
    usr/bin/rsync -avz --delete -e  "ssh -p 4396"  root@192.168.1.11:/data/backup/db  /data/backup/db_192.168.1.11/
    logger "Successful backup file transfer - $DATE"
    
    
    
    
  • 相关阅读:
    ruby学习笔记(5)
    rails学习笔记(2)
    一个不错的rails2.0教程
    rails学习笔记(2)
    rails学习笔记(1)
    一个不错的rails2.0教程
    ruby学习笔记(6)
    ruby学习笔记(6)
    rails学习笔记(1)
    DELPHI的编译指令
  • 原文地址:https://www.cnblogs.com/sykblogs/p/9388099.html
Copyright © 2011-2022 走看看