现在的位置:首页>空间域名>正文

mysql初始化后找不到pid的解决方法和思路

2016年08月11日 ⁄ 共 5363字 暂无评论

这一篇文章,算是部落对前一篇MySQL server PID file could not be found的解决的补充了,数据库有时候出现各种问题,都会导致一些莫名其妙的连接错误,有时候,我们会很头痛,像昨天部落提到的初始化后找不到pid,就够难受的了,这里提供一些解决思路,大家参考一下.

mysql初始化后找不到pid的思路

1,查看日志mysql的错误日志 mysql-error.log,对于lnmp 的朋友,也可以查看/usr/local/mysql/var下对应的错误文件.

2,查看进程 ps aux|grep mysql

3,查看权限 ll /home/mysql

4,查看history

5,检查磁盘空间,df -h

5,操作标准化,尽量做的规范,养成一个好习惯.

虚拟机centos 6.4 64位安装的mysql 5.5.37的问题解决过程

1.修改了my.cnf配置,操作过程如下:

  1. [root@localhost etc]# service mysqld start  #启动mysql失败
  2. Starting MySQL.... ERROR! The server quit without updating PID file (/home/mysql/log/mysql.pid).
  3. [root@localhost etc]# tail -n 30 /home/mysql/log/mysql-error.log  #首先查看日志
  4. 。。。。
  5. 140918 07:27:20 mysqld_safe Starting mysqld daemon with databases from /home/mysql/data
  6. 140918  7:27:20 [Warning] Although a path was specified for the --log-slow-queries option, log tables are used. To enable logging to files use the --log-output=file option.
  7. 140918  7:27:21 InnoDB: The InnoDB memory heap is disabled
  8. 140918  7:27:21 InnoDB: Mutexes and rw_locks use GCC atomic builtins
  9. 140918  7:27:21 InnoDB: Compressed tables use zlib 1.2.3
  10. 140918  7:27:21 InnoDB: Initializing buffer pool, size = 4.0G
  11. 140918  7:27:22 InnoDB: Completed initialization of buffer pool
  12. InnoDB: Error: log file /home/mysql/data/ib_logfile0 is of different size 0 5242880 bytes
  13. InnoDB: than specified in the .cnf file 0 536870912 bytes!
  14. 140918  7:27:22 [ERROR] Plugin 'InnoDB' init function returned error.
  15. 140918  7:27:22 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
  16. 140918  7:27:22 [ERROR] Unknown/unsupported storage engine: INNODB
  17. 140918  7:27:22 [ERROR] Aborting
  18. 140918  7:27:22 [Note] /usr/local/mysql/bin/mysqld: Shutdown complete
  19. 140918 07:27:22 mysqld_safe mysqld from pid file /home/mysql/log/mysql.pid ended
  20. [root@localhost etc]# rm /home/mysql/data/ib_logfile*
  21. rm: remove regular file `/home/mysql/data/ib_logfile0'? y
  22. rm: remove regular file `/home/mysql/data/ib_logfile1'? y
  23. [root@localhost etc]# service mysqld start
  24. Starting MySQL..................................................................................................... SUCCESS!

OK,由于修改了innodb的innodb_buffer_pool_size参数,所以需要删除原来的ib_logfile,在第一次启动的时候因为要创建,所以较慢.

另一次由于做实验,需要把里面数据都清除了.

启动mysql,一直提示不能创建pid,不能创建pid文件,看日志,检查mysql对目录的权限

mysqld_safe mysqld from pid file/usr/local/mysql/data/localhost.localdomain.pid ended

发现原来是初始化mysql之前,进程没有kill掉 (初始化mysql之前应该service mysqld stop)

初始化mysql

  1. [root@localhost ~]#cd /usr/local/mysql/
  2. [root@localhost mysql]# cd data/
  3. [root@localhost data]# ls
  4. ibdata1      ib_logfile1               localhost.localdomain.pid  performance_schema
  5. ib_logfile0  localhost.localdomain.err  mysql                     test
  6. [root@localhost data]# rm -rf *
  7. [root@localhost data]# cd ..
  8. [root@localhost mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data/
  9. Installing MySQL system tables...
  10. OK
  11. Filling help tables...
  12. OK
  13. To start mysqld at boot time you have to copy
  14. support-files/mysql.server to the right place for your system
  15. PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
  16. To do so, start the server, then issue the following commands:
  17. ./bin/mysqladmin -u root password 'new-password'
  18. ./bin/mysqladmin -u root -h localhost.localdomain password 'new-password'
  19. Alternatively you can run:
  20. ./bin/mysql_secure_installation
  21. which will also give you the option of removing the test
  22. databases and anonymous user created by default.  This is
  23. strongly recommended for production servers.
  24. See the manual for more instructions.
  25. You can start the MySQL daemon with:
  26. cd . ; ./bin/mysqld_safe &
  27. You can test the MySQL daemon with mysql-test-run.pl
  28. cd ./mysql-test ; perl mysql-test-run.pl
  29. Please report any problems at http://bugs.mysql.com/
  30. [root@localhost mysql]# ./bin/mysqld_safe &
  31. [1] 11035
  1. [root@localhost mysql]#
  2. 140401 15:24:03 mysqld_safe Logging to'/usr/local/mysql/data/localhost.localdomain.err'.
  3. 140401 15:24:03 mysqld_safe Starting mysqld daemon with databases from/usr/local/mysql/data
  4. 140401 15:24:05 mysqld_safe mysqld from pid file/usr/local/mysql/data/localhost.localdomain.pid ended
  5. [1]+  Done                   ./bin/mysqld_safe

重启时检查是否已经启动mysql:

  1. [root@localhost mysql]# ps aux|grep mysql
  2. root     10718  0.0  0.1 106192  1536 pts/0   S    15:20   0:00 /bin/sh ./bin/mysqld_safe
  3. mysql    10948  0.1  4.0 731840 40996 pts/0    Sl  15:20   0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql--datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin--user=mysql --log-error=/usr/local/mysql/data/localhost.localdomain.err--pid-file=/usr/local/mysql/data/localhost.localdomain.pid--socket=/usr/local/mysql/mysql.sock --port=3306
  4. root     11284  0.0  0.0 103240   860 pts/1   S+   15:24   0:00 grep mysql
  5. [root@localhost mysql]# kill -9 10718
  6. [root@localhost mysql]# kill -9 10948
  7. [root@localhost mysql]# service mysqld restart
  8.  ERROR! MySQL server PID file could notbe found!
  9. Starting MySQL.. SUCCESS!

以后出问题后还是自己分析问题最重要,不要一上来就去谷歌度娘查,会把思路带到另一个未知的方向.

如果是因为找不到pid而出现的建立数据库连接时出错,我们可以使用以下脚本.

新增一个脚本

vi /root/tools/mysql_cheack.sh

添加内容如下:

  1. #!/bin/bash
  2. pgrep -x mysqld &> /dev/null
  3. if [ $? -ne 0 ]
  4. then
  5. echo "At time: `date` :MySQL  is stop .">> /home/wwwlogs/mysql_messages
  6. service mysql start
  7. #echo "At time: `date` :MySQL server is stop."
  8. else
  9. echo "MySQL server is running ."
  10. fi

添加定时任务,每隔5分钟检测一次:

crontab -e

*/5 * * * * /bin/bash /root/tools/mysql_cheack.sh

这样的话,我们可以对找不到pid的错误无视了.当然,您可以将时间设置得长一点.

到此,只要当pid的错误出现的时候,在5分钟内会自动重启mysql.

小结

mysql初始化后找不到pid的情况,部落还是引用文章中的一句,千万不要脑袋一热,就跟着网上的一些方法修改,有时候会出现很多我们无法预知的问题.

给我留言