¶ÔÓÚÒÀÀµMySQLÊý¾Ý¿âµÄϵͳ¶øÑÔ£¬Êý¾ÝµÄ°²È«ÐÔºÍÍêÕûÐÔÖÁ¹ØÖØÒª
È»¶ø£¬Ëæ×ÅÊý¾ÝÁ¿µÄ²»¶ÏÔö³¤£¬´«Í³µÄÈ«Á¿±¸·Ý·½Ê½Öð½¥±©Â¶³ö±¸·Ýʱ¼ä³¤¡¢×ÊÔ´ÏûºÄ´óµÈÎÊÌâ
Òò´Ë£¬ÊµÊ©¸ßЧµÄÔöÁ¿±¸·Ý²ßÂÔ³ÉΪÁ˱£ÕÏÊý¾Ý¿âÐÔÄܺÍÊý¾Ý°²È«µÄ¹Ø¼ü
±¾ÎĽ«Ïêϸ½éÉÜÈçºÎÔÚLinux»·¾³Ï±àд²¢Ö´ÐÐÒ»¸öMySQLÔöÁ¿±¸·Ý½Å±¾£¬ÒÔʵÏÖ¶ÔÊý¾Ý¿âµÄ¸ßЧ¡¢¿É¿¿±£»¤
Ò»¡¢ÔöÁ¿±¸·ÝµÄÖØÒªÐÔ ÔöÁ¿±¸·ÝÊÇÖ¸½ö±¸·Ý×ÔÉϴα¸·ÝÒÔÀ´·¢Éú±ä»¯µÄÊý¾Ý²¿·Ö£¬ÓëÈ«Á¿±¸·ÝÏà±È£¬Ëü¾ßÓÐÏÔÖøµÄÓÅÊÆ£º 1.½ÚÊ¡´æ´¢¿Õ¼ä£ºÓÉÓÚÖ»±¸·Ý±ä»¯µÄÊý¾Ý£¬´ó´ó¼õÉÙÁ˱¸·ÝÎļþµÄ´óС£¬½ÚÊ¡ÁË´æ´¢¿Õ¼ä
2.Ëõ¶Ì±¸·Ýʱ¼ä£º±¸·Ý¹ý³Ì¸ü¼ÓѸËÙ£¬¼õÉÙÁËÒò±¸·Ý²Ù×÷¶ÔÉú²ú»·¾³µÄÓ°Ïì
3.»Ö¸´Áé»î£ºÔÚÐèÒª»Ö¸´Êý¾Ýʱ£¬¿ÉÒÔ½áºÏÈ«Á¿±¸·ÝºÍÔöÁ¿±¸·ÝÎļþ£¬¿ìËÙ»Ö¸´µ½ÈÎÒâʱ¼äµã
¶þ¡¢MySQLÔöÁ¿±¸·ÝµÄÔÀí MySQLµÄÔöÁ¿±¸·ÝÖ÷ÒªÒÀÀµÓÚ¶þ½øÖÆÈÕÖ¾£¨Binary Log£©
¶þ½øÖÆÈÕÖ¾¼Ç¼ÁËËùÓиü¸ÄÊý¾Ý¿âÊý¾ÝµÄSQLÓï¾ä£¬°üÀ¨Êý¾Ý¶¨ÒåÓï¾ä£¨ÈçCREATE¡¢ALTER TABLE£©ºÍÊý¾ÝÐÞ¸ÄÓï¾ä£¨ÈçINSERT¡¢UPDATE¡¢DELETE£©
ͨ¹ý¶¨ÆÚ±¸·Ý¶þ½øÖÆÈÕÖ¾£¬¿ÉÒÔʵÏÖ¶ÔÊý¾Ý¿â±ä»¯µÄÍêÕû¼Ç¼£¬´Ó¶øÊµÏÖÔöÁ¿±¸·Ý
Èý¡¢±àдLinux MySQLÔöÁ¿±¸·Ý½Å±¾ ÏÂÃæÊÇÒ»¸öʾÀý½Å±¾£¬ÓÃÓÚÔÚLinux»·¾³ÏÂ×Ô¶¯Ö´ÐÐMySQLµÄÔöÁ¿±¸·Ý
¸Ã½Å±¾½«Ö´ÐÐÒÔÏÂÈÎÎñ£º - ¼ì²é²¢´´½¨±¸·ÝĿ¼
- Ö´ÐÐÈ«Á¿±¸·Ý£¨Ê×´ÎÔËÐÐʱ£©
- ÿÈÕÖ´ÐÐÔöÁ¿±¸·Ý£¬¼Ç¼¶þ½øÖÆÈÕ־λÖÃ
- ÇåÀí¹ýÆÚµÄ¶þ½øÖÆÈÕÖ¾Îļþ
×¢Ò⣺ÔÚʵ¼Ê²¿Êðǰ£¬ÇëÈ·±£ÒÑÅäÖúÃMySQLµÄ¶þ½øÖÆÈÕÖ¾¹¦ÄÜ£¬²¢µ÷Õû½Å±¾ÖеIJÎÊýÒÔÊÊÓ¦ÄúµÄ»·¾³
!/bin/bash ÅäÖò¿·Ö MYSQL_USER=your_mysql_user MYSQL_PASSWORD=your_mysql_password MYSQL_DATABASE=your_database_name BACKUP_DIR=/path/to/backup/dir BINLOG_INDEX_FILE=$BACKUP_DIR/binlog_index.txt FULL_BACKUP_FILE=$BACKUP_DIR/full_backup_$(date +%Y%m%d_%H%M%S).sql.gz INCREMENTAL_BACKUP_DIR=$BACKUP_DIR/incremental DATE=$(date +%Y%m%d) ´´½¨±¸·ÝĿ¼£¨Èç¹û²»´æÔÚ£© mkdir -p $BACKUP_DIR mkdir -p $INCREMENTAL_BACKUP_DIR/$DATE ¼ì²éÊÇ·ñÒѽøÐйýÈ«Á¿±¸·Ý if ¡¾! -f $BINLOG_INDEX_FILE¡¿; then echo Ö´ÐÐÈ«Á¿±¸·Ý... mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE | gzip > $FULL_BACKUP_FILE # »ñÈ¡µ±Ç°¶þ½øÖÆÈÕÖ¾ÎļþÃûºÍλÖà BINLOG_FILE=$(mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e SHOW MASTER STATUSG | grep File |awk {print $2}) BINLOG_POS=$(mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e SHOW MASTER STATUSG | grep Position |awk {print $2}) # ¼Ç¼ȫÁ¿±¸·ÝÐÅÏ¢ºÍ¶þ½øÖÆÈÕ־λÖà echo $FULL_BACKUP_FILE $BINLOG_FILE $BINLOG_POS > $BINLOG_INDEX_FILE else # ¶ÁÈ¡Éϴα¸·ÝµÄ¶þ½øÖÆÈÕ־λÖà PREV_BINLOG_FILE=$(head -n 1 $BINLOG_INDEX_FILE | awk{print $2}) PREV_BINLOG_POS=$(head -n 1 $BINLOG_INDEX_FILE | awk{print $3}) # »ñÈ¡µ±Ç°¶þ½øÖÆÈÕÖ¾ÎļþÃûºÍλÖà CURRENT_BINLOG_FILE=$(mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e SHOW MASTER STATUSG | grep File |awk {print $2}) CURRENT_BINLOG_POS=$(mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e SHOW MASTER STATUSG | grep Position |awk {print $2}) # Ö´ÐÐÔöÁ¿±¸·Ý£¨¸´Öƶþ½øÖÆÈÕÖ¾£© echo Ö´ÐÐÔöÁ¿±¸·Ý... mysqlbinlog --start-position=$PREV_BINLOG_POS --stop-position=$CURRENT_BINLOG_POS /var/lib/mysql/$PREV_BINLOG_FILE > $INCREMENTAL_BACKUP_DIR/$DATE/incremental_$(date +%H%M%S).sql # ¸üжþ½øÖÆÈÕÖ¾Ë÷ÒýÎļþ echo $FULL_BACKUP_FILE $CURRENT_BINLOG_FILE $CURRENT_BINLOG_POS > $BINLOG_INDEX_FILE fi ÇåÀí¹ýÆÚµÄ¶þ½øÖÆÈÕÖ¾Îļþ£¨¸ù¾Ýʵ¼ÊÐèÇóµ÷Õû£© ×¢Ò⣺´Ë²Ù×÷Ðè½÷É÷£¬È·±£²»»áÎóɾÕýÔÚʹÓõĶþ½øÖÆÈÕÖ¾Îļþ mysqlbinlog --expire_logs_days=7 --user=$MYSQL_USER --password=$MYSQL_PASSWORD echo ±¸·ÝÍê³É£¡ ËÄ¡¢½Å±¾ËµÃ÷Óë×¢ÒâÊÂÏî 1.ÅäÖò¿·Ö£ºÐÞ¸ÄMYSQL_USER¡¢`MYSQL_PASSWORD`¡¢`MYSQL_DATABASE`ºÍ`BACKUP_DIR`µÈ±äÁ¿£¬ÒÔÊÊÓ¦ÄúµÄMySQL·þÎñÆ÷ºÍ±¸·Ý´æ´¢Â·¾¶
2.È«Á¿±¸·Ý£ºÊ×´ÎÔËÐÐʱ£¬½Å±¾»áÖ´ÐÐÈ«Á¿±¸·Ý£¬²¢¼Ç¼µ±Ç°¶þ½øÖÆÈÕÖ¾ÎļþÃûºÍλÖÃ
3.ÔöÁ¿±¸·Ý£ººóÐøÔËÐÐʱ£¬½Å±¾»á¸ù¾ÝÉϴμǼµÄ¶þ½øÖÆÈÕ־λÖã¬Ö´ÐÐÔöÁ¿±¸·Ý£¬²¢¸üмǼ
4.¶þ½øÖÆÈÕÖ¾ÇåÀí£º½Å±¾Öаüº¬ÁËÒ»¸ö×¢Ê͵ôµÄ¶þ½øÖÆÈÕÖ¾ÇåÀíÃüÁÓÃÓÚɾ³ý¹ýÆÚµÄ¶þ½øÖÆÈÕÖ¾Îļþ
ÔÚʵ¼ÊʹÓÃÖУ¬Çë¸ù¾ÝÄúµÄ±¸·Ý²ßÂԺͱ£ÁôÖÜÆÚ½÷É÷µ÷Õû
5.°²È«ÐÔ£º½Å±¾ÖÐÖ±½Ó°üº¬ÁËÊý¾Ý¿âÓû§ÃûºÍÃÜÂ룬´æÔÚ°²È«·çÏÕ
½¨ÒéʹÓøü°²È«µÄ·½Ê½´æ´¢ºÍ¶ÁÈ¡Ãô¸ÐÐÅÏ¢£¬Èçͨ¹ý»·¾³±äÁ¿»òÅäÖÃÎļþ£¨È·±£È¨ÏÞÕýÈ·£©
6.×Ô¶¯»¯£º½¨Ò齫½Å±¾Ìí¼Óµ½cron×÷ÒµÖУ¬ÊµÏÖ¶¨ÆÚ×Ô¶¯±¸·Ý
ÀýÈ磬ʹÓÃ`crontab -e`Ìí¼ÓÈçÏÂÌõÄ¿£¬Ã¿ÌìÁ賿2µãÖ´Ðб¸·Ý½Å±¾£º bash 0 2 - /path/to/your_backup_script.sh Îå¡¢×ܽá ͨ¹ý±àд²¢Ö´ÐÐLinux MySQLÔöÁ¿±¸·Ý½Å±¾£¬Äú¿ÉÒÔÓÐЧµØÌáÉýÊý¾Ý¿â±¸·ÝµÄЧÂÊ£¬¼õÉÙ×ÊÔ´ÏûºÄ£¬Í¬Ê±È·±£Êý¾ÝµÄÍêÕûÐԺͰ²È«ÐÔ
ÔÚʵʩ¹ý³ÌÖУ¬Îñ±Ø¸ù¾Ýʵ¼ÊÐèÇóµ÷Õû½Å±¾²ÎÊý£¬²¢¶¨ÆÚ½øÐб¸·Ý»Ö¸´²âÊÔ£¬ÒÔÑéÖ¤±¸·ÝµÄÓÐЧÐԺͿɿ¿ÐÔ
´ËÍ⣬½áºÏÁ¼ºÃµÄ±¸·Ý²ßÂÔºÍ¼à¿Ø»úÖÆ£¬½«ÎªÄúµÄÊý¾Ý°²È«Ìṩ¸ü¼Ó¼áʵµÄ±£ÕÏ