wdcp清除/禁用mysql日志与ERROR! Manager of pid-file quit without updating file
(以下经验基于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”
终于正常启动。
删除了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.确认你日志是否启用了
mysql>show variables like 'log_bin';
2.如果启用了,即ON
那日志文件就在mysql的安装目录的data目录下
3.怎样知道当前的日志
mysql> show master status;
或者去从服务器(如果你有设置了主从mysql服务器的话)上查看哪个二进制正在使用,
我们看到mysql-tb-bin.000005这个日志文件正在使用。
回到主服务器开始清理日志,但是不能清理mysql-tb-bin.000005这个日志文件,用命令清理:
purge binary logs to 'mysql-tb-bin.000005';
这个命令就是清理除mysql-tb-bin.000005以外的其他二进制日志;执行成功后,再查看二进制日志列表:show binary logs;
清理成功,但是这样手动清理危险很大,而且还比较复杂,有没有自动清理的方法呢?答案是有的,在my.ini里面加上这个配置:expire_logs_days=5这个配置的意思就是,日志的过期天数,超过5天的日志,mysql会自动清理5天以前的日志,这样就不用再担心日志文件文件越来越大的问题了,执行命令的时候一定要慎重,确保万无一失再执行,有不正确的地方,望大家指正!
------优化保险的方法,自动过期法-----------
以wdcp架设环境为例:
1,进入mysql配置文件my.cnf
cd home/wddata/etc
2,编辑my.cnf
vi my.cnf
在项里添加一行:
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%。
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的值,默认名是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代码
# 在 中輸入
#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
# 在 中輸入 #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代码
# 在 中輸入
#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"
# 在 中輸入 #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日志:
在下加入这些(基本上等于加在最后面):
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=
页:
[1]