mysql存储业务日志_MySQL 日志管理
一、MySQL 日志
日志是mysql数据库的重要组成部分。日志文件中记录着mysql数据库运行期间发生的变化;也就是说用来记录mysql数据库的客户端连接状况、SQL语句的执行情况和错误信息等。当数据库遭到意外的损坏时,可以通过日志查看文件出错的原因,并且可以通过日志文件进行数据恢复。
MySQL 日志类型:
主要包含:错误日志、查询日志、慢查询日志、事务日志、二进制日志;
错误日志:
一般查询日志: DML, SELECT, 对于非常繁忙的数据库,会产生大量的日志信息
慢查询日志:执行时间很慢的查询操作,语句本身或者锁资源获取导致
二进制日志:DML, DDL, 任何可能引起数据库变化的操作,都会记录下来。
实现复制功能
实现即时点恢复中继日志:对于主从架构,从服务器上的日志
事务日志:ACID, 将随机ID转换为顺序ID
日志的启用、关闭是通过变量来控制的。但凡是跟文件相关操作的变量,都基本是静态的(不能通过 set 命令动态修改)。涉及到文件操作的,需要重启mysqld服务器才会生效。 而凡是要重启生效的,只能写到配置文件中。
错误日志:
在mysql数据库中,错误日志功能是默认开启的。并且,错误日志无法被禁止。默认情况下,错误日志存储在mysql数据库的数据目录(datadir)中。错误日志文件通常的名称为hostname.err。其中,hostname表示服务器主机名。
错误日志信息可以自己进行配置的,错误日志所记录的信息是可以通过log-error和log-warnings来定义的,其中log-err是定义是否启用错误日志的功能和错误日志的存储位置,log-warnings是定义是否将警告信息也定义至错误日志中。
默认情况下错误日志大概记录以下几个方面的信息:服务器启动和关闭过程中的信息(未必是错误信息,如mysql如何启动InnoDB的表空间文件的、如何初始化自己的存储引擎的等等)、服务器运行过程中的错误信息、事件调度器运行一个事件时产生的信息、在从服务器上启动服务器进程时产生的信息。
总结一下,错误日志中记录的信息包括:服务器启动和关闭过程中的信息
服务器运行过程中产生的错误信息
事件调度器(event)运行一个事件时产生的信息
在从服务器上如果启动了复制进程,复制进程的信息也会被记录
与错误日志相关的变量:log_error = { PATH }
指定错误日志文件存放位置并启动错误日志,默认保存在数据目录下,mysql用户必须对此目录有读写权限。 log_error 必须在配置文件中指定,并重启mysqld 服务器才会生效。log_warnings = {0 | 1}
默认开启,服务器运行过程中产生的警告信息也会记录在错误日志中。mysql> show global variables like '%log%';
+-----------------------------------------+-----------------------------+
| Variable_name | Value |
+-----------------------------------------+-----------------------------+
| back_log | 80 |
| binlog_cache_size | 32768 |
| binlog_checksum | CRC32 |
| binlog_direct_non_transactional_updates | OFF |
| binlog_format | STATEMENT |
| binlog_max_flush_queue_time | 0 |
| binlog_order_commits | ON |
| binlog_row_p_w_picpath | FULL |
| binlog_rows_query_log_events | OFF |
| binlog_stmt_cache_size | 32768 |
| expire_logs_days | 0 |
| general_log | OFF |
| general_log_file | /mydata/data/mysql.log |
| innodb_api_enable_binlog | OFF |
| innodb_flush_log_at_timeout | 1 |
| innodb_flush_log_at_trx_commit | 1 |
| innodb_locks_unsafe_for_binlog | OFF |
| innodb_log_buffer_size | 8388608 |
| innodb_log_compressed_pages | ON |
| innodb_log_file_size | 50331648 |
| innodb_log_files_in_group | 2 |
| innodb_log_group_home_dir | ./ |
| innodb_mirrored_log_groups | 1 |
| innodb_online_alter_log_max_size | 134217728 |
| innodb_undo_logs | 128 |
| log_bin | OFF |
| log_bin_basename | |
| log_bin_index | |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| log_error | /mydata/data/mysql.err | --定义错误日志
| log_output | FILE |
| log_queries_not_using_indexes | OFF |
| log_slave_updates | OFF |
| log_slow_admin_statements | OFF |
| log_slow_slave_statements | OFF |
| log_throttle_queries_not_using_indexes | 0 |
| log_warnings | 1 | --是否把警告信息写入错误日志
| max_binlog_cache_size | 18446744073709547520 |
| max_binlog_size | 1073741824 |
| max_binlog_stmt_cache_size | 18446744073709547520 |
| max_relay_log_size | 0 |
| relay_log | |
| relay_log_basename | |
| relay_log_index | |
| relay_log_info_file | relay-log.info |
| relay_log_info_repository | FILE |
| relay_log_purge | ON |
| relay_log_recovery | OFF |
| relay_log_space_limit | 0 |
| slow_query_log | ON |
| slow_query_log_file | /mydata/data/mysql-slow.log |
| sql_log_bin | ON |
| sql_log_off | OFF |
| sync_binlog | 0 |
| sync_relay_log | 10000 |
| sync_relay_log_info | 10000 |
+-----------------------------------------+-----------------------------+
57 rows in set (0.21 sec)
备份或删除错误日志:
在mysql5.5.7之前:数据库管理员可以删除很长时间之前的错误日志,以保证mysql服务器上的硬盘空间。mysql数据库中,可以使用mysqladmin命令开启新的错误日志。mysqladmin命令的语法如下:mysqladmin –u root –p flush-logs ; 也可以使用登录mysql数据库中使用 FLUSHLOGS 语句来开启新的错误日志。
在mysql5.5.7之后:服务器将关闭此项功能。只能使用重命名原来的错误日志文件,然后手动冲洗日志创建一个新的:方式如下:[root@mysql data]# mv mysql.err mysql.err.bak
[root@mysql data]# mysqladmin -u root -p flush-logs
Enter password:
[root@mysql data]# ls
auto.cnf ib_logfile0 mydb mysql.err mysql.pid performance_schema
ibdata1 ib_logfile1 mysql mysql.err.bak mysql-slow.log stu
一般查询日志:
默认情况下是关闭的,否则将产生大量IO。对除了慢查询日志的其他所有查询信息都记录下来,在并发操作大的环境下会产生大量的信息从而导致不必要的磁盘IO,这将对服务器产生极大的压力,会影响mysql的性能的。所以对于业务比较繁忙的服务器,强烈建议关闭该日志功能。
与一般查询日志相关的变量:general_log = { ON | OFF }
是否启用查询日志,默认是关闭的。如若启用此选项,其日志保存方式则由 log_output 选项进行定义,如果设定为NONE,即使启用了一般查询日志,也不会记录任何日志信息,作用范围为全局,可用于配置文件,属动态变量。
general_log_file = { PATH }
指定查询日志的位置。log_output = { TABLE | FILE | NONE }
指定一般查询日志的存储方式, 存储在表中或者文件中,或者同时指定二者。如果组合中出现了NONE,那么其它设定都将失效,同时,无论是否启用日志功能,也不会记录任何相关的日志信息
慢查询日志:
用来记录查询时间超过设定时长的查询语句,默认是关闭的。通过慢查询日志,可以查找出哪些查询语句的执行效率很低,以便进行优化。一般建议开启,它对服务器性能的影响微乎其微,但是可以记录mysql服务器上执行了很长时间的查询语句。可以帮助我们定位性能问题的。
慢查询的语句可能并非是语句执行的问题,也有可能是锁资源争用问题导致。
与慢查询相关的变量:long_query_time = N
定义时长,查询时间超过多少秒被认定为慢查询,默认为10秒。时间以秒为单位,可以精确到微秒。如果查询时间超过了这个时间值(默认为10秒),这个查询语句将被记录到慢查询日志中。其中这个慢查询时间并不是只表示语句自身执行超过10秒还包含由于其他资源被征用造成阻塞的查询执行时间或其他原因等都被记录到慢查询中。所以这个慢查的时长表示从查询开始到查询结束中间包含可能的任何原因所经历的所有时间。
log_query_not_using_indexes = {ON|OFF}
设定是否将没有使用索引的查询操作记录到慢查询日志log_output = {TABLE|FILE|NONE}
定义一般查询日志和慢查询日志的保存方式,可以是TABLE、FILE、NONE,也可以是TABLE及FILE的组合(用逗号隔开),默认为FILE。如果组合中出现了NONE,那么其它设定都将失效,同时,无论是否启用日志功能,也不会记录任何相关的日志信息slow_query_log = {ON | OFF}
是否开启慢查询日志,默认是关闭的slow_query_log_file = {PATH}
定义慢查询日志存放路径,默认在数据目录下。如果不指定存储路径,慢查询日志默认存储到mysql数据库的数据文件下,如果不指定文件名,默认文件名为hostname-slow.log。# vi /etc/my.cnf
slow-query-log = ON
long-query-time = 10
# service mysqld restart
# mysql -u root -p
mysql> show global variables like '%slow%';
+---------------------------+-----------------------------+
| Variable_name | Value |
+---------------------------+-----------------------------+
| log_slow_admin_statements | OFF |
| log_slow_slave_statements | OFF |
| slow_launch_time | 2 |
| slow_query_log | ON |
| slow_query_log_file | /mydata/data/mysql-slow.log |
+---------------------------+-----------------------------+
5 rows in set (0.00 sec)
mysql> show global variables like '%long%';
+--------------------------------------------------------+-----------+
| Variable_name | Value |
+--------------------------------------------------------+-----------+
| long_query_time | 10.000000 |
| performance_schema_events_stages_history_long_size | 10000 |
| performance_schema_events_statements_history_long_size | 10000 |
| performance_schema_events_waits_history_long_size | 10000 |
+--------------------------------------------------------+-----------+
4 rows in set (0.01 sec)
查看慢查询日志:
慢查询记录的格式为纯文本形式,所以可通过任何文本工具进行查看。如:vim, less, cat 等。
二进制日志
什么是binlog
binlog 日志用于记录所有更新了的数据或者潜在更新了的数据。语句以“事件”的形式保存,它描述了数据更改。
默认开启,DML, DDL 等等, 任何有可能引起数据库变化的操作,都会记录。 二进制日志文件的作用:提供了增量备份的功能
即时点恢复:提供了数据基于时间点的恢复,这个恢复的时间点可以由用户控制(重放)
master / slave 复制: 为mysql的复制架构提供基础,将这主服务器的二进制日志复制到从服务器上并执行同样的操作,就可将数据进行同步
二进制日志格式:
考虑下面三种情况CREATE DATABASE mydb;
UPDATE tb SET salaris = salaris + 500;
INSERT INTO tb(birthdate) VALUES( now() );
基于语句 statement : 默认的记录格式
基于行 row : 定义并非执行的SQL命令本身,而是表中的数据。
混合方式 mixed : 交替使用 row 和 statement , 具体由mysql服务器自行判断。
二进制日志事件:position 基于位置(开始结束日志)
datetime 基于时间(开始结束时间)
与二进制日志相关变量:
sql_log_bin = {ON|OFF}
#用于控制二进制日志信息是否记录进日志文件。默认为ON,表示启用记录功能。用户可以在会话级别修改此变量的值,但其必须具有SUPER权限
binlog_cache_size = 32768
#默认值32768
Binlog Cache 用于在打开了二进制日志(binlog)记录功能的环境,是 MySQL 用来提高binlog的记录效率而设计的一个用于短时间内临时缓存binlog数据的内存区域(先保存在内存缓存中,然后再通过某种机制持久化到硬盘)。一般来说,如果我们的数据库中没有什么大事务,写入也不是特别频繁,2MB~4MB是一个合适的选择。但是如果我们的数据库大事务较多,写入量比较大,可与适当调高binlog_cache_size。
binlog_stmt_cache_size = 32768
#当非事务语句使用二进制日志缓存,但是超出binlog_stmt_cache_size时,使用一个临时文件来存放这些语句.
binlog_cache_size 只是为事务缓存的大小而设置, binlog_stmt_cache_size 管理语句缓存的大小,发生事务时非事务语句的缓存的大小,这两个值是分别设置的
log_bin = {PATH} 如: log_bin = mysql-bin
#表示启用binlog功能,并指定binlog的位置,默认在数据目录下,形式为 filename.number, number 形式为: 000001, 000002 等。。
binlog-format = {ROW|STATEMENT|MIXED}
#指定二进制日志的类型,默认为 STATEMENT。如果设定了二进制日志的格式,却没有启用二进制日志,则MySQL启动时会产生警告日志信息并记录于错误日志中。 可用于配置文件,属于动态变量。
sync_binlog = 10
#设定多久同步一次二进制日志缓存至磁盘文件中,0表示不同步,任何正数值都表示对二进制每多少次写操作之后同步一次。当autocommit的值为1时,每条语句的执行都会引起二进制日志同步,否则,每个事务的提交会引起二进制日志同步
max_binlog_cache_size = {4096 .. 18446744073709547520}
#二进定日志缓存空间大小,5.5.9及以后的版本仅应用于事务缓存,其上限由max_binlog_stmt_cache_size决定。
max_binlog_stmt_cache_size = {4096 .. 18446744073709547520}
#二进定日志缓存空间大小,5.5.9及以后的版本仅应用于事务缓存
expire_log_days = {0..99}
#设定二进制日志的过期天数,超出此天数的二进制日志文件将被自动删除。默认为0,表示不启用过期自动删除功能。如果启用此功能,自动删除工作通常发生在MySQL启动时或FLUSH日志时,作用范围为全局,可用于配置文件,属动态变量。
日志缓存的大小,可以影响数据库性能以及数据安全性,所以其大小需要进行折中。
每次重启 mysqld 服务或运行 mysql> flush logs; 都会生成一个新的二进制日志文件,这些日志文件的number会不断地递增。除了生成上述的文件外还会生成一个名为filename.index的文件。这个文件中存储所有二进制日志文件的清单又称为二进制文件的索引。
二进制日志文件组成:二进制文件
二进制索引文件# cd /mydata/data/
#ls -lh
-rw-rw---- 1 mysql mysql 14K Aug 13 15:30 mysql-bin.000001
-rw-rw---- 1 mysql mysql 150 Aug 13 17:05 mysql-bin.000002
-rw-rw---- 1 mysql mysql 150 Aug 13 17:06 mysql-bin.000003
-rw-rw---- 1 mysql mysql 150 Aug 13 17:07 mysql-bin.000004
-rw-rw---- 1 mysql mysql 150 Aug 13 17:39 mysql-bin.000005
-rw-rw---- 1 mysql mysql 126 Aug 13 19:03 mysql-bin.000006
-rw-rw---- 1 mysql mysql 126 Aug 13 19:03 mysql-bin.000007
-rw-rw---- 1 mysql mysql 126 Aug 13 19:05 mysql-bin.000008
-rw-rw---- 1 mysql mysql 107 Aug 13 19:05 mysql-bin.000009
-rw-rw---- 1 mysql mysql 353 Oct 7 23:40 mysql-bin.000010
-rw-rw---- 1 mysql mysql 190 Oct 7 20:43 mysql-bin.index
#cat mysql-bin.index
./mysql-bin.000001
./mysql-bin.000002
./mysql-bin.000003
./mysql-bin.000004
./mysql-bin.000005
./mysql-bin.000006
./mysql-bin.000007
./mysql-bin.000008
./mysql-bin.000009
./mysql-bin.000010
二进制日志的查看与删除方式:mysql> show binary logs; --显示当前服务器使用的二进制文件及大小
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001| 13814 |
| mysql-bin.000002| 150 |
| mysql-bin.000003| 150 |
| mysql-bin.000004| 150 |
| mysql-bin.000005| 150 |
| mysql-bin.000006| 126 |
| mysql-bin.000007| 126 |
| mysql-bin.000008| 126 |
| mysql-bin.000009| 107 |
| mysql-bin.000010| 353 |
+------------------+-----------+
10 rows in set (0.07sec)
mysql> show master logs; --显示主服务器使用的二进制文件及大小
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001| 13814 |
| mysql-bin.000002| 150 |
| mysql-bin.000003| 150 |
| mysql-bin.000004| 150 |
| mysql-bin.000005| 150 |
| mysql-bin.000006| 126 |
| mysql-bin.000007| 126 |
| mysql-bin.000008| 126 |
| mysql-bin.000009| 107 |
| mysql-bin.000010| 353 |
+------------------+-----------+
10 rows in set (0.02sec)
mysql> show master status; --当前使用的二进制文件及所处位置
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB |Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000010| 353 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00sec)
--查看二进制日志记录的事件[from position]
--SHOW BINLOG EVENTS [IN 'bin_log_name'] [FROM pos] [LIMIT [offset,] row_count]
mysql> show binlog events in 'mysql-bin.000001';
+------------------+-----+-------------+-----------+-------------+----------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+-------------+-----------+-------------+----------------------------------------------------+
| mysql-bin.000001 | 4 | Format_desc | 1 | 120 | Server ver: 5.6.16-log, Binlog ver: 4 |
| mysql-bin.000001 | 120 | Query | 1 | 199 | BEGIN |
| mysql-bin.000001 | 199 | Intvar | 1 | 231 | INSERT_ID=2 |
| mysql-bin.000001 | 231 | Query | 1 | 343 | use `mydb`; insert into mytbl2(num) VALUES(324.23) |
| mysql-bin.000001 | 343 | Xid | 1 | 374 | COMMIT /* xid=20 */ |
+------------------+-----+-------------+-----------+-------------+----------------------------------------------------+
5 rows in set (0.00 sec)
--从指定的事件位置查看
mysql> mysql> SHOW BINLOG EVENTS in 'mysql-bin.000001' FROM 199;
+------------------+-----+------------+-----------+-------------+----------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+------------+-----------+-------------+----------------------------------------------------+
| mysql-bin.000001 | 199 | Intvar | 1 | 231 | INSERT_ID=2 |
| mysql-bin.000001 | 231 | Query | 1 | 343 | use `mydb`; insert into mytbl2(num) VALUES(324.23) |
| mysql-bin.000001 | 343 | Xid | 1 | 374 | COMMIT /* xid=20 */ |
+------------------+-----+------------+-----------+-------------+----------------------------------------------------+
3 rows in set (0.00 sec)
--指定偏移量(不是语句,是事件)
mysql> mysql> SHOW BINLOG EVENTS in 'mysql-bin.000001' FROM 199 LIMIT 2;
+------------------+-----+------------+-----------+-------------+----------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+------------+-----------+-------------+----------------------------------------------------+
| mysql-bin.000001 | 199 | Intvar | 1 | 231 | INSERT_ID=2 |
| mysql-bin.000001 | 231 | Query | 1 | 343 | use `mydb`; insert into mytbl2(num) VALUES(324.23) |
+------------------+-----+------------+-----------+-------------+----------------------------------------------------+
2 rows in set (0.00 sec)
二进制日志事件:
server-id: 记录是哪个服务器产生的信息
End log pos:在哪个位置(position)
Event_type:事件类型(读,写,提交等)
server-id:服务器的身份标识,主要作用了为了避免记录本身的二进制日志,在双主模式下的MySQL服务器中,如果没有server-id标识,服务器A获取了服务器B的二进制日志,并记录在自己的二进制日志文件中,同时保存一分在中继日志中,并且通过中继日志,写回数据文件,这时候A的数据发生了改变,B侦测到了,就会获取A的二进制日志,但是看到A的二进制日志文件的server-id就是自己的,那么,B主机就不会获取这份二进制日志了.所以在同一个架构中的复制模型中,每台服务器的server-id都必须不一样。
文件系统中查看二进制日志:
由于是二进制格式,不能简单的通过文件编辑器打开查看。为此, 提供了专门的工具: mysqlbinlogmysqlbinlog
相关选项,
--start-position #开始位置
--stop-position #结束位置
[root@mysql data]# mysqlbinlog mysql-bin.000006 --start-position=671 --stop-position=798
--start-datetime 'yyyy-mm-dd hh:mm:ss'; #开始时间
--stop-datetime 'yyyy-mm-dd hh:mm:ss'; #结束时间
[root@mysql data]# mysqlbinlog mysql-bin.000006 --start-datetime='2015-08-29 21:45:35'
通常,我们使用 mysqlbinlog 命令把二进制文件导出到 sql 文件中, 然后在另一台mysql服务器上进行重放,以完成还原操作。[root@mysql data]# mysqlbinlog mysql-bin.000006 --start-datetime='2015-08-29 21:45:35' > a.sql
对某个类型的日志文件滚动一次就生成一个新的相对应的日志文件,通过这种方法保证日志文件的特定大小,从而保证服务器在对日志文件查询时有较高的响应能力。
只有二进制日志才会滚动,当然,中继日志也是。
mysql>flush logs; --二进制日志滚动
删除二进制日志信息:
二进制日志会记录大量的信息(其中包含一些无用的信息)。如果很长时间不清理二进制日志,将会浪费很多的磁盘空间。但是,删除之后可能导致数据库崩溃时无法进行恢复,所以若要删除二进制日志首先将其和数据库备份一份,其中也只能删除备份前的二进制日志,新产生的日志信息不可删(可以做即时点还原)。也不可在关闭mysql服务器之后直接删除因为这样可能会给数据库带来错误的。若非要删除二进制日志需要做如下操作:导出备份数据库和二进制日志文件进行压缩归档存储。
注意: 最好不要使用 rm 命令去删除二进制日志。
删除二进制文件的方法如下:
1、删除所有的二进制日志(此动作非常危险):
使用RESET MASTER语句可以删除所有的二进制日志。该语句的形式如下:mysql> reset master;
Query OK, 0 rows affected (0.09 sec)
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 120 |
+------------------+-----------+
1 row in set (0.00 sec)
删除所有的二进制日志后,Mysql将会重新创建新的二进制日志。新二进制日志的编号从000001开始。
2、根据文件或时间点来删除二进制日志:
语法形式:mysql> PURGE { BINARY | MASTER } LOGS {TO 'log_name' | BEFORE datetime_expr }
其中TO 'log_name'表示把这个文件之前的其他文件都删除掉,也可使用BEFORE datetime_expr指定把哪个时间之前的二进制文件删除了。mysql> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 120 |
+------------------+-----------+
1 row in set (0.00 sec)
mysql> flush logs;
Query OK, 0 rows affected (0.02 sec)
mysql> flush logs;
Query OK, 0 rows affected (0.06 sec)
mysql> flush logs;
Query OK, 0 rows affected (0.05 sec)
mysql> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000001 | 167 |
| mysql-bin.000002 | 167 |
| mysql-bin.000003 | 167 |
| mysql-bin.000004 | 120 |
+------------------+-----------+
4 rows in set (0.00 sec)
mysql> PURGE BINARY LOGS TO 'mysql-bin.000002'; -- 第一种方式
Query OK, 0 rows affected (0.01 sec)
mysql> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000002 | 167 |
| mysql-bin.000003 | 167 |
| mysql-bin.000004 | 120 |
+------------------+-----------+
3 rows in set (0.00 sec)
mysql> PURGE BINARY LOGS BEFORE '2015-08-26 10:40:00'; --使用时间来删除二进制日志
Query OK, 0 rows affected (0.05 sec)
注:一般建议将binlog日志与数据文件分开存放,不要放在同一块磁盘上,不但可以提高mysql性能,还可以增加安全性!
中继日志
说明:主要是在mysql服务器的中从架构中的从服务器上用到的,当从服务器想要和主服务器进行数据的同步时,从服务器将主服务器的二进制日志文件拷贝到己的主机上放在中继日志中,然后调用SQL线程按照拷中继日志文件中的二进制日志文件执行以便就可达到数据的同步
从主服务器的二进制日志文件中复制而来的事件信息,并保存为的日志信息。
开启的方法:(只在从服务器上开启)
relay-log = file_name
#指定中继日志的位置和名字,默认为host_name-relay-bin。也可以使用绝对路径,以指定非数据目录来存储中继日志
relay-log-index = file_name
#指定中继日志的名字的索引文件的位置和名字,默认为数据目录中的host_name-relay-bin.index
relay-log-info-file = file_name
#设定中继服务用于记录中继信息的文件,默认为数据目录中的relay-log.info
relay_log_purge = {ON|OFF}
#设定对不再需要的中继日志是否自动进行清理。默认值为ON
relay_log_space_limit =0
#设定用于存储所有中继日志文件的可用空间大小。默认为0,表示不限定。最大值取决于系统平台位数
max_relay_log_size = {4096..1073741824}
#设定从服务器上中继日志的体积上限,到达此限度时其会自动进行中继日志滚动。此参数值为0时,mysqld将使用max_binlog_size参数同时为二进制日志和中继日志设定日志文件体积上限
主从架构:
如果主服务器同时并发量非常大,有多个线程会往 bin_log 文件进行写操作,所以可能出现IO瓶颈。
而从服务器会读取 bin_log , 如果从服务器非常多,同样对于存放 bin_log 的磁盘 IO 是个挑战。
从服务器首先复制主服务器的二进制文件,然后到本机进行重放,所以从服务器数据不是实时同步。
事务日志
说明:详细的记录了在什么时间发生了什么时候,在哪个时间对哪些数据进行了改变,能后实现事件的重放,一般只记录对数据进行改变的操作,对于读操作一般不进行记录。
使用事务日志,存储引擎在修改表的数据时只需要修改其内存拷贝,再把修改行为记录到持久在硬盘上的事务日志中,而不用每次都将修改的数据本身持久到磁盘。事务日志采用追加的方式,因此写日志的操作是磁盘上一小块区域内的顺序I/O,而不像随机I/O需要在磁盘的多个地方移动磁头,所以采用事务日志的方式相对来说要快得多。
事务日志持久以后,内存中被修改的数据在后台可以慢慢的刷回到磁盘。目前大多数的存储引擎都是这样实现的,我们通常称之为预写式日志,修改数据需要写两次磁盘。
如果数据的修改已经记录到事务日志并持久化,但数据本身还没有写回磁盘,此时系统崩溃,存储引擎在重启时能够自动恢复这部分修改的数据。具有的恢复方式则视存储引擎而定。
事务日志为数据库服务器实现以下功能: (1).将随机IO转换为顺序IO,大大的提高了数据库的性能,存储的数据可能存在在磁盘的不同位置,降低了数据的读取和操作性能。转换为顺序IO的原理为,先将数据存放在日志文件中,然后由RDBSM的后台将日志中的数据存放到磁盘上,这样就保证了存储的数据是连续的。 (2).为事件重放提供基础,事务日志详细的记录了时间发生的时间以及操作的数据对象,事务进程可以根据这些信息进行时间重放。 默认的事务日志文件有两个,位于数据目录下以ibdata+number结尾的数字,我们可以对事务日志的位置、文件大小、增长方式进行定义,定义的方法如下: 这里以使用支持事务的Innodb存储引擎为例,
innodb_data_home_dir =/mydata/data
#InnoDB所有共享表空间数据文件的目录路径,默认在数据目录下
innodb_data_file_path = ibdata1:1024M
#指定InnoDB的各个数据文件及其大小,文件多于一个时彼此间用分号隔开
innodb_data_file_path = ibdata2:50M:autoextend
#定义数据大小的增长方式
innodb_log_group_home_dir =/mydata/data
#设定InnoDB重要日志文件的存储目录。在缺省使用InnoDB日志相关的所有变量时,其默认会在数据目录中创建两个大小为5MB的名为ib_logfile0和ib_logfile1的日志文件
innodb_log_files_in_group = {2 .. 100}
#设定日志组中日志文件的个数。InnoDB以循环的方式使用这些日志文件。默认值为2
innodb_log_file_size = {108576 .. 4294967295}
#设定日志组中每个日志文件的大小,单位是字节,默认值是5MB。较为明智的取值范围是从1MB到缓存池体积的1/n,其中n表示日志组中日志文件的个数。日志文件越大,在缓存池中需要执行的检查点刷写操作就越少,这意味着所需的I/O操作也就越少,然而这也会导致较慢的故障恢复速度
innodb_log_buffer_size = {262144 .. 4294967295}
#设定InnoDB用于辅助完成日志文件写操作的日志缓冲区大小,单位是字节,默认为8MB。较大的事务可以借助于更大的日志缓冲区来避免在事务完成之前将日志缓冲区的数据写入日志文件,以减少I/O操作进而提升系统性能。因此,在有着较大事务的应用场景中,建议为此变量设定一个更大的值mysql> SHOWGLOBAL VARIABLES LIKE '%log%';
+-----------------------------------------+-----------------------------------+
| Variable_name | Value |
+-----------------------------------------+-----------------------------------+
| innodb_flush_log_at_trx_commit | 1 | -- 在事务提交时innodb是否同步日志从缓冲到文件中:1表示事务以一提交就同步不提交每隔一秒同步一次,性能会很差造成大量的磁盘I/O;定义为2表示只有在事务提交时才会同步但是可能会丢失整个事务
|innodb_locks_unsafe_for_binlog |OFF |
| innodb_log_buffer_size | 8388608 |
|innodb_log_file_size |5242880 |
| innodb_log_files_in_group | 2 | --至少有两个
|innodb_log_group_home_dir |./ | --定义innodb事务日志组的位置
|innodb_mirrored_log_groups |1 | --表示对日志组做镜像
每个事务日志都是大小为5兆的文件:
#ls -lh
-rw-rw---- 1 mysqlmysql 5.0M Oct 7 23:36 ib_logfile0
-rw-rw---- 1 mysqlmysql 5.0M Aug 12 01:06 ib_logfile1
mysql存储业务日志_MySQL 日志管理相关推荐
- mysql web日志_mysql日志管理
mysql日志管理 mysql的日志分为如下几类: 1.错误日志 1.1记录服务器启动和关闭过程中的信息 1.2记录服务器运行过程中的错误信息. 1.3记录事件调度器运行一个事件时产生的信息. 1.4 ...
- mysql教程日志_mysql日志文件的详细说明
mysql日志文件是我们比较熟悉的,下面就对mysql日志文件进行了详细的说明介绍,如果您对mysql日志文件方面感兴趣的话,不妨一看. 1.错误日志 Error Log 错误日志记录了mysql s ...
- mysql教程日志_MySQL日志
参考资料: 数据库中用于存储数据的文件称为data file,日志文件称为log file.此外,如果每次读写都是直接访问磁盘,性能很差,所以数据库是有缓存的,数据缓存是data buffer,日志缓 ...
- 阿里云 mysql 日志_MySQL日志简介-阿里云开发者社区
MySQL中的日志主要分为以下几种: 查询日志 慢查询日志 错误日志 二进制日志 中继日志 事务日志 说明: 支持本文实验使用的linux系统是CentOS7版本,使用的数据库是base源自带的Mar ...
- mysql 客户端连接日志_MySQL 日志详解
一.MySQL 日志分类 MySQL 日志主要包含:错误日志.查询日志.慢查询日志.事务日志.二进制日志. 错误日志: -log-err (记录启动.运行.停止 MySQL 服务时出现的信息) 查询日 ...
- 阿里云mysql 日志_mysql日志-阿里云开发者社区
mysql日志 mysql有以下几种日志: 错误日志: log-error 查询日志: log 慢查询日志: log-slow-queries 更新日志: log-update 二进制日志: log- ...
- mysql .err 怎么查看_MySQL日志设置及查看方法
MySQL有以下几种日志: 错误日志: -log-err 查询日志: -log 慢查询日志: -log-slow-queries 更新日志: -log-update 二进制日志: -log-bin 默 ...
- phpstudy mysql日志_mysql日志设置及查看
MySQL有以下几种日志: 错误日志: -log-err 查询日志: -log 慢查询日志: -log-slow-queries 更新日志: -log-update 二进制日志: -log-bin 默 ...
- mysql 存储引擎作用_MySQL常用存储引擎功能与用法详解
MySQL存储引擎主要有两大类: 1. 事务安全表:InnoDB.BDB. 2. 非事务安全表:MyISAM.MEMORY.MERGE.EXAMPLE.NDB Cluster.ARCHIVE.CSV. ...
最新文章
- Chisel3 - Tutorial - VendingMachine
- 计算机软考高级论文,【2019年软考高项论文一定要避开这些坑】- 环球网校
- 「BZOJ 2152」聪聪可可
- 蒙提霍尔悖论(三门问题)终极分析(补充)附完整源码
- linux 4.1.16 ftrace 进程调度,Linux内核进程调度overview(1)
- ZigBee与智慧家居-ZigBee方案
- JS_15作用域与作用域链
- springboot static方法与构造方法加载@VALUE
- 一位挪威博士的PolarDB资深架构师之路
- Qt视频直播软件--项目实战(Day3)
- Linux(ubuntu18.04)安装eclipse教程
- 计算机游戏测试软件,你的电脑能不能吃鸡,两款软件很简单就能测试出来
- 使用R语言进行一元回归
- 空降如何快速融入接管团队
- ibeacon UWB GPS 空间四点定位算法
- pandas常用操作
- Spark 第三讲 Scala数组与函数基础
- IMX6ULL设备上面调试SDIOwifi。
- python编程8g的内存够么_内存8G够用吗?深入解读~
- “在 TCP 网络上检测出有重复名称”错误的解决方法
热门文章
- Android视频录制-MediaRecorder流程
- ASoC Machine驱动代码框架图
- ‘Microsoft Office Enterprise 2007 在安装过程中出错‘ 的解决方法
- Android/Java面试题,边面试边成长,为了应试而应试
- android 5.1禁止休眠
- wpf之StackPanel布局
- 深度学习自学(二十四):华为Atlas人工智能计算平台
- 总觉得学习效率低,看了这篇瞬间清醒了!
- mysql navicat 多语句_使用Navicat多对多关系SQL语句在MySQL中实现
- window10进入“服务”的三种方式