Linux ShellスクリプトのmysqldumpによるMySQLデータベースのバックアップ(詳細注記)


スクリプトを設計するためのいくつかの設計、作成の考慮事項:
  • このスクリプトは、mysqlのコンパイルインストールとyumまたはapt-getなどのインストールによる
  • に適用されます.
  • このスクリプトは、データ
  • を上書きすることなく繰り返し実行できます.
  • を追加して、N日前のバックアップを削除することで、ディスク容量を節約できます.
  • mysqldumpのロック付きテーブル機能、ログのリフレッシュ、レプリケーションなどの機能
  • を活用
    mysqldumpコマンドを使用してMySQLデータベースのスクリプトをバックアップします(注釈版はなく、本番環境で使用するのに適しています)
    #!/bin/bash
    MYSQLDBUSERNAME=root
    MYSQLDBPASSWORD=password
    MYSQBASEDIR=/usr/local/mysql
    MYSQL=$MYSQBASEDIR/bin/mysql
    MYSQLDUMP=$MYSQBASEDIR/bin/mysqldump
    BACKDIR=/var/backup/db
    DATEFORMATTYPE1=$(date +%Y-%m-%d)
    DATEFORMATTYPE2=$(date +%Y%m%d%H%M%S)
    [ -d $MYSQBASEDIR ] && MYSQDATADIR=$MYSQBASEDIR/data || MYSQDATADIR=/var/lib/mysql
    [ -x $MYSQL ] || MYSQL=mysql
    [ -x $MYSQLDUMP ] || MYSQLDUMP=mysqldump
    [ -d ${BACKDIR} ] || mkdir -p ${BACKDIR}
    [ -d ${BACKDIR}/${DATEFORMATTYPE1} ] || mkdir ${BACKDIR}/${DATEFORMATTYPE1}
    DBLIST=`ls -p $MYSQDATADIR | grep / |tr -d /`
    for DBNAME in $DBLIST
        do ${MYSQLDUMP} --user=${MYSQLDBUSERNAME} --password=${MYSQLDBPASSWORD} --routines --events --triggers --single-transaction --flush-logs --databases ${DBNAME} | gzip > ${BACKDIR}/${DATEFORMATTYPE1}/${DBNAME}-backup-${DATEFORMATTYPE2}.sql.gz
        [ $? -eq 0 ] && echo "${DBNAME} has been backuped successful" || echo "${DBNAME} has been backuped failed"
        /bin/sleep 5
    done

    mysqldumpコマンドを使用してMySQLデータベースのスクリプトをバックアップします(注釈版付きで、学習とテストに適しています)
    #!/bin/bash
    # MYSQLDBUSERNAME MySQL       ,    
    MYSQLDBUSERNAME=root
    # MYSQLDBPASSWORD MySQL      ,    
    MYSQLDBPASSWORD=password
    # MYSQBASEDIR MySQL        ,--prefix=$MYSQBASEDIR,    
    MYSQBASEDIR=/usr/local/mysql
    # MYSQL mysql       ,    
    MYSQL=$MYSQBASEDIR/bin/mysql
    # MYSQLDUMP mysqldump       ,    
    MYSQLDUMP=$MYSQBASEDIR/bin/mysqldump
    # BACKDIR           ,            
    BACKDIR=/var/backup/db
    #       ,   : - - ,                
    DATEFORMATTYPE1=$(date +%Y-%m-%d)
    #       ,   :      ,                
    DATEFORMATTYPE2=$(date +%Y%m%d%H%M%S)
    #     MYSQBASEDIR  ,  MYSQDATADIR   $MYSQBASEDIR/data,       ,  data      ,   MYSQBASEDIR   /var/lib/mysql,    
    [ -d $MYSQBASEDIR ] && MYSQDATADIR=$MYSQBASEDIR/data || MYSQDATADIR=/var/lib/mysql
    #   mysql        ,   ,   MYSQL   mysql,      mysql
    [ -x $MYSQL ] || MYSQL=mysql
    #   mysqldump        ,   ,   MYSQLDUMP   mysqldump,      mysqldump
    [ -x $MYSQLDUMP ] || MYSQLDUMP=mysqldump
    #                 
    [ -d ${BACKDIR} ] || mkdir -p ${BACKDIR}
    [ -d ${BACKDIR}/${DATEFORMATTYPE1} ] || mkdir ${BACKDIR}/${DATEFORMATTYPE1}
    #   MySQL       ,  mysqldatadir         ,       ,TODO
    DBLIST=`ls -p $MYSQDATADIR | grep / |tr -d /`
    #                 ,      
    for DBNAME in $DBLIST
        # mysqldump skip one table
        # -- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.
        # mysqldump --ignore-table=mysql.event
        # http://serverfault.com/questions/376904/mysqldump-skip-one-table
        # --routines,         
        # --events,  mysql.event 
        # --triggers,     
        # --single-transaction,  InnoDB,                          ,          ,     --lock-all-tables
        # --flush-logs, dump       
        # --ignore-table,     ,--ignore-table=database.table
        # --master-data=2 ,    MySQL    ,         
        #  dump  sql   gzip             
        do ${MYSQLDUMP} --user=${MYSQLDBUSERNAME} --password=${MYSQLDBPASSWORD} --routines --events --triggers --single-transaction --flush-logs --ignore-table=mysql.event --databases ${DBNAME} | gzip > ${BACKDIR}/${DATEFORMATTYPE1}/${DBNAME}-backup-${DATEFORMATTYPE2}.sql.gz
        #       ,       0     ,      
        [ $? -eq 0 ] && echo "${DBNAME} has been backuped successful" || echo "${DBNAME} has been backuped failed"
        #   5s,    
        /bin/sleep 5
    done

    実行:
    [root@htvm ~]# ./backupmysqlbydate.sh 
    mysql has been backuped successful
    test has been backuped successful
    [root@htvm ~]# ls /var/backup/db/2015-07-27/
    mysql-backup-20150727195515.sql.gz  test-backup-20150727195515.sql.gz
    [root@htvm ~]#

    ラベル:mysqldump、バックアップMySQLデータベース、MySQLデータベースバックアップ、mysqlバックアップ、mysqlバックアップスクリプト
    --end--