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已经被删除了。