Mysql教程

17.6本章实例

本节将对二进制日志进行实际的操作。本节要求的操作如下:

(1)启动二进制日志功能,并且将二进制日志存储到C:\目录下。二进制日志文件命名为 binlogo。

(2)启动服务后,查看二进制日志。

(3)然后向test数据库下的score表中插入两条记录。

(4)暂停二进制日志功能,然后,再次删除score表中的所有记录。

(5)重新开启二进制日志功能。

(6)使用二进制日志来恢复score表。

(7)删除二进制日志。

本实例的执行步骤如下:

1. 启动并设置二进制日志功能

将log-bin选项加入到my.cof或者my.ini配置文件中。在配置文件的[mysqld]组中加入下面的代码:

#my.cnf (Linux操作系统下)或者my.ini(Windows操作系统下)
#添加到[mysqld]后
log-bin=C:\binlog

配置完后,二进制文件将存储在C:\目录下。而且第一个二进制文件的完整名称将是binlog.000001。

2. 查看二进制日志文件

启动MySQL服务,在C:\目录下。可以找到binlog.000001。然后可以使用mysqlbinlog命令来查看二进制日志。先切换到C:\目录下,然后,再执行mysqlbinlog命令。语句如下:

C:\mysql>cd C:\
C:\>mysqlbinlog binlog.000001
/*!40019 SET @@session.maxJnsert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER/.!*/;
#at4
#091122 21:46:42 server id 1 end_log_pos 106 Start: binlog v 4,server v 5.1.40-community-log created
091122 21:46:42
at startup
Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG'
wkAJSw8BAAAAZgAAAGoAAAABAAQANS4xLjQwLWNvbW11bml0eS1sb2cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADCQAILEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICgC
'/*!*/;
DELIMITER;
End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

mysqlbinlog命令默认在当面目录下查找binlog.000001。因此,如果不切换到binlog.000001所在的目录,mysqlbinlog命令将找不到binlog.000001文件。也可使用下面的语句:

C:\mysql>mysqlbinlog C:\binlog.000001

mysqlbinlog命令会根据后面的详细路径来查找binlog.000001文件。

3.向test据库中的score表中插入两条记录

先查询score表中的所有记录。查询结果如下:

mysql> SELECT * FROM score;
Empty set (0.08 sec)

结果显示,score表中没有任何记录,然后插入两条记录,INSERT语句执行如下:

mysql> INSERT INTO score VALUES(NULL,901,'计算机’,98>;
Query OK, 1 row affected (0.08 sec)
mysql> INSERT INTO score VALUES(NULL,901, ’英语‘,80);
Query OK, 1 row affected (0.00 sec)

然后查询score表。SELECT语句执行结果如下:

SELECT  * from score;
+------+----------+----------+--------+
|  id  |  stu_id  |  c_name  | grade  |
+------+----------+----------+--------+
|  12  |    901   |   计算机 |    98  |
|  13  |    902   |    英语  |    80  |
+------+----------+----------+--------+
2 rows in set(0.00 sec)

这两条记录已经插入成功。执行EXIT退出MySQL数据库,然后使用mysqlbinlog语句来查看二进制日志文件。mysqlbinlog命令如下:

C:\>mysqlbinlog binlog.000001

二进制日志文件出现以下内容:

SET @@session.collation__database=DEFAULT/*!*/;
INSERT INTO score VALUES(NULL,901,'计算机',98)
/*!*/;
at 244
#091122 21:57:27 server id 1 end_log_pos 272 lntvar SET INSERT_ID=13/*!*/;
#at 272
#091122 21:57:27 server id 1 end_log_pos 381  Query t hread_id=1
exec_time=0
error_code=0
SET TIMESTAMP=1258898247/*!*/;
INSERT INTO score VALUES{NULL,901,,'英语',80)
/*!*/;
DELIMITER ;

这些内容记录了前面执行的两个INSERT语句。

4. 暂停二进制日志功能

后面需要删除score表中的所有记录,而此时不希望这个删除语句被记录到二进制日志中。因此使用SET语句来暂停二进制日志功能。SET语句的代码如下:

SET SQL_LOG_BIN=O ;

将SQL_LOG_BIN参数设置为0,那么二进制日志功能就会暂时停止。下面是SET语句、DELETE语句和SELECT语句查询的结果。

mysql> SET SQL_LOG__BIN=0;
Query OK, 0 rows affected (0.00 sec)
mysql> DELETE FROM score;
Query OK, 2 rows affected (0.00 sec)
mysql> SELECT * FROM score;
Empty set (0.00 sec)

执行完后,score表中已经不存在任何记录了。

5.重新开启二进制日志功能

可以使用SET语句来重新开启二进制日志功能。set语句如下:

SET SQL_LOG_BIN=1;

执行该语句之后,二进制日志功能将可以继续使用。

6.使用二进制日志来恢复score表

使用EXIT退出MySQL数据库,然后执行下面的语句:

mysqlbinlog binlog.000001 | mysql -u root -p

执行该语句之后,再次登录到MySQL数据库中,然后查询score表中的记录。查询结果如下:

mysql> SELECT * FROM score;
+------+----------+------------+
|  id  |  stu_id  |c_name|grade|
+------+----------+------------+
|  14  |    901   |   计算机   |
|  15  |    901   |    英语    |
+------+----------+------------+
rows in set (0.00 sec)

这两条记录被还原回来。因为id字段是自动增加的,所以取值是在原来记录的基础上 进行了自动增加。

删除二进制日志 只是RESET MASTER语句可以删除二进制日志。该语句执行完后,使用mySqlbinlog来查看二进制日志文件。结果如下:

C:\>mysqlbinlog binlog.000001
/*!40019 SET @@session.max-innsert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
#at 4
#091122 22:18:30 server id 1 end_log_pos 106 Start: binlog v 4, server v 5.1.40-community-log created
091122 22:18:30 at startup
Warning: this binlog is either in use or was not closed properly.
ROLLBACK/*!*/;
BINLOG '
NkgJSw8BAAAAZgAAAGoAAAABAAQANS4xLjQwLWNvbW11 bmlOeS1sb2cAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAA2SAILEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
'/*!*/;
DELIMITER;
End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;

这个文件中没有INSERT语句。说明这个二进制日志文件是新创建的,而原来的binlog.000001已经被删除了。


关注微信获取最新动态