数据库版本
MySQL 5.1.46-log已经开启InnoDB的日志功能表结构
CREATE TABLE `t1`(
  `id` INT(1) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(10),
  PRIMARY KEY(`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
INSERT INTO `t1`(`name`) VALUES("a"),("b"),("c");类似这样的表,比如想查询出id=1的数据是何时插入到数据库的
如果数据库与PHP在同一台服务器的话,倒是知道可以通过
# mysqlbinlog /mysql/log/path/mysql-bin.0000xxx | grep -C2 'keyword'
类似这样的方法获取到插入时间但如果不是在同一台服务器呢??有什么办法吗??(表结构不变,且不添加其他表的情况下)
主要是要查询数据插入时间的情况超级少...如果特地添加一个字段来记录插入时间的话,那挺浪费空间的(特别是要查询的这个表数据量本来就很多)

解决方案 »

  1.   

    一样啊,你仍然可以到MYSQL服务器上去看BINLOG啊。
      

  2.   

    对不起,没说明白
    假设MySQL服务器安装在 192.168.1.2
    WEB服务器(APACHE,PHP)安装在 192.168.1.3
    我知道MySQL的root账号密码,但不知道MySQL服务器的管理员账号密码,也无法通过SSH登录该服务器
    那如何在WEB服务器上使用该命令呢??
    mysqlbinlog不是SHELL命令吗??还是说...你的意思是
    在WEB服务器上使用
    mysqlbinlog -u root -p -h192.168.1.2
    的方式进行登录查询??那如何指定日志文件呢??最新的日志文件名又该如何取得??
      

  3.   

    经过测试,这样可以查询所有的日志文件
    mysqlbinlog --to-last-log=true --disable-log-bin=true --read-from-remote-server=true --user=root --password --host=remote_host mysql-bin.000001但比如我只想查询某个时段的日志,比如前2天的日志
    mysqlbinlog --to-last-log=true --disable-log-bin=true --read-from-remote-server=true --user=root --password --host=remote_host --start-datetime="2011-07-27 00:00:00" --stop-datetime="2011-07-29 00:00:00" mysql-bin.000001
    而我前2天基本上没动过数据库(这只是个测试数据库),此时返回的结果很明显是错误的啊...而如果我把--start-datetime设置到有数据库操作的时间,比如
    mysqlbinlog --to-last-log=true --disable-log-bin=true --read-from-remote-server=true --user=root --password --host=remote_host --start-datetime="2011-07-15 00:00:00" --stop-datetime="2011-07-20 00:00:00" mysql-bin.000001
    最后的日志时间确实是在2011-07-20 00:00:00之前,但开始时间却是2011-05-14 18:59:00(应该是创建数据库的时间)
    为什么呢??我的命令有错??不然为什么开始时间会变呢??
      

  4.   

    可以考虑在设计表的时候,添加一个当前时间为默认值的字段,用这个字段来查看数据进入表的时间,如下:
    mysql> CREATE TABLE `t1`(
        ->   `id` INT(1) UNSIGNED NOT NULL AUTO_INCREMENT,
        ->   `name` VARCHAR(10),
        ->   `indate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
        ->   PRIMARY KEY(`id`)
        -> ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
    Query OK, 0 rows affected (0.06 sec)mysql> insert into t1(name) values('AA');
    Query OK, 1 row affected (0.05 sec)mysql> select * from t1;
    +----+------+---------------------+
    | id | name | indate              |
    +----+------+---------------------+
    |  1 | AA   | 2011-07-30 21:33:52 |
    +----+------+---------------------+
    1 row in set (0.00 sec)
      

  5.   

    主楼说过了...就是因为这个字段基本上一年也就查询1、2次...所以才不想浪费这空间...我3楼说的问题我想大概是因为,每个日志文件的开头几句是固定输出的...不管符合不符合条件...至少从我目前的测试中是这样的...
    mysqlbinlog -uroot -p --start-datetime="2011-07-15 00:00:00" --stop-datetime="2011-07-20:00:00" mysql-bin.000045
    即使是这样,只读取指定的日志文件,开头的几句/*!40019 SET @@session.max_insert_delayed_threads=0*/;
    /*!32316 SET @OLD_SQL_LOG_BIN=@@SQL_LOG_BIN, SQL_LOG_BIN=0*/;
    /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
    DELIMITER /*!*/;
    # at 4
    #110514 18:59:00 server id 1  end_log_pos 107   Start: binlog v 4, server v 5.5.11-log created 110514 18:59:00 at startup
    ROLLBACK/*!*/;总是会出现,而如果查询的时候跨好几个mysql-bin文件,比如从mysql-bin.000001查询到mysql-bin.000010的话,上面这段会出现10次左右(没仔细数)