MySQL的二进制日志binlo,它记录了所有的DDL和DML语句(除了数据查询语句select),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的
DDL
----Data Definition Language 数据库定义语言
主要的命令有create、alter、drop等,ddl主要是用在定义或改变表(table)的结构,数据类型,表之间的连接和约束等初始工作上,他们大多在建表时候使用
DML
----Data Manipulation Language 数据操纵语言
主要命令是slect,update,insert,delete,就像它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言
mysqlbinlog常见的选项
--start-datetime:从二进制日志中读取指定等于时间戳或者晚于本地计算机的时间
--stop-datetime:从二进制日志中读取指定小于时间戳或者等于本地计算机的时间 取值和上述一样
--start-position:从二进制日志中读取指定position 事件位置作为开始。
--stop-position:从二进制日志中读取指定position 事件位置作为事件截至
binlog日志有两个最重要的使用场景
1、mysql主从复制:
mysql replication在master端开启binlog,master把它的二进制日志传递给slaves来达到master-slave数据一致的目的。
2、数据恢复:通过mysqlbinlog工具来恢复数据。
binlog日志包括两类文件:
1)、二进制日志索引文件(文件名后缀为.index)用于记录所有的二进制文件。
2)、二进制日志文件(文件名后缀为.00000*)记录数据库所有的DDL和DML(除了数据查询语句select)语句事件。
开启binlog日志
[root@ 777 ~]
[mysqld]
log-bin=mysql-bin
server-id=1
binlog_format=MIXED(加入此参数才能记录到insert语句)
[root@ 777 ~]
查看binlog日志内容
1、mysqlbinlog命令
binlog是二进制文件,普通文件查看器cat、more、vim等都无法打开,必须使用自带的 mysqlbinlog命令查看。
binlog日志与数据库文件在同目录中。
在Mysql5.5以下版本使用mysqlbinlog命令时如果报错,就加上"--no-defaults"选项
2、show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];
IN 'log_name':指定要查询的binlog文件名(不指定就是第一个binlog文件)
FROM pos:指定从哪个pos起始点开始查起(不指定就是从整个文件首个pos点开始算)
LIMIT【offset】:偏移量(不指定就是0)
row_count :查询总条数(不指定就是所有行)
MariaDB [(none)]> show binlog events in 'mysql-bin.000002'\G;
从binlog日志恢复数据
"恢复语法"
MariaDB [(none)]> mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -p密码 数据库名
"常用参数"
--start-position=875 起始pos点
--stop-position=954 结束pos点
--start-datetime="2016-9-25 22:01:08" 起始时间点
--stop-datetime="2019-9-25 22:09:46" 结束时间点
--database=ops指定只恢复ops数据库(一台主机上往往有多个数据库,只限本地log日志)
"不常用参数"
-u --user=name 连接到远程主机的用户名
-p --password[=name]连接到远程主机的密码
-h --host=name 从远程主机上获取binlog日志
--read-from-remote-server从某个Mysql服务器上读取binlog日志