Mysql binlog
2016-07-28 16:01
387 查看
Mysql binlog详解:
Mysql binlog日志用于记录所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)
的所有语句。语句以“事件”的形式保存,它描述数据更改。
binlog作用:
因为有了数据更新的binlog,所以可以用于实时备份,与master/slave复制。
和binlog有关参数:
log_bin:设置此参数表示启用binlog功能,并指定路径名称
log_bin_index:设置此参数是指定二进制索引文件的路径与名称
binlog_do_db:此参数表示只记录指定数据库的二进制日志
binlog_ignore_db:此参数表示不记录指定的数据库的二进制日志
max_binlog_cache_size:此参数表示binlog使用的内存最大的尺寸
binlog_cache_size:
此参数表示binlog使用的内存大小,可以通过状态变量binlog_cache_use和binlog_cache_disk_use来帮助测试。
binlog_cache_use:使用二进制日志缓存的事务数量
binlog_cache_disk_use:使用二进制日志缓存但超过binlog_cache_size值并使用临时文件来保存事务中的语句的事务数量
max_binlog_size:
Binlog最大值,最大和默认值是1GB,该设置并不能严格控制Binlog的大小,尤其是Binlog比较靠近最大值而又遇到一个比较大事务时,为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有SQL都记录进当前日志,直到事务结束
binlog的删除:
binlog的删除可以手工删除或自动删除
自动删除binlog
通过binlog参数(expire_logs_days )来实现mysql自动删除binlog
mysql> show binary logs;
+----------------------+-----------+
| Log_name | File_size |
+----------------------+-----------+
| mysql3306-bin.000001 | 65423 |
| mysql3306-bin.000002 | 1176885 |
| mysql3306-bin.000003 | 151 |
+----------------------+-----------+
3 rows in set (0.03 sec)
mysql> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 7 |
+------------------+-------+
1 row in set (0.01 sec)
mysql> set global expire_logs_days=3;
Empty set (0.00 sec)
mysql> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 3 |
+------------------+-------+
1 row in set (0.00 sec)
手工删除binlog
mysql> show master logs; //删除master的binlog
+----------------------+-----------+
| Log_name | File_size |
+----------------------+-----------+
| mysql3306-bin.000001 | 65423 |
| mysql3306-bin.000002 | 1176885 |
| mysql3306-bin.000003 | 202 |
| mysql3306-bin.000004 | 151 |
+----------------------+-----------+
4 rows in set (0.02 sec)
mysql> reset master;
Query OK, 0 rows affected (0.03 sec)
mysql> show master logs;
+----------------------+-----------+
| Log_name | File_size |
+----------------------+-----------+
| mysql3306-bin.000001 | 151 |
+----------------------+-----------+
1 row in set (0.00 sec)
mysql> reset slave; //删除slave的中继日志
mysql> purge master logs before '2016-07-25 17:20:00'; //删除指定日期以前的日志索引中binlog日志文件
mysql> purge master logs to 'binlog.000002'; //删除指定日志文件的日志索引中binlog日志文件, 或者直接用操作系统命令直接删除
mysql> set sql_log_bin=1/0; //如果用户有super权限,可以启用或禁用当前会话的binlog记录
mysql> show master logs; //查看master的binlog日志
mysql> show binary logs; //查看master的binlog日志
mysql> show master status; //用于提供master二进制日志文件的状态信息
mysql> show slave hosts; //显示当前注册的slave的列表。不以--report-host=slave_name选项为开头的slave不会显示在本列表中
准备一组事务:
drop database test;
create database test;
create table test.test (id int);
insert into test values(1),(2),(3),(4),(5);
binglog的查看:
通过mysqlbinlog命令可以查看binlog的内容
[root@mysql3 logs]# /usr/local/mysql/bin/mysqlbinlog mysql3306-bin.000001|more
... ...
# at 332
#160718 15:05:44 server id 233306 end_log_pos 426 CRC32 0xd2836d69 Query thread_id=7 exec_time=0 error_code=0
SET TIMESTAMP=1468825544/*!*/;
create database test
/*!*/;
# at 426
#160718 15:06:10 server id 233306 end_log_pos 474 CRC32 0x996d51b7 GTID [commit=yes]
SET @@SESSION.GTID_NEXT= '7c77185a-4c49-11e6-8450-000c29c7b3d5:3'/*!*/;
# at 474
#160718 15:06:10 server id 233306 end_log_pos 574 CRC32 0x09f86ff0 Query thread_id=7 exec_time=0 error_code=0
SET TIMESTAMP=1468825570/*!*/;
create table test.test(id int)
/*!*/;
# at 574
#160718 15:06:46 server id 233306 end_log_pos 622 CRC32 0x59035497 GTID [commit=yes]
SET @@SESSION.GTID_NEXT= '7c77185a-4c49-11e6-8450-000c29c7b3d5:4'/*!*/;
# at 622
#160718 15:06:46 server id 233306 end_log_pos 690 CRC32 0xba29b1ce Query thread_id=7 exec_time=0 error_code=0
SET TIMESTAMP=1468825606/*!*/;
BEGIN
/*!*/;
# at 690
#160718 15:06:46 server id 233306 end_log_pos 737 CRC32 0xde61ed2b Table_map: `test`.`test` mapped to number 72
# at 737
#160718 15:06:46 server id 233306 end_log_pos 797 CRC32 0xa4a5fdc3 Write_rows: table id 72 flags: STMT_END_F
解析binlog格式:
位置
位于文件中的位置,“at 332”说明“事件”的起点,是以第332字节开始;“end_log_pos 426”说明以第426字节结束
时间戳
事件发生的时间戳:“160718 15:05:44”
事件执行时间
事件执行花费的时间:"exec_time=0"
错误码
错误码为:“error_code=0”
服务器的标识
服务器的标识id:“server id 233306”
参考文档:
http://blog.csdn.net/wyzxg/article/details/7412777
Mysql binlog日志用于记录所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)
的所有语句。语句以“事件”的形式保存,它描述数据更改。
binlog作用:
因为有了数据更新的binlog,所以可以用于实时备份,与master/slave复制。
和binlog有关参数:
log_bin:设置此参数表示启用binlog功能,并指定路径名称
log_bin_index:设置此参数是指定二进制索引文件的路径与名称
binlog_do_db:此参数表示只记录指定数据库的二进制日志
binlog_ignore_db:此参数表示不记录指定的数据库的二进制日志
max_binlog_cache_size:此参数表示binlog使用的内存最大的尺寸
binlog_cache_size:
此参数表示binlog使用的内存大小,可以通过状态变量binlog_cache_use和binlog_cache_disk_use来帮助测试。
binlog_cache_use:使用二进制日志缓存的事务数量
binlog_cache_disk_use:使用二进制日志缓存但超过binlog_cache_size值并使用临时文件来保存事务中的语句的事务数量
max_binlog_size:
Binlog最大值,最大和默认值是1GB,该设置并不能严格控制Binlog的大小,尤其是Binlog比较靠近最大值而又遇到一个比较大事务时,为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有SQL都记录进当前日志,直到事务结束
binlog的删除:
binlog的删除可以手工删除或自动删除
自动删除binlog
通过binlog参数(expire_logs_days )来实现mysql自动删除binlog
mysql> show binary logs;
+----------------------+-----------+
| Log_name | File_size |
+----------------------+-----------+
| mysql3306-bin.000001 | 65423 |
| mysql3306-bin.000002 | 1176885 |
| mysql3306-bin.000003 | 151 |
+----------------------+-----------+
3 rows in set (0.03 sec)
mysql> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 7 |
+------------------+-------+
1 row in set (0.01 sec)
mysql> set global expire_logs_days=3;
Empty set (0.00 sec)
mysql> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 3 |
+------------------+-------+
1 row in set (0.00 sec)
手工删除binlog
mysql> show master logs; //删除master的binlog
+----------------------+-----------+
| Log_name | File_size |
+----------------------+-----------+
| mysql3306-bin.000001 | 65423 |
| mysql3306-bin.000002 | 1176885 |
| mysql3306-bin.000003 | 202 |
| mysql3306-bin.000004 | 151 |
+----------------------+-----------+
4 rows in set (0.02 sec)
mysql> reset master;
Query OK, 0 rows affected (0.03 sec)
mysql> show master logs;
+----------------------+-----------+
| Log_name | File_size |
+----------------------+-----------+
| mysql3306-bin.000001 | 151 |
+----------------------+-----------+
1 row in set (0.00 sec)
mysql> reset slave; //删除slave的中继日志
mysql> purge master logs before '2016-07-25 17:20:00'; //删除指定日期以前的日志索引中binlog日志文件
mysql> purge master logs to 'binlog.000002'; //删除指定日志文件的日志索引中binlog日志文件, 或者直接用操作系统命令直接删除
mysql> set sql_log_bin=1/0; //如果用户有super权限,可以启用或禁用当前会话的binlog记录
mysql> show master logs; //查看master的binlog日志
mysql> show binary logs; //查看master的binlog日志
mysql> show master status; //用于提供master二进制日志文件的状态信息
mysql> show slave hosts; //显示当前注册的slave的列表。不以--report-host=slave_name选项为开头的slave不会显示在本列表中
准备一组事务:
drop database test;
create database test;
create table test.test (id int);
insert into test values(1),(2),(3),(4),(5);
binglog的查看:
通过mysqlbinlog命令可以查看binlog的内容
[root@mysql3 logs]# /usr/local/mysql/bin/mysqlbinlog mysql3306-bin.000001|more
... ...
# at 332
#160718 15:05:44 server id 233306 end_log_pos 426 CRC32 0xd2836d69 Query thread_id=7 exec_time=0 error_code=0
SET TIMESTAMP=1468825544/*!*/;
create database test
/*!*/;
# at 426
#160718 15:06:10 server id 233306 end_log_pos 474 CRC32 0x996d51b7 GTID [commit=yes]
SET @@SESSION.GTID_NEXT= '7c77185a-4c49-11e6-8450-000c29c7b3d5:3'/*!*/;
# at 474
#160718 15:06:10 server id 233306 end_log_pos 574 CRC32 0x09f86ff0 Query thread_id=7 exec_time=0 error_code=0
SET TIMESTAMP=1468825570/*!*/;
create table test.test(id int)
/*!*/;
# at 574
#160718 15:06:46 server id 233306 end_log_pos 622 CRC32 0x59035497 GTID [commit=yes]
SET @@SESSION.GTID_NEXT= '7c77185a-4c49-11e6-8450-000c29c7b3d5:4'/*!*/;
# at 622
#160718 15:06:46 server id 233306 end_log_pos 690 CRC32 0xba29b1ce Query thread_id=7 exec_time=0 error_code=0
SET TIMESTAMP=1468825606/*!*/;
BEGIN
/*!*/;
# at 690
#160718 15:06:46 server id 233306 end_log_pos 737 CRC32 0xde61ed2b Table_map: `test`.`test` mapped to number 72
# at 737
#160718 15:06:46 server id 233306 end_log_pos 797 CRC32 0xa4a5fdc3 Write_rows: table id 72 flags: STMT_END_F
解析binlog格式:
位置
位于文件中的位置,“at 332”说明“事件”的起点,是以第332字节开始;“end_log_pos 426”说明以第426字节结束
时间戳
事件发生的时间戳:“160718 15:05:44”
事件执行时间
事件执行花费的时间:"exec_time=0"
错误码
错误码为:“error_code=0”
服务器的标识
服务器的标识id:“server id 233306”
参考文档:
http://blog.csdn.net/wyzxg/article/details/7412777
相关文章推荐
- MYsql的UNION使用 构造结果集
- mysql一般性配置
- mysql 数据库引擎
- 浪潮集团入职技术培训(二)
- MySql优化
- mysql对自增id重新从1排序的两种方法
- mysql导出dump
- 配置trac 的时候 总是报 mysql 数据库 没有符合的utf8编码 错误
- MySQL进阶(一)
- mysql语句:批量更新多条记录的不同值[转]
- mysql5.5等版本如何启用SSL
- 转 MySQL 用户权限详细汇总
- mysql 5.7修改密码
- MySQL优化之四--Mysql基准测试工具(mysqlslap、sysbench)
- MYSQL语句大全
- MYSQL 开启远程访问连接权限
- Spark1.6.2 java实现读取txt文件插入MySql数据库代码
- error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'
- mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
- Mysql日常开发注意要点