It is always good to make a backup of all the log files you are about to delete. Alternatively if you take incremental backups then you should rotate the binary log by using FLUSH LOGS. This done, you need to copy to the backup location all binary logs which range from the one of the moment of the last full or incremental backup to the last but one. These binary logs are the incremental backup
Here is the bash script, which you can use to backup binary logs, all you need to do is change following param according to your needs and all yours. This script is not mine, I got the idea from here:
# # This script backup binary log files # backup_user=dba backup_password=xxxx backup_port=3306 backup_host=localhost log_file=/var/log/binlog_backup.log binlog_dir=/mnt/database/logs # Path to binlog backup_dir=/mnt/archive/binlogs/tench # Path to Backup directory PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin export PATH Log() { echo "`date` : $*" >> $log_file } mysql_options() { common_opts="--user=$backup_user --password=$backup_password" if [ "$backup_host" != "localhost" ]; then common_opts="$common_opts --host=$backup_host --port=$backup_port" fi } mysql_command() { mysql $common_opts --batch --skip-column-names -e "$2" } mysql_options Log "[INIT] Starting MySQL binlog backup" Log "Flushing MySQL binary logs (FLUSH LOGS)" mysql_command mysql "flush logs" master_binlog=`mysql_command mysql "show master status" 2>/dev/null | cut -f1` Log "Current binary log is: $master_binlog" copy_status=0 for b in `mysql_command mysql "show master logs" | cut -f1` do if [ -z $first_log ]; then first_log=$b fi if [ $b != $master_binlog ]; then Log "Copying binary log ${b} to ${backup_dir}" rsync -av $backup_host:/$binlog_dir/$b $backup_dir >& /dev/null if [ $? -ne 0 ]; then copy_status=1 break fi else break fi done if [ $copy_status -eq 1 ]; then Log "[ERR] Failed to copy binary logs cleanly...aborting" exit 1 fi