create table with date name
Try This one 

DROP PROCEDURE IF EXISTS daily_backup;

DELIMITER //

CREATE PROCEDURE daily_backup()
BEGIN
    DECLARE given_datetime VARCHAR(25);
    DECLARE backup_table VARCHAR(64);

    SET given_datetime = DATE_FORMAT(NOW(),'%Y%m%d_%H%i%s');

    /**We need to add backticks to forcibly create table name as current date and time **/
    SET backup_table = CONCAT('db.table1_',given_datetime);
    SET @modified_date = CONCAT('`',backup_table,'`');
    SET @create_sql := CONCAT('CREATE TABLE ', @modified_date, ' LIKE db1.table1;');
    prepare stmt from @create_sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;


    SET @insert_sql := CONCAT('INSERT INTO ', @modified_date, ' SELECT * FROM db1.table1;');
    prepare stmt1 from @insert_sql;
    EXECUTE stmt1;
    DEALLOCATE PREPARE stmt1;


END //
DELIMITER ;
CALL daily_backup();


UPDATE


  We cant create table directly as CREATE TABLE 2013-06-14 16:58:37 LIKE db1.table;
  
  But we can create it forcibly by adding backtics in table name as
  
  CREATE TABLE 2013-06-14 16:58:37 LIKE db1.table;


UPDATE by RolandoMySQLDBA


  I changed the code to have datetime appended to the backup.
  
  The backup will be named db1.table1_YYYMMDD_HHMMSS
  
  The algorithm itself is fine (+1) !!!