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 無風之雨 閱讀(668) 評論(0)  編輯  收藏 所屬分類: MySQL
          主站蜘蛛池模板: 苏州市| 福清市| 忻州市| 南皮县| 深水埗区| 平远县| 天峻县| 高安市| 太康县| 民权县| 镇雄县| 沙雅县| 若羌县| 望江县| 龙海市| 尤溪县| 周口市| 达孜县| 宜黄县| 化德县| 毕节市| 青浦区| 麟游县| 琼结县| 进贤县| 永寿县| 新沂市| 夏邑县| 三亚市| 中阳县| 滕州市| 定边县| 天气| 乐安县| 丹江口市| 陕西省| 齐河县| 泰安市| 宜都市| 资源县| 江川县|