mysql日志文件

MySQL的binlog日志的做用
- 1:用来记录mysql内部增删改查等对MySQL数据有更新内容的记录。像show和select通常不会记录
- 2:mysqlbinlog --base64-output=DECODE-ROWS -v mysql-bin.000002 - 
MySQL5.6之后须要用此命令来查看,能够避免出现乱码
- 3:mysqlbinlog拆库,拆除test库的全部操做,而后进行恢复
mysqlbinlog -d test mysqlbin.000002 > test.sql
- 4:mysqlbinlog mysqlbin000002 --start-position=510 --stop-position=1312 -r pos.sql
输出初始位置为510,结束位置为1312,导出到sql文件
mysqlbinlog

此命令是用来解析mysqlbinlog日志,mysql-bin.index记录了全部的binlog文件。mysql

--master-data
若是值等于2,结果以下:
--CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000020', MASTER_LOG_POS=191;
此行会被注释掉,咱们要的文件名以及位置点。就是咱们的备份点。

若是值等于1,结果以下:
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000020', MASTER_LOG_POS=191;
表明这条语句是可执行的。用在slave库上。
错误日志(error log)

记录MySQL服务进程mysqld在启动/关闭或运行过程当中遇到的错误日志信息sql

log-error=/var/log/mysqld.log
查询日志(query log)

1:普通查询日志(general query log):记录客户端链接信息和执行SQL语句信息,通常不建议开启,会形成磁盘I/O。函数

show variables like 'general_log%';
general_log
general_log_file

2:慢查询日志(slow query log): 记录执行时间超出指定值(long query time)的sql语句。性能

slow_query_log = ON
log-slow-queries=/var/lib/mysql/slow.log
long_query_time=2
log-queries-not-using-indexes #未使用索引的语句
二进制日志(binary log)

记录数据被修改的相关信息优化

log-bin = mysql-bin
log-slave-updates
MySQL清除错误的链接
mysql> FLUSH HOSTS;
Query OK, 0 rows affected (0.00 sec)
binlog的三种模式

1:statement level日志

每一条会修改数据的sql都会记录到master的bin-log中。slave在复制的的时候sql进程会解析成原来master端执行过的相同的sql来再次执行。code

优势:解决row level下的缺点,不须要记录每一行数据的变化。减小binlog日志量,节约I/0提升性能。记录Master上所执行的语句细节,以及执行语句时候的上下文信息。orm

缺点:bug比较多,会形成mysql复制出现问题,如在存储过程当中使用last_insert_id()函数,会使slave和master上获得不一致的ID等等。索引

2:Row Level进程

日志中会记录每一行数据被修改的形式,而后在slave端再对相同的数据进行修改。

优势:binlog中能够不记录执行的sql语句的上下文相关信息,仅仅只须要记录哪一条记录被修改了,修改为什么样了。会清楚的记录下每一行数据修改的细节。不会出现某些特定状况下的存储过程、或function,以及trigger的调用和触发没法被正确复制的问题。

缺点:binlog日志量会很大。尤为是alter table之类的表结构变动语句,实际上会致使重建整个表。

3:Mixed Level

其实是前两种模式的结合。在mixed模式下,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,在statement 和 row 之间选择一种。新版本中的statment level 仍是和之前同样,仅仅记录执行的语句。而新版本的MySQL中对row level模式也作了优化,并非全部的修改都会以row level来记录,像遇到表结构变动的时候就会以statement 模式来记录,若是sql 语句确实就是update或者delete等修改数据的语句,那么仍是会记录全部行的变动。

默认是行模式
mysql> show variables like 'binlog_format'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | binlog_format | ROW | +---------------+-------+ 1 row in set (0.00 sec)

相关文章
相关标签/搜索