N_TYPE=@OLD_COMPLETION_TYPE*/;
?
3、删除二进制日志
mysql的二进制日志可以配置自动删除,同时mysql也提供了安全的手动删除二进制日志的方法
删除所有的二进制日志文件使用RESET MASTER;
?
RESET MASTER;
?
执行该语句,所有二进制日志将被删除,mysql 会重新创建二进制日志,新的日志文件扩展名将重新从000001开始编号只删除部分二进制日志文件使用PURGE MASTER LOGS;
?
PURGE MASTER LOGS;
?
语法如下
?
PURGE {MASTER | BINARY} LOGS TO 'log_name'
PURGE {MASTER | BINARY} LOGS BEFORE 'date'
?
第一种方法指定文件名,执行该命令将删除文件名编号比指定文件名编号小的所有日志文件
第二种方法指定日期,执行该命令将删除指定日期以前的所有日志文件
使用PURGE MASTER LOGS;删除创建时间比binlog.000003早的所有日志文件
首先,为了演示语句操作过程,准备多个日志文件,读者可以对mysql服务进行多次重启
例如这里有10个日志文件

执行删除命令
?
PURGE MASTER LOGS TO "joe-bin.000003";
?
执行完成后,使用 show BINARY logs; 查看二进制日志

可以看到joe-bin.000001和joe-bin.000002两个日志文件被删除了
使用 PURGE MASTER LOGS 删除2013年3月30日前创建的所有日志文件,执行命令如下
?
PURGE MASTER LOGS BEFORE '20130330'
?
执行完毕之后,2013年3月30日前的日志文件都被删除,但2013年3月30日的日志会被保留
4、查看二进制日志里的操作记录
?
show binlog events;
?
比如想查看某一个二进制日志里面的记录,但又不想用mysqlbinlog,可以使用show binlog events
比如我想查看'joe-bin.000006'这个binlog文件的内容,执行如下命令
?
show binlog events in 'joe-bin.000006';
?
内容如下
?
Log_name: joe-bin.000006
Pos: 202
Event_type: Query
Server_id: 1
End_log_pos: 304
Info: use `test`; insert into bin(name) values ('orange')
?
可以看到'joe-bin.000006'这个binlog文件记录了哪些SQL命令
如果想知道binlog文件的创建时间,就需要mysqlbinlog工具来查看
?
C:\ProgramData\MySQL\MySQL Server 5.5\data>mysqlbinlog mysql_bin.000001
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#131015 16:35:56 server id 1 end_log_pos 106
?
其中131015为日志创建时间,即2013年10月15日
5、使用二进制日志还原数据库
如果mysql服务器启用了二进制日志,在数据库出现意外丢失数据时,可以使用mysqlbinlog工具从指定的时间点开始(例如,最后一次备份)直到现在,或另外一个指定的时间点的日志中恢复数据要想从二进制日志恢复数据,需要知道当前二进制日志文件的路径和文件名。一般可以从配置文件(即my.cnf或者my.ini,文件名取决于mysql服务器的操作系统)中找到路径
mysqlbinlog恢复数据的语法如下:
?
mysqlbinlog [option] filename |mysql -uuser -ppass
?
option是一些可选项,filename是日志文件名
比较重要的两对option参数是
--start-datetime、--stop-datetime
--start-position、--stop--position
--start-date、--stop-date可以指定恢复数据库的起始时间点和结束时间点
--start-position、--stop--position可以指定恢复数据的开始位置和结束位置
使用mysqlbinlog恢复mysql数据库到2014年7月2日15:27:48时的状态,执行下面命令
?
mysqlbinlog --stop-datetime="2014-7-2 15:27:48 " D:\mysql\log\binlog\binlog.000008 |mysql -u user -p password
该命令执行成功后,会根据binlog.000008日志文件恢复2014年7月2日15:27:48前的所有操作。这种方法对误操作的删除数据比较有效
?
6、暂时停止二进制日志
如果在mysql的配置文件配置启动了二进制日志,mysql会一直记录二进制日志,修改配置文件,可以停止二进制日志,但是需要重启mysql数据库。mysql提供了暂时停止二进制日志的功能。通过 SET SQL_LOG_BIN 语句可以使mysql暂停或者启动二进制日志
语法如下
?
SET sql_log_bin={0|1}
?
执行下面语句将暂停二进制日志
?
SET sql_log_bin=0;
?
执行下面语句将恢复记录二进制日志
?
SET sql_log_bin=1;
?
实际上,binlog文件有点类似于SQLSERVER的ldf文件,大家都保存了数据库的操作日志,都可以根据这个日志来恢复数据库但是又有不同,mysql的binlog可用不开启,因为mysql的redo日志放在ib_logfile开头的文件里面,而undo日志跟数据文件是放在一起的所以这一点跟SQLSERVER很不一样在复制的时候,MYSQL一定要开启binlog能,slave读取binlog,而SQLSERVER的订阅端读取发布端的ldf文件,所以刚才说:binlog文件有点类似于SQLSERVER的ldf文件
错误日志
错误日志文件包含了当mysqld启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。
在MYSQL中,错误日志也是非常重要的,mysql将启动和停止数据库信息以及一些错误信息记录到错误日志中
1、启动和设置错误日志
在默认情况下,错误日志会记录到数据库的数据目录下。如果没有在配置文件中指定文件名,则文件名默认为hostname.err。
例如:mysql所在服务器主机名为mysql-db,记录错误信息的文件名为mysql-db.err。如果执行了FLUSH LOGS,错误日志文件会重新加载
错误日志的启动和停止以及日志文件名,都可以通过修改my.ini(或者my.cnf)来配置。错误日志的配