多语言展示
当前在线:855今日阅读:117今日分享:28

windows如何修改MySQL日志文件的位置

程序员在实际工作的开发过程中, 经常需要使用mysql数据库, 而熟练掌握mysql的使用最好的方法就是自己在电脑上面安装一个mysql server(记住是server, 不是client), 安装了mysql server以后, 可以不安装任何mysql client, 通过win自带的cmd命令行窗口来使用mysql, 在使用mysql的过程中, 运营维护人员或者说想深入了解windows版本mysql源代码的时候, MySQL日志文件就显得非常重要, 本文分享windows下如何修改MySQL日志文件的位置, 以及查看配置等等。
工具/原料
1

电脑一台(安装win操作系统)

2

mysql5.7(最新的版本)安装包及源码包

方法/步骤
2

下载mysql5.7 server版本下来以后, 下一步下一步就可以安装好, 基本上选择默认安装就可以, 安装好了的mysql如下图所示:

3

安装好mysql server以后, 在win10上如何查看该server是否启动运行呢?   查看mysql是否启动的方法是有很多的, 可以使用连接是否成功来查看。   也可以通过win10提供的服务管理程序来查看,    还有通过cmd命令行来查看,   下面就针对每种方法依次说明!

4

win下查看mysql server是否启动的第一类方法:   登录连接法可以使用cmd窗口输入命令去登录mysql,               登录成功则启动否则没启动或者故障。    直接输入'mysql -u root -p'并输入密码, 提示登录成功则表明服务已启动。或者使用mysql client连接mysql server能连接上, 就表明服务已启动。   mysql client有很多(Navicat, MySQL Workbench, SQLyog等等)。这里分别举例一个, 如下面图1和图2所示:

5

win下查看mysql server是否启动的第二类方法:   win服务管理器查看状态'win(徽键)+R'--->'输入M'模糊搜索--->'MySQL57', 查看状态为什么?或者选中服务, 右键属性, 查看'服务状态', '正在运行'就表明服务已经启动,具体如下图所示:

6

win下查看mysql server是否启动的第二类方法:  cmd命令检查mysql默认端口 在cmd命令行里面输入:        netstat -an|find '3306', 如果有这个说明开启了。顺便说一下linux上面的命令是:        service mysqld status查看是否启动, 或者netstat -tlunp|grep 3306win下面输入netstat命令有信息就表明服务启动了, 具体如下图:

7

在确定mysql server启动了, 正在运行中以后, 就可以通过cmd命令方式登录到mysql服务器了, 到这里, 就思考了一个问题, 我们是否可以通过命令行控制mysql server的启动和停止呢, 于是尝试在命令行窗口中输入命令'net stop mysql', 出现了以下错误信息, 如下图所示:

8

出现的信息是:  'net start mysql; 服务名无效。 请键入 NET HELPMSG 2185 以获得更多的帮助)',    既然命令无法启动停止mysql服务, 我们可以图形界面下启动/停止mysql服务, 也就是services.msc启动服务后, 通过右键菜单来控制服务的启动与停止, 如下图1所示。   不过我们期望解决上面出现的问题, 这个问题是这么解决的:   windows+r, 打开运行, 输入services.msc, 找到mysql服务,   右键属性, 发现服务器名称是MySQL57, 如下图所示:

9

这里大家需要学会通过命令行输出日志信息找出命令失败的原因, 输出信息表示服务名无效, 也就是说mysql无效, 确实无效吗, 因为服务名称MySQL57,下面就重新使用命令行方式来启动停止mysql, 但是错误又来了, 是否感到心累^_^, hahah, 别灰心, 解决问题也是一种快乐嘛, '命令行启动mysql提示发生系统错误5', 这个问题如下图所示:

10

这里分享''net start/stop mysql'启动MySQL服务报错,提示发生系统错误5解决方法', 就是一个权限的问题而已, 在win10下只要在开始菜单右键, 弹出的菜单中选择'Win... PowSheell... (管理员)', 这种方式来启动cmd窗口, 提示权限就可以, 其它win系统可能要考虑'单次解决办法'和'永久解决办法', 单次就是右击属性, 选择'以管理员身份运行'启动cmd窗口, 永久就是创建'cmd.exe'快捷方式, 右击选'属性', 选择快捷方式',再选择'高级',再选择'以管理员身份运行', 再单击'确定', 具体如下图所示

11

在新的权限为管理员身份的窗口中输入以下命令:net start mysql57net stop mysql57    发现可以通过命令方式启停mysql服务了,    具体如下图所示:

12

命令行启动mysql以后, 在cmd窗口中输入'mysql -u root -p', 成功登陆到mysql服务器, 如下图所示,

13

接下来我们来重点探讨一下mysql的日志相关的问题了!!!  windows如何修改MySQL日志文件的位置???  在软件开发设计的时候, 一定会为这款软件设计日志系统, 一则方便调试, 一则便于日后的运营维护。  mysql也有自己的日志系统的!  那么win下怎么查看mysql的各种日志呢?  mysql日志默认是否开启?  就以上问题, 我们先来学习下mysql日志相关的知识:  MYSQL有多种不同类型的日志文件(各自存储了不同类型的日志), 从它们当中可以查询到MYSQL里都做了些什么, 对于MYSQL的管理工作, 这些日志文件是不可缺少的。  splunk内置了两大类mysql的日志, 分别是mysqld以及mysql_error:       mysqld_error:     Standard mysql error log(标准的mysql错误日志)       mysqld:               标准的mysql查询日志, 也能匹配Mysql二进制日志  mysql可以细分为以下几种日志:      (1).通常日志      (2).查询缓慢日志(-log-slow-queries):  记录建立的客户端连接和执行的语句。My.ini配置信息:#Enter a name for the query log file. Otherwise a default name will be used.#log=d:/mysql_log.txt      (3).错误日志(-log-err): 记录了数据库启动、运行以及停止过程中错误信息;My.ini配置信息:#Enter a name for the error log file.                Otherwise a default name will be used.#log-error=d:/mysql_log_err.txt      (4).ISAM操作日志: 记录了所有对ISAM表的修改, 该日志仅仅用于调试ISAM模式;      (5).SQL执行日志:  记录了客户端的连接以及所执行的SQL语句;      (6).更新日志(-log-update): 记录了改变数据的语句,已经不建议使用,由二进制日志替代;My.ini配置信息:#Enter a name for the update log file. Otherwise a default name will be used.#log-update=d:/mysql_log_update.txt      (7).二进制日志(-log-bin):   记录了所有对数据库数据的修改语句;                                 记录所有更改数据的语句。还用于复制。My.ini配置信息:#Enter a name for the binary log. Otherwise a default name will be used.#log-bin=d:/mysql_log_bin      (8).超时日志:  记录所有执行时间超过最大SQL执行时间(long_query_time)或未使用索引的语句;      (9).慢日志):     记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询。My.ini配置信息:#Enter a name for the slow query log file. Otherwise a default name will be used.#long_query_time =1#log-slow-queries= d:/mysql_log_slow.txt     (10).查询日志(-log):如果你是在用mysql的复制、备份功能,          那么从服务器还提供了一种叫做relay log的日志文件。默认情况下所有日志文件会记录在MYSQL的数据目录下,          你可以通过强制mysql去关闭并重新打开一个文件进行日志记录,         当然系统会自动加后缀(如.00001, .00002),方式有在mysql环境下执行语句 mysql>flush logs;        或者通过mysqladmin管理程序执行               #mysqladmin flush-logs 或 #mysqladmin refresh这些日志的启动方式可以在mysqld_safe方式启动数据库的时候,          后面跟选项参数, 也可以在配置文件里配置,          推荐采用第二种方式, 配置方法很简单!默认只有错误日志是开启的!通常日志如果开启会消耗大量系统资源, 而且查看也是非常不容易。如果想看哪里出错的话, 查询错误日志就可以。错误日志通常会在data文件夹下面, 服务器名称.err就是日志。

14

由于日志对于mysql非常重要, 我们在这里继续学习下:  Mysql日志解析?  需要认证去阅读每种日志中的信息!!!  默认情况下, 所有日志创建于mysqld数据目录中。   通过刷新日志, 你可以强制mysqld来关闭和重新打开日志文件(或者在某些情况下切换到一个新的日志)。  当你执行一个FLUSH LOGS语句或执行mysqladmin flush-logs或mysqladmin refresh时, 出现日志刷新。错误日志     a.用--log-error[=file_name]选项来指定mysqld                       保存错误日志文件的位置。     b.如果没有给定file_name值, mysqld使用错误日志名                        host_name.err并在数据目录中写入日志文件。     c.如果你执行FLUSH LOGS, 错误日志用-old重新命名后缀并且mysqld创建一个新的空日志文件。     d.如果未给出--log-error选项,则不会重新命名     e.如果不指定--log-error, 或者(在Windows中)如果你使用--console选项,错误被写入标准错误输出stderr, 通常标准输出为你的终端。通用查询日志      a.用--log[=file_name]或-l [file_name]选项启动它。      b.如果没有给定file_name的值,默认名是host_name.log。慢速查询日志      用--log-slow-queries[=file_name]选项启动时,mysqld 写一个包含所有执行时间超过long_query_time秒的SQL语句的日志文件.如果没有给出file_name值,默认未主机名,后缀为 -slow.log。如果给出了文件名,但不是绝对路径名,文件则写入数据目录。更新日志用--log-update[=file_name]选项启动,不推荐使用.MySQL日志:    主要包含:        错误日志、查询日志、慢查询日志、事务日志、二进制日志;日志是mysql数据库的重要组成部分。日志文件中记录着mysql数据库运行期间发生的变化;也就是说用来记录mysql数据库的客户端连接状况、          SQL语句的执行情况和错误信息等。当数据库遭到意外的损坏时,可以通过日志查看文件出错的原因,           并且可以通过日志文件进行数据恢复。错误日志    在mysql数据库中,错误日志功能是默认开启的。    并且,错误日志无法被禁止。     默认情况下,错误日志存储在mysql数据库的数据文件中。     错误日志文件通常的名称为hostname.err。                     其中,hostname表示服务器主机名。     错误日志信息可以自己进行配置的,     错误日志所记录的信息是可以通过log-error和log-warnings来定义的,     其中log-err是定义是否启用错误日志的功能和错误日志的存储位置,                    log-warnings是定义是否将警告信息也定义至错误日志中。     默认情况下错误日志大概记录以下几个方面的信息:             服务器启动和关闭过程中的信息(未必是错误信息,                  如mysql如何启动InnoDB的表空间文件的、                      如何初始化自己的存储引擎的等等)、      服务器运行过程中的错误信息、       事件调度器运行一个事件时产生的信息、              在从服务器上启动服务器进程时产生的信息。

15

一般而言, 日志级别的定义没有回话变量都只是在全局级别下进行定义。    执行命令: mysql> SHOW  GLOBAL VARIABLES LIKE '%log%';    其中,log_error可以直接定义为文件路径,也可以为ON|OFF;             log_warings只能使用1|0来定义开关启动。    如下图所示:

16

这里来学习下怎么'寻找Windows下MySQL的错误日志'?   MySQL的错误日志记录了MySQL服务器启动、关闭和运行时出错等信息。默认名称为host_name.err,保存在MySQL实例指定的data目录下。但在MySQL的安装目录下的data目录并没有此文件。   执行命令:      show variables like '%error%'   发现是相对路径, 无法查看错误日志的路径,不能定位此文件在哪个目录下。   MySQL以服务方式启动, 可以查看服务启动参数,服务的配置文件路径为'C:\ProgramData\MySQL\MySQL Server 5.7\my.ini'.   打开此ini文件发现:datadir=C:/ProgramData/MySQL/MySQL Server 5.6/Data    打开此目录,终于发现了错误日志文件。    如下图所示:

17

如果执行命令:      show variables like '%error%', 得到的是一个绝对路径, 这就很容易确定了错误日志文件的路径在C盘了, 但是这是怎么产生的呢?     这个就涉及到ini文件的配置问题了, 后面再分析,下面是绝对路径信息图:

18

更改错误日志位置可以使用log_error来设置形式如下:[mysqld]Log_error=DIR/[filename]    其中,DIR参数指定错误日志的路径filename参数是错误日志的名称,没有指定该参数时默认为主机名。   重启mysql服务器即可生效。查看mysql错误日志如下图1;删除错误日志:      (1).在mysql5.5.7之前:数据库管理员可以删除很长时间之前的错误日志,           以保证mysql服务器上的硬盘空间。mysql数据库中, 可以使用 mysqladmin命令开启新的错误日志。           mysqladmin命令的语法如下:mysqladmin –u root –pflush-logs         也可以使用登录mysql数据库中使用FLUSHLOGS语句                  来开启新的错误日志。     (2).在mysql5.5.7之后:             服务器将关闭此项功能。             只能使用重命名原来的错误日志文件,手动冲洗日志(mysqladmin flush-logs)创建一个新的!

19

查询日志?  默认情况下查询日志是关闭的。  由于查询日志会记录用户的所有操作,            其中还包含增删查改等信息,在并发操作大的环境下会产生大量的信息从而导致不必要的磁盘IO,            会影响mysql的性能的。如若不是为了调试数据库的目的建议不要开启查询日志。查看查询日志是否开启?执行命令:      SHOW  GLOBAL VARIABLES LIKE '%log%';如下图:

20

日志的输出位置一般有三种方式:     file(文件),table(表),none(不保存);    其中前两个输出位置可以同时定义,           none表 示是开启日志功能但是记录日志信息。file就是通过general_log_file |/mydata/data/stu18.log 等方式定义的,      而输出位置定义为表时查看日志的内容方式为:

21

慢查询日志?慢查询日志是用来记录执行时间超过指定时间的查询语句。通过慢查询日志, 可以查找出哪些查询语句的执行效率很低, 以便进行优化。一般建议开启, 它对服务器性能的影响微乎其微,               但是可以记录mysql服务器上执行了很长时间的查询语句。可以帮助我们定位性能问题的。查看慢查询日志的定义:mysql> SHOW  GLOBAL VARIABLES LIKE '%log%'; |  slow_query_log         | OFF    #定义慢查询日志的 |  slow_query_log_file    |/mydata/data/stu18-slow.log                     #输出方式为file(文件)时定义慢查询日志的位置启动和设置慢查询日志方式1, 通过配置文件ini来配置:slow-query-log=1#slow_query_log_file_bak='DESKTOP-FDT29B1-slow.log'slow_query_log_file='DESKTOP-FDT29B1-slow.log'long_query_time=10其中,DIR参数指定慢查询日志的存储路径;filename参数指定日志的文件名,生成日志文件的完成名称为filename- slow.log。如果不指定存储路径,慢查询日志默认存储到mysql数据库的数据文件下,如果不指定文件名,默认文件名为hostname- slow.log。

22

启动和设置慢查询日志方式2, 通过登录mysql服务器直接定义,方式如下:    首先要有全局权限;然后执行mysql>set global slow_query_log=1;   时间默认超过多少的称为慢查询日志?一般都是通过long_query_time选项来设置这个时间值,时间以秒为单位,可以精确到微秒。如果查询时间超过了这个时间值(默认为10秒),这个查询语句将被记录到慢查询日志中。查看服务器默认时间值方式如下:mysql> SHOW  GLOBAL VARIABLES LIKE 'long%';   其中这个慢查询时间并不是只表示语句自身执行超过10秒还包含由于其他资源被征用造成阻塞的查询执行时间或其他原因等都被记录到慢查询中。所以这个慢查的时长表示从查询开始到查询结束中间包含可能的任何原因所经历的所有时间。

23

测试是否可以记录日志如下图:

24

事务日志?事务日志(InnoDB特有的日志)可以帮助提高事务的效率。使用事务日志, 存储引擎在修改表的数据时只需要修改其内存拷贝,          再把改修改行为记录到持久在硬盘上的事务日志中,         而不用每次都将修改的数据本身持久到磁盘。事务日志采用追加的方式, 因此写日志的操作是          磁盘上一小块区域内的顺序I/O, 而不像随机I/O需要          在磁盘的多个地方移动磁头,          所以采用事务日志的方式相对来说要快得多。事务日志持久以后, 内存中被修改的数据在后台可以慢慢的刷回到磁盘。目前大多数的存储引擎都是这样实现的, 我们通常称之为预写式日志,                修改数据需要写两次磁盘。如果数据的修改已经记录到事务日志并持久化, 但数据本身还没有写回磁盘,                此时系统崩溃,                存储引擎在重启时能够自动恢复这部分修改的数据。具有的恢复方式则视存储引擎而定。查看事务日志的定义:         mysql> SHOW GLOBAL VARIABLES LIKE '%log%';每个事务日志都是以ib开头的一定大小的文件!

25

二进制日志?二进制日志也叫作变更日志, 主要用于记录修改数据或有可能引起           数据改变的mysql语句,           并且记录了语句发生时间、执行时长、操作的数据等等。所以说通过二进制日志可以查询mysql数据库中进行了哪些变化。一般大小体积上限为1G。二进制开启状态:mysql> show global variables like '%log_bin%';      log_bin                         | ON    |  #已开启

26

二进制日志相关的参数:      show global variables like '%log%';sql_log_bin ={ON|OFF}      用于控制会话级别二进制日志功能的开启或关闭。      默认为ON,表示启用记录功能。      用户可以在会话级别修改此变量的值, 但其必须具有SUPER权限。binlog_cache_size =32768      默认值32768 Binlog Cache用于在打开了二进制日志(binlog)记录功能的环境, 是MySQL 用来提高binlog的记录效率而设计的一个用于短时间内临时缓存binlog数据的内存区域。      一般来说, 如果我们的数据库中没有什么大事务, 写入也不是 特别频繁, 2MB~4MB是一个合适的选择。      但是如果我们的数据库大事务较多, 写入量比较大, 可与适当调高binlog_cache_size。       同时, 我们可以通过binlog_cache_use以及binlog_cache_disk_use来分析设置的binlog_cache_size是否足够, 是否有大量的binlog_cache由于内存大 小不够而使用临时文件(binlog_cache_disk_use)来缓存了。binlog_stmt_cache_size= 32768    当非事务语句使用二进制日志缓存, 但是超出binlog_stmt_cache_size时, 使用一个临时文件来存放这些语句。       log_bin = mysql-bin   指定binlog的位置, 默认在数据目录下。binlog-format= {ROW|STATEMENT|MIXED}    指定二进制日志的类型, 默认为MIXED。    如果设定了二进制日志的格式, 却没有启用二进制日志,则MySQL启动时会产生警告日志信息并记录于错误日志中。sync_binlog = 10   设定多久同步一次二进制日志至磁盘文件中, 0表示不同步, 任何正数值都表示对二进制每多少次写操作之后同步一次。    当autocommit的值为1时, 每条语句的执行都会引起二进制日志同步,否则, 每个事务的提交会引起二进制日志同步.max_binlog_cache_size= {4096 .. 7}    二进定日志缓存空间大小,5.5.9及以后的版本仅应用于事务缓存,其上限由max_binlog_stmt_cache_size决定。max_binlog_stmt_cache_size= {4096 .. 7}       二进定日志缓存空间大小,5.5.9及以后的版本仅应用于事务缓存expire_log_days ={0..99}       设定二进制日志的过期天数,超出此天数的二进制日志文件将被自动删除。默认为0,表示不启用过期自动删除功能。如果启用此功能,自动删除工作通常发生在MySQL启动时或FLUSH日志时。

27

二进制日志定义方式:    其一、log_bin可以直接定义为文件路径,也可以为ON|OFF    其二、通过编辑my.cnf中的log-bin选项可以开启二进制日志;形式如下:[mysqld]log-bin [=DIR \ [filename]]    其中,DIR参数指定二进制文件的存储路径;   filename参数指定二级制文件的文件名,   其形式为filename.number,number 的形式为000001、000002等。   每次重启mysql服务或运行mysql> flush logs;都会生成一个新的二进制日志文件,这些日志文件的number会不断地递增。      除了生成上述的文件外还会生成一个名为 filename.index的文件。   这个文件中存储所有二进制日志文件的清单又称为二进制文件的索引。    如果说我们向某个表的某个字段插入一个数据而这个数据为当前时间(日期时间型);     过段时间将此二进制文件应用到另一台服务器上数据就会变动从而导致数据的不一致性所以说对于这种非确定性的数据使用默认的语句定义并不是可靠的;

28

二进制日志中常用的定义格式:       语句(statement):默认的记录格式;       行(row):定义的并非数据本身而是这一行的数据是什么;       混合模式(mixed):交替使用行和语句、由mysql服务器自行判断。其中基于行的定义格式数据量会大一些但是可以保证数据的精确性。查看二进制日志:     二进制日志的定义方式为二进制格式;    使用此格式可以存储更多的信息, 并且可以使写入二进制日志的效率更高。    但是不能直接使用查看命令打开并查看二进制日志。mysql> show binary logs;   #显示当前服务器使用的二进制文件及大小mysql> show master logs;  #显示主服务器使用的二进制文件及大小mysql> show master status;   #当前使用的二进制文件及所处位置二进制日志的记录位置:      通常为上一个事件执行结束时间的位置,      每一个日志文件本身也有自己的元数据所以        说对于当前版本的mysql来说二进制的开始位置通常为107;mysql> flushlogs; Query OK, 0 rowsaffected (0.23 sec) 注意:flush logs一般只会滚动中继日志和二进制日志。

29

查看二进制日志信息的命令:     show binlog events \G         #查看所有的二进制信息     show binlog events in 'mysql-bin.000011';    #查看指定日志的二进制信息

30

删除二进制日志信息:    二进制日志会记录大量的信息(其中包含一些无用的信息);    如果很长时间不清理二进制日志, 将会浪费很多的磁盘空间。    但是, 删除之后可能导致数据库崩溃时无法进行恢复, 所以若要删除二进制日志首先将其和数据库备份一份, 其中也只能删除备份前的二进制日志, 新产生的日志信息不可删(可以做即时点还原)。    也不可在关闭mysql服务器之后直接删除因为这样可能会给数据库带来错误的。    若非要删除二进制日志需要做如下操作:          导出备份数据库和二进制日志文件进行压缩归档存储。删除二进制文件的方法如下:    (1).删除所有的二进制日志(不可效仿)使用RESET MASTER语句可以删除所有的二进制日志。该语句的形式如下:reset   master;show binary logs;      解析:         首先不建议在生产环境下使用此操作;         删除所有的二进制日志后, Mysql将会重新创建新的二进制日志。         新二进制日志的编号从000001开始。    (2).根据文件或时间点来删除二进制日志mysql> PURGE { BINARY | MASTER } LOGS {TO 'log_name' | BEFORE datetime_expr }      其中TO'log_name'表示把这个文件之前的其他文件都删除掉,也可使用BEFORE datetime_expr指定把哪个时间之前的二进制文件删除了。       PURGE BINARY LOGS TO 'mysql-bin.000007';       show binary logs;由此可以看出这种清理二进制日志文件的方式是非常合理的,              不会导致数据库的错误发生。mysql> PURGE  BINARY LOGS BEFORE '13-10-19 10:26:36';                #使用时间来删除二进制日志

31

windows下MySQL日志的启用?      (1).连接上mysql, 查看日志服务是否开启      (2).show global variables like \'log_bin%\';     输入上面的命令可以查看当前mysql的日志服务是否开启,图为ON状态, 表示已开启, MySQL默认状态下是未开启日志服务的。

32

日志服务开启了, 配置MySQL根目录下的my.ini文件,在[mysqld]下面添加存放日志的路径, 就可以达到windows下修改MySQL日志文件的位置的目的!!!     配置好ini文件后, 需要重新启动mysql服务, 配置才能够生效。

33

win下mysql服务的ini配置文件在哪里?     输入如下命令查看MySQL的安装目录和数据存放目录,MySQL的配置文件就在安装目录下, 日志文件在数据存放目录中, 具体如下所示:#MySQL在本机中的安装目录select @@basedir;#MySQL在本机中的数据存放目录select @@datadir;       另外方法是:     在'开始 → 所有程序 → MySQL'下面找到MySQL的命令行客户端工具,右键选择该命令行工具查看'属性', 在'目标'里面也可以看到MySQL使用的配置文件位置。     注意:     ProgramData目录可能是'隐藏'的,如果在显示的分区中看不到的话就修改一下系统设置,让隐藏文件/文件夹可见。或者直接将ProgramData/MySQL/MySQL Server 5.6目录复制下来直接粘贴到文件夹的目录窗口中也可以。   具体如下所示:

推荐信息