有高手门遇到过以下问题吗?
我要用mysqldump每天凌晨1点定时将一个表中的昨天数据从源数据库传到另一个数据库, 用以下方法传不过去,
mysqldump -h x.x.x.x -P 3306 -u root -pxxx -q -t -f --skip-lock-tables --where="DATE_COL >= DATE_SUB(CURDATE(), interval 1 day) AND DATE_COL < CURDATE()" database_name table_name |  mysql -hx.x.x.x -uroot -pxxxx database_name但用以下命令就可以,
mysqldump -h x.x.x.x -P 3306 -u root -pxxx -q -t -f --skip-lock-tables --where="DATE_COL >= CURDATE() AND DATE_COL < DATE_COL(CURDATE(), interval 1 day)" database_name table_name |  mysql -hx.x.x.x -uroot -pxxxx database_name不过, 在白天执行第一条语句就没问题,执行第二条语句就有问题。在mysqldump中用 CURDATE()有BUG吗? 还是其它原因呢?

解决方案 »

  1.   

     DATE_COL(CURDATE(), interval 1 day)?
      

  2.   

     DATE_COL(CURDATE(), interval 1 day) 竟然有这个函数。
      

  3.   

    不好意思,写错了,应该是
    mysqldump -h x.x.x.x -P 3306 -u root -pxxx -q -t -f --skip-lock-tables --where="DATE_COL >= CURDATE() AND DATE_COL < DATE_ADD(CURDATE(), interval 1 day)" database_name table_name | mysql -hx.x.x.x -uroot -pxxxx database_name另外再补一下,DATE_COL是字符型字段, 格式如:2012-07-04 23:16:27:298。由于一些原因,这个字段类型不能再改了。
      

  4.   

    看看有没有记录。
    select * from table_name where DATE_COL >= DATE_SUB(CURDATE(), interval 1 day) AND DATE_COL < CURDATE()
      

  5.   

    记录是有的,就是用mysqldump凌晨同步就有问题,白天同步没问题.
      

  6.   

    你两个--where 后的值不一样 
     SELECT * FROM tbname where col>= CURDATE() and col< DATE_ADD(CURDATE(), interval 1 day);
    这样能查出今天的记录 SELECT * FROM tbname where col>= DATE_SUB(CURDATE(), interval 1 day) AND col< CURDATE();
    这样查出来的是昨天的记录 另外 DATE_COL是字符型字段, 格式如:2012-07-04 23:16:27:298 datetime类型 和CURDATE()(DATE类型)是两种不同的类型 
    你可以把你的DATE_COL转化成(date(DATE_COL))date类型再比较 试试看
      

  7.   


    这样就简单了,你的个命令安排在什么时间做的? 检查一下mysqldump -h x.x.x.x目标数据库上的时间现在是多少。
      

  8.   


    这个问题目前还存在,两台服务器的时间有细小差别,但最多也就差个几分钟,到凌晨1点钟,两台服务器时间肯定是同一天。再补充一下:
    凌晨1点钟,在数据库中用以下语句查询是有记录的:
    select * from table_name where DATE_COL >= DATE_SUB(CURDATE(), interval 1 day) AND DATE_COL < CURDATE()但是在同一时间linux脚本中用以下命令就无法将数据同步过去:
    mysqldump -h x.x.x.x -P 3306 -u root -pxxx -q -t -f --skip-lock-tables --where="DATE_COL >= DATE_SUB(CURDATE(), interval 1 day) AND DATE_COL < CURDATE()" database_name table_name |  mysql -hx.x.x.x -uroot -pxxxx database_name只能用以下命令:
    mysqldump -h x.x.x.x -P 3306 -u root -pxxx -q -t -f --skip-lock-tables --where="DATE_COL >= CURDATE() AND DATE_COL < DATE_ADD(CURDATE(), interval 1 day)" database_name table_name | mysql -hx.x.x.x -uroot -pxxxx database_name
      

  9.   

    我用其它方法解决了:从shell中获取日期.
    yesterday=`date '-d 1 days ago' +%Y-%m-%d`
    today=`date +%Y-%m-%d`
    mysqldump -h x.x.x.x -P 3306 -u root -pxxx -q -t -f --skip-lock-tables --where="DATE_COL >= '"$yesterday"' AND DATE_COL < '"$today"'" database_name table_name |  mysql -hx.x.x.x -uroot -pxxxx database_name
    不过,  mysqldump中使用CURDATE()是不是有bug呢?结贴散分.