数据库版本
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'
类似这样的方法获取到插入时间但如果不是在同一台服务器呢??有什么办法吗??(表结构不变,且不添加其他表的情况下)
主要是要查询数据插入时间的情况超级少...如果特地添加一个字段来记录插入时间的话,那挺浪费空间的(特别是要查询的这个表数据量本来就很多)
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'
类似这样的方法获取到插入时间但如果不是在同一台服务器呢??有什么办法吗??(表结构不变,且不添加其他表的情况下)
主要是要查询数据插入时间的情况超级少...如果特地添加一个字段来记录插入时间的话,那挺浪费空间的(特别是要查询的这个表数据量本来就很多)
假设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
的方式进行登录查询??那如何指定日志文件呢??最新的日志文件名又该如何取得??
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(应该是创建数据库的时间)
为什么呢??我的命令有错??不然为什么开始时间会变呢??
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)
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次左右(没仔细数)