Ginew.Z 的博客

          一切,為了讓生活更簡單、更自然

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            21 Posts :: 0 Stories :: 14 Comments :: 0 Trackbacks
          ??? 要備份MYSQL,很多人用mysqldump,其實這種方式,導出的文件是最大的,導入的時間是最久的。命令是方便的,但真正發生錯誤的時候,恢復效率很低。
          ??? 我主張,另外找一臺比較空閑的機器,來做數據庫的備份。這臺機器作以下用途:

          ?? 它是主數據庫帶的slave數據庫群里面的一臺,每天凌晨定時啟動同步數據,等追上bin-log并全部執行后,停止同步,并用select * into outfile將數據全部導出成文件,并且在每周的某一天,清除掉主數據庫上已經同步好的bin-log,以確保硬盤空間不被log占滿。

          ?? 為此,我寫了3個腳本,分別執行1、啟動mysql,追log,然后停止slave;2、導出全部數據庫全部文件到文件;3、刪除主數據庫的log

          ---------------------------------------------------------------------------------------
          #!/bin/bash
          #readMasterMysql.sh
          CHECK_MYSQL=0
          /home/mysql/bin/mysqld_safe &
          until [ "$CHECK_MYSQL" = "1" ]
          do
          ? sleep 10
          ? CHECK_MYSQL=`/home/mysql/bin/mysql -uroot -e"show slave status"|awk '{if($14==$21)print "1"}'|tail -n1`
          done
          /home/mysql/bin/mysql -uroot -e"slave stop"
          /home/script/backupMysql.sh
          /home/mysql/bin/mysqladmin shutdown
          WEEK=`date "+%w"`
          if [ $WEEK = "5" ]
          then
          ??? /home/script/purgeLog.sh
          fi

          ------------------------------------------------------------------------------
          #!/bin/bash
          #purgeLog.sh
          LOG_FILE=/home/mysql/data/master.info
          DB_SERVER=`sed -n '4p' $LOG_FILE`
          DB_USER=`sed -n '5p' $LOG_FILE`
          DB_PASS=`sed -n '6p' $LOG_FILE`
          DB_LOGFILE=`sed -n '2p' $LOG_FILE`
          /home/mysql/bin/mysql -h$DB_SERVER -u$DB_USER -p"$DB_PASS" -e"purge master logs to '$DB_LOGFILE'"

          ------------------------------------------------------------------------------
          #!/bin/bash
          #backupMysql.sh
          database=$1
          table=$2
          MYSQL_CLIENT="/home/mysql/bin/mysql -uroot --default-character-set=gbk"
          MYSQL_DUMP="/home/mysql/bin/mysqldump -d -uroot --default-character-set=gbk"
          OUTPUT_PATH=/date/backup
          for databases in `$MYSQL_CLIENT -e "show databases"|grep -v Database`
          do
          if [ "$#" = "0" -o "$database" = "$databases" ] ; then
          ??????? mkdir -p -m777 $OUTPUT_PATH/$databases/
          ??????? $MYSQL_DUMP $databases > $OUTPUT_PATH/$databases/$databases.sql
          ??????? for tables in `$MYSQL_CLIENT -e "show tables" $databases|grep -v Tables_in_`
          ??????? do
          ??????? if [ "$#" = "0" -o "$#" = "1" -o "$table" = "$tables" ] ; then
          ??????????????? mv -f $OUTPUT_PATH/$databases/$tables $OUTPUT_PATH/$databases/$tables.old
          ??????????????? $MYSQL_CLIENT -e "select * into outfile '$OUTPUT_PATH/$databases/$tables' from $tables" $databases
          ??????? fi
          ??????? done
          fi
          done
          posted on 2006-04-11 12:47 無風之雨 閱讀(666) 評論(0)  編輯  收藏 所屬分類: MySQL
          主站蜘蛛池模板: 旌德县| 天津市| 扬州市| 聂拉木县| 上思县| 常宁市| 吴旗县| 于都县| 湖南省| 花莲县| 平遥县| 修水县| 鹤峰县| 中江县| 峨山| 财经| 兴城市| 繁峙县| 南陵县| 和龙市| 当涂县| 莆田市| 乌兰浩特市| 苏州市| 宁阳县| 沈丘县| 高青县| 长阳| 三江| 海南省| 兖州市| 太仆寺旗| 禄丰县| 南昌市| 德钦县| 正定县| 尉氏县| 色达县| 元朗区| 宁德市| 莆田市|