【问题标题】:How to take all database backup same as db name如何将所有数据库备份与数据库名称相同
【发布时间】:2019-07-25 07:53:49
【问题描述】:

我在 centos7 上使用 MySQL。我有 50 个数据库,例如 database1、database2....、database50。

如何设置一个 cronjob 以使用单个命令或脚本每天转储所有与数据库名称相同的数据库 [ Like database1.sql, database2.sql .... database50.sql ]。

请提供一些适当的解决方案,我们将不胜感激。

谢谢。

【问题讨论】:

标签: mysql linux mariadb


【解决方案1】:
  1. 将当前日期转换为自某个开始日期以来的整数天数。
  2. 取模 50。这将得到 0 .. 49。
  3. 加 1 并连接。现在你有database1 .. database50。把它放在shell变量db
  4. mysqldump ... $db >$db.sql

【讨论】:

    【解决方案2】:

    我正在使用这个脚本

    #! /bin/bash
    
    # MySQL database backup (databases in separate files) with daily, weekly and monthly rotation
    
    # Sebastian Flippence (http://seb.flippence.net) originally based on code from: Ameir Abdeldayem (http://www.ameir.net)
    # You are free to modify and distribute this code,
    # so long as you keep the authors name and URL in it.
    
    # Modified by IVO GELOV
    
    # How many backups do you want to keep?
    MAX_DAYS=5
    
    # Date format that is appended to filename
    DATE=`date +'%Y-%m-%d'`
    DATSTR=`date '+%Y%m%d' -d "-$MAX_DAYS days"`
    
    # MySQL server's name
    SERVER=""
    
    # Directory to backup to
    BACKDIR="/var/db_arhiv/mysql"
    
    #----------------------MySQL Settings--------------------#
    
    # MySQL server's hostname or IP address
    HOST="localhost"
    
    # MySQL username
    USER="user"
    
    # MySQL password
    PASS="password"
    
    # List all of the MySQL databases that you want to backup, 
    # each separated by a space. Or set the option below to backup all database
    DBS="db1 db2"
    
    # Set to 'y' if you want to backup all your databases. This will override
    # the database selection above.
    DUMPALL="y"
    
    
    # Custom path to system commands (enable these if you want use a different 
    # location for PHP and MySQL or if you are having problems running this script)
    MYSQL="/usr/local/mysql/bin/mysql"
    MYSQLDUMP="/usr/local/mysql/bin/mysqldump" 
    
    
    function checkMysqlUp() {
        $MYSQL -N -h $HOST --user=$USER --password=$PASS -e status > /dev/null
    }
    trap checkMysqlUp 0
    
    function error() {
      local PARENT_LINENO="$1"
      local MESSAGE="$2"
      local CODE="${3:-1}"
      if [[ -n "$MESSAGE" ]] ; then
        echo "Error on or near line ${PARENT_LINENO}: ${MESSAGE}; exiting with status ${CODE}"
      else
        echo "Error on or near line ${PARENT_LINENO}; exiting with status ${CODE}"
      fi
      exit "${CODE}"
    }
    trap 'error ${LINENO}' ERR
    
    # Check backup directory exists
    # if not, create it
    if  [ ! -e "$BACKDIR/$DATE" ]; then
        mkdir -p "$BACKDIR/$DATE"
        echo "Created backup directory (${BACKDIR}/${DATE})"
    fi
    
    if  [ $DUMPALL = "y" ]; then
        echo "Creating list of databases on: ${HOST}..."
    
        $MYSQL -N -h $HOST --user=$USER --password=$PASS -e "show databases;" > ${BACKDIR}/dbs_on_${SERVER}.txt
    
        # redefine list of databases to be backed up
        DBS=`sed -e ':a;N;$!ba;s/\n/ /g' -e 's/Database //g' ${BACKDIR}/dbs_on_${SERVER}.txt`
    fi
    
    echo "Backing up MySQL databases..."
    
    #cd ${LATEST}
    for database in $DBS; do
      if [ ${database} = "information_schema" ] || [ ${database} = "performance_schema" ] || [ ${database} = "pinba" ]
      then
        continue
      fi
        echo "${database}..."
        $MYSQLDUMP --host=$HOST --user=$USER --password=$PASS --default-character-set=utf8 --routines --triggers --lock-tables --disable-keys --force --single-transaction --allow-keywords --dump-date $database > ${BACKDIR}/${DATE}/${SERVER}$database.sql
    done
    
    if  [ $DUMPALL = "y" ]; then
        rm -f ${BACKDIR}/dbs_on_${SERVER}.txt
    fi
    
    # dump privileges
    $MYSQL -N -h $HOST --user=$USER --password=$PASS --skip-column-names -A -e "SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user" | $MYSQL -N -h $HOST --user=$USER --password=$PASS --skip-column-names -A > ${BACKDIR}/${DATE}/${SERVER}_grants.sql
    
    # delete older files
    for x in `find ${BACKDIR}/20* -type d`
    do
        xd=`basename "${x//-/}"`
        if [[ $xd < $DATSTR ]]
        then
            rm -rf "$x"
        fi
    done
    
    echo "MySQL backup is complete"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      相关资源
      最近更新 更多