给别人做网站被诉侵权,2024免费推广网站,服饰类网站模板,为什么访问外国网站速度慢mysql日志的种类 二进制日志#xff08;binary log#xff09;#xff1a;记录数据更新的操作#xff0c;mysqlbinlog 可查看二进制日志文件 错误日志#xff08;error log#xff09;#xff1a;记录mysql服务进程mysqld的启动、关闭和运行时的错误信息 慢查询日志binary log记录数据更新的操作mysqlbinlog 可查看二进制日志文件 错误日志error log记录mysql服务进程mysqld的启动、关闭和运行时的错误信息 慢查询日志slow query log记录执行时间超过指定时间long_query_time的查询操作 通用查询日志general query log记录客户端连接和执行的sql查询操作一般不开启 日志一般存放在安装目录下的data目录下 刷新binlog操作[rootoldboy data]# mysqladmin -uroot -poldboy flush-logs binlog日志的三种模式statement、row、mixed mysql show variables like %binlog_for%;
--------------------------
| Variable_name | Value |
--------------------------
| binlog_format | STATEMENT |
-------------------------- 1.statement level模式 每一条修改数据的sql都会记录到master的bin-log中slave在复制的时候sql进程会解析成和原来master端执行过的相同的sql来再次执行 优点解决了row level下的缺点不需要记录每一条数据的变化减少bin-log的日志量节约IO提高性能 缺点必须记录每条语句在执行时的一些上下文信息以保证所有语句在slave端执行时能得到和在master端执行时相同的结果涉及到复杂内容的时候可能会出现bug造成复制出现问题主要是修改数据的时候使用某些特定函数或者功能例如sleep( )函数、last_insert_id( )函数 2.row level模式 日志记录成每一行数据被修改的形式然后在slave端在对相同的数据进行修改 优点不需记录执行sql语句的上下文信息只需记录哪一条数据被修改了不会出现某些特定情况下的存储过程、函数、触发器的调用和触发无法被正确复制的问题 缺点binlog日志量很大例如update test set name‘Jane’test表有几行就会记录几行 3.mixed模式 statement模式和row模式的混合mysql会根据执行的每一条具体的sql语句来确定记录的形式即在statemente和row之间选择一种。新版本对row level模式做了优化不是所有的修改都以row level来记录如表结构的变更会以statement模式记录如果是update或者delete还是会记录所有行的变更 mysql5.5默认的binlog是statement模式临时修改为行模式mysqlset global binlog_format ROW;(永久生效需改配置文件) 执行update oldboy.test set name’Jane’ where id3 查看行模式下的binlog [rootoldboy data]# mysqlbinlog --base64-outputdecode-rows -v mysql-bin.000053 BEGIN /*!*/; # at 725 # at 774 #180717 20:20:55 server id 1 end_log_pos 774 Table_map: oldboy.test2 mapped to number 38 #180717 20:20:55 server id 1 end_log_pos 884 Update_rows: table id 38 flags: STMT_END_F ### UPDATE oldboy.test2 ### WHERE ### 14 ### 2Jane ### SET ### 14 ### 2Jack ### UPDATE oldboy.test2 ### WHERE ### 15 ### 2Jane ### SET ### 15 ### 2Jack ### UPDATE oldboy.test2 ### WHERE ### 16 ### 2Jane ### SET ### 16 ### 2Jack ### UPDATE oldboy.test2 ### WHERE ### 17 ### 2Jane ### SET ### 17 ### 2Jack # at 884 mysqlbinlog用来解析mysql的binlog日志在mysql/data目录下如mysql-bin.0000066位 binlog用来记录mysql内部所有增、删、改等对数据库内容有更新的记录包含所有数据库及所有表无法分开记 1.指定库导出加-d 库名可将指定库的更新语句截取出来 mysqlbinlog -d oldboy mysql-bin.000011 all.sql 日志内容部分如下 #181201 21:43:41 server id 1 end_log_pos 177 Query thread_id26 exec_time0 error_code0
SET TIMESTAMP1543671821/*!*/;
SET session.pseudo_thread_id26/*!*/;
SET session.foreign_key_checks1, session.sql_auto_is_null0, session.unique_checks1, session.autocommit1/*!*/;
SET session.sql_mode0/*!*/;
SET session.auto_increment_increment1, session.auto_increment_offset1/*!*/;
/*!\C utf8 *//*!*/;
SET session.character_set_client33,session.collation_connection33,session.collation_server33/*!*/;
SET session.lc_time_names0/*!*/;
SET session.collation_databaseDEFAULT/*!*/;
BEGIN
/*!*/;
# at 177
#181201 21:43:41 server id 1 end_log_pos 287 Query thread_id26 exec_time0 error_code0
use oldboy/*!*/;
SET TIMESTAMP1543671821/*!*/;
insert into test values(8,Alice),(9,Alan)
/*!*/;
# at 287
#181201 21:43:41 server id 1 end_log_pos 314 Xid 531
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPEOLD_COMPLETION_TYPE*/;
/*!50530 SET SESSION.PSEUDO_SLAVE_MODE0*/; 2.指定位置恢复--start-position和--stop-position Insert into test values(4,’钱六’);查看前后两个at的位置分别为570、670指定更新语句所在的位置 mysqlbinlog mysql-bin.000011 --start-position570 --stop-position670 -r /opt/position.sql将结果重定向到/opt/ position.sql文件中-r相当于重定向 3.指定时间恢复, --start-datetime和--stop-datetime指定时间恢复可能不准确mysql不会恢复截止时间恰好等于指定时间的sql语句但是会恢复开始时间恰好等于指定时间的sql语句 Insert into test values(4,’钱六’);前后时间都为22:41:20指定时间时可稍微将时间向两个边界扩展一点 mysqlbinlog mysql-bin.000011 --start-datetime2018-06-22 22:41:10 --stop-datetime2018-06-22 22:41:21 -r /opt/datetime.sql 以上指定位置和指定时间如果不指定结束点表示从指定点到文件结尾如果不指定开始点表示从文件开头到指定点 转载于:https://www.cnblogs.com/Forever77/p/10049948.html