心灵咖啡

 找回密码
 注册加入
查看: 6158|回复: 2
收起左侧

[环境架设] wdcp清除/禁用mysql日志与ERROR! Manager of pid-file quit without updating file

[复制链接]
发表于 2015-1-15 19:09:21 | 显示全部楼层 |阅读模式
(以下经验基于wdcp安装环境)


Starting MySQL. ERROR! Manager of pid-file quit without updating file.


因为日志占用了过多空间造成数据库无法连接,所以自行进行了一些日志手动删除,由于不熟悉,造成上面错误,无法启动mysql。
当时删除是直接在mysql的文件目录/www/wdlinux/mysql/var里面,把最前面的几个日志文件mysql-bin.000001 -mysql-bin.000005删除了。原问题不仅没有解决,还造成上面问题,无法启动(原因见后)。
在wdcp及一键包里mysql的默认安装目录是在
/www/wdlinux/mysql目录
数据目录是在
/www/wdlinux/mysql/var

接着,有资料说要添加一下路径,查看/www/wdlinux/etc,mysql的配置文件my.cnf,使用 “vi  文件名”,进入编辑,再按“ i  ”进入插入修改,然后esc 再输入“:wq ” 退出并保存,添加了datadir =/www/wdlinux/mysql/var ,无效。linux命令之vi

mysql的配置文件在哪里?
linux版本是my.cnf,一般会放在/etc/my.cnf、/etc/mysql/my.cnf;
win下的是my.ini,一般会在安装目录的根目录;

再查找网上资料说data/mysql-bin.index有问题,data/mysql-bin.index是日志文件索引的文件,用于定位二进制文件(见高性能Mysql主从架构的复制原理及配置详解),只删除了日志文件而没有对日志的索引文件做处理显然是不行的。

于是,再次进入/www/wdlinux/mysql/var,确实有一个mysql-bin.index,里面是日志文件的目录索引,于是把“00001-00006”的索引也删除掉以使目录与/www/wdlinux/mysql/var中存在的形似mysql-bin.000001 这样的日志文件一致,保存后退出后。

再“service mysqld start”
终于正常启动。




——论坛程序问题,请给 qq124627513(微信同步)留言。(系统默认签名,点击修改
 楼主| 发表于 2015-1-16 00:14:54 | 显示全部楼层
删除了6个日志文件数据库连接就正常了,经上面发现我这里有00001-00141个日志文件,可见占用空间的大小不容忽视。于是考虑到近期服务器并没有发生什么问题,准备把这些日志清除了。


一般安装的MySQL默认是开启了日志文件的,如果数据操作比较频繁就会产生大量的日志,如在/usr/local/mysql/var/下面产生mysql-bin.0000* 类似的文件,而且一般都在几十MB到几个GB,更甚会吃掉整个硬盘空间,从来导致mysql无法启动或报错,如vps论坛用户的反馈。

如何清除MySQL的日志、关闭日志功能?

1,清除mysql日志

执行:/usr/local/mysql/bin/mysql -u root -p
输入密码登录后再执行:reset master;
(reset master; ,删除所有index file 中记录的所有binlog 文件,将日志索引文件清空,创建一个新的日志文件,这个命令通常仅仅用于第一次用于搭建主从关系的时的主库,适用于没有从服务器,若设置了mysql的主从服务器,这样操作会出错。RESET MASTER 和RESET SLAVE 命令的使用方法

再输入:quit 退出mysql命令模式。


如何连接MySQL,在命令行或SSH工具里直接:

格式: mysql -h主机地址 -u用户名-p用户密码

1、例1:连接到本机上的MYSQL

找到mysql的安装目录,一般可以直接键入命令mysql -uroot -p,回车后提示你输密码,如果刚安装好MYSQL,超级用户root是没有密码的,故直接回车即可进入到MYSQL中了,MYSQL的提示符是:mysql>

2、连接到远程主机上的MySQL

假设远程主机的IP为:10.0.0.1,用户名为root,密码为123。则键入以下命令:

mysql -h10.0.0.1 -uroot -p123

(注:u与root可以不用加空格,其它也一样)

3、退出MySQL命令

exit; (回车)

另一种方法,就是正文上面开头我说到的,不过容易出错,不建议,直接进入mysql的数据目录里,选择要删除的日志文件,手动删除。 linux命令之复制、删除、移动


2,彻底禁用MySQL日志:

修改/etc/my.cnf(mysql配置文件) 文件,找到log-bin=mysql-bin、binlog_format=mixed再这两行前面加上#,将其注释掉,再执行/etc/init.d/mysql restart(重启mysql)即可。




-----------------------------------------------------------
网上实例:

最近发现服务器上的C盘空间越来越小,应该是最近一个月,于是开始查找原因,最后发现原来是因为上个月做了数据库的同步,打开了Mysql的二进制日志和.log日志,这些日志文件非常的庞大,.log日志已经达到了25个G,mysql-bin.00000X日志也达到了5个G,首先清理主服务器上的日志文件,我先清理二进制文件(mysql-bin.00000X),先查看有哪些文件:

用命令查看: show binary logs;  (查看日志文件列表。先要进入mysql模式,见上文。)

1.jpg

1.确认你日志是否启用了
mysql>show variables like 'log_bin';
2.如果启用了,即ON
那日志文件就在mysql的安装目录的data目录下
3.怎样知道当前的日志
mysql> show master status;


或者去从服务器(如果你有设置了主从mysql服务器的话)上查看哪个二进制正在使用,

2.jpg

我们看到mysql-tb-bin.000005这个日志文件正在使用。

回到主服务器开始清理日志,但是不能清理mysql-tb-bin.000005这个日志文件,用命令清理:

purge binary logs to 'mysql-tb-bin.000005';

这个命令就是清理除mysql-tb-bin.000005以外的其他二进制日志;执行成功后,再查看二进制日志列表:show binary logs;

3.jpg


清理成功,但是这样手动清理危险很大,而且还比较复杂,有没有自动清理的方法呢?答案是有的,在my.ini里面加上这个配置:expire_logs_days=5  这个配置的意思就是,日志的过期天数,超过5天的日志,mysql会自动清理5天以前的日志,这样就不用再担心日志文件文件越来越大的问题了,执行命令的时候一定要慎重,确保万无一失再执行,有不正确的地方,望大家指正!


------优化保险的方法,自动过期法-----------

以wdcp架设环境为例:

1,进入mysql配置文件my.cnf

cd home/wddata/etc

2,编辑my.cnf

vi my.cnf

在[mysqld]项里添加一行:

expire_logs_days=5

意思是只保留5天日志。

3,保证开启了mysql日志功能:

把log-bin=mysql-bin、binlog_format=mixed这两行前面的#去掉

4,退出vi 并保存(esc --> :wq ),然后重启mysql。


一、启动

1、使用 service 启动:service mysqld start

2、使用 mysqld 脚本启动:/etc/inint.d/mysqld start

3、使用 safe_mysqld 启动:safe_mysqld&

二、停止

1、使用 service 启动:service mysqld stop

2、使用 mysqld 脚本启动:/etc/inint.d/mysqld stop

3、mysqladmin shutdown

三、重启

1、 使用 service 启动:service mysqld restart

2、使用 mysqld 脚本启动:/etc/inint.d/mysqld restart

5,然后再用上文提到的 show binary logs; (不知道为什么我这里用这命令查看是empty set (0.00 sec),不过进入目录www/wdlinux/mysql/var却可以列出四五个日志文件。) 来查看日志时就会发现(本机)141条只有4、5条了。更重要的是用 df  命令查看服务器时,发现我原来98%的磁盘使用量一下子变成了44%。





——论坛程序问题,请给 qq124627513(微信同步)留言。(系统默认签名,点击修改
 楼主| 发表于 2015-1-16 04:13:00 | 显示全部楼层
mysql有以下几种日志:
错误日志: -log-err
查询日志: -log
慢查询日志: -log-slow-queries
更新日志: -log-update
二进制日志: -log-bin
默 认情况下,所有日志创建于mysqld数据目录中。通过刷新日志,你可以强制 mysqld来关闭和重新打开日志文件(或者在某些情况下切换到一个新的日志)。当你执行一个FLUSH LOGS语句或执行mysqladmin flush-logs或mysqladmin refresh时,出现日志刷新
1. 错误日志
用--log- error[=file_name]选项来指定mysqld保存错误日志文件的位置。如果没有给定file_name值,mysqld使用错误日志名 host_name.err 并在数据目录中写入日志文件。如果你执行FLUSH LOGS,错误日志用-old重新命名后缀并且mysqld创建一个新的空日志文件。(如果未给出--log-error选项,则不会重新命名)。
如果不指定--log-error,或者(在Windows中)如果你使用--console选项,错误被写入标准错误输出stderr。通常标准输出为你的终端。

2. 通用查询日志                                                            

用--log[=file_name]或-l [file_name]选项启动它。如果没有给定file_name的值,默认名是host_name.log。

3. 慢速查询日志                                                            

用--log-slow-queries[=file_name]选项启动时,mysqld 写一个包含所有执行时间超过long_query_time秒的SQL语句的日志文件.如果没有给出file_name值,默认未主机名,后缀为 -slow.log。如果给出了文件名,但不是绝对路径名,文件则写入数据目录。

3. 更新日志                                                              

用--log-update[=file_name]选项启动,不推荐使用.


是否启用了日志
mysql>show variables like 'log_%';
怎样知道当前的日志
mysql> show master status;
顯示二進制日志數目
mysql> show master logs;
看二进制日志文件用mysqlbinlog
shell>mysqlbinlog mail-bin.000001
或者shell>mysqlbinlog mail-bin.000001 | tail
在配置文件中指定log的輸出位置.
Windows:Windows 的配置文件为 my.ini,一般在 MySQL 的安装目录下或者 c:\Windows 下。
Linux:Linux 的配置文件为 my.cnf ,一般在 /etc 下。
在linux下:
Sql代码
# 在[mysqld] 中輸入
#log
log-error=/usr/local/mysql/log/error.log
log=/usr/local/mysql/log/mysql.log
long_query_time=2
log-slow-queries= /usr/local/mysql/log/slowquery.log

# 在[mysqld] 中輸入 #log
log-error=/usr/local/mysql/log/error.log
log=/usr/local/mysql/log/mysql.log
long_query_time=2
log-slow-queries= /usr/local/mysql/log/slowquery.log

windows下:
Sql代码
# 在[mysqld] 中輸入
#log
log-error="E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/error.log"
log="E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/mysql.log"
long_query_time=2
log-slow-queries= "E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/slowquery.log"

# 在[mysqld] 中輸入 #log
log-error="E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/error.log"
log="E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/mysql.log"
long_query_time=2
log-slow-queries= "E:/PROGRA~1/EASYPH~1.0B1/mysql/logs/slowquery.log"

开启慢查询
long_query_time =2 --是指执行超过多久的sql会被log下来,这里是2秒
log-slow-queries= /usr/local/mysql/log/slowquery.log --将查询返回较慢的语句进行记录
log-queries-not-using-indexes = nouseindex.log --就是字面意思,log下来没有使用索引的query
log=mylog.log --对所有执行语句进行记录
windows下开启mysql日志:

在[mysql]下加入这些(基本上等于加在最后面):

log-error=

#Enter a name for the query log file. Otherwise a default name will be used.

#注:(写成txt文件editplus可以及时重载,不过有时要放在C盘下editplus才可以及时重载)

log= c:/mysql_query.log.txt

#Enter a name for the slow query log file. Otherwise a default name will be used.

log-slow-queries=

#Enter a name for the update log file. Otherwise a default name will be used.

log-update=

#Enter a name for the binary log. Otherwise a default name will be used.

log-bin=
——论坛程序问题,请给 qq124627513(微信同步)留言。(系统默认签名,点击修改
您需要登录后才可以回帖 登录 | 注册加入

本版积分规则

广告
广告位
广告位
广告位
关闭

站长推荐上一条 /1 下一条

QQ|联系我们|手机版|小黑屋|Archiver|心灵咖啡 ( 粤ICP备16121829号-1 )

GMT+8, 2024-11-23 11:36 , Processed in 0.089862 second(s), 27 queries .

Powered by Discuz! and 心灵文学

Copyright © 2001-2021, Tencent Cloud.


本站文章为原创会员所有,未经许可禁止去版权转载,但欢迎分享本站文章链接!另,若有抄袭侵权,联系即删禁。
快速回复 返回顶部 返回列表