CentOS安裝mysql The server quit without updating PID file問題

CentOS安裝mysql The server quit without updating PID file問題

背景描述

最近接到個任務在CentOS部署一套5.7的mysql服務,之前沒有在linux上安裝過myslq的經驗,但是往上看了一些文章感覺還是比較容易,同事也說只要幾分鐘就能搞定,於是欣然開始了我地採坑之路。。。

部署步驟

1、下載tar包,使用sftp工具上傳至/tmp下
2、新建mysql用戶、mysql用戶組
#新建mysql用戶組:groupadd mysql
#新建mysql用戶:useradd mysql -g mysql
3、將mysql安裝到/home/mysql/下
#解壓:
cd /opt/mysql/
tar -xvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
#重命名
cd /opt/mysql
mv mysql-5.7.24-linux-glibc2.12-x86_64 mysql
4、新建data目錄、日誌目錄
cd /opt/mysql
mkdir /opt/mysql/data
mkdir /opt/mysql/log
5、將/opt/mysql的所有者及所屬組改爲mysql
chown -R mysql:mysql /opt/mysql
6、初始化
su - mysql
cd /opt/mysql
./bin/mysqld --initialize --user=mysql --basedir=/opt/mysql --datadir=/opt/mysql/data
⚠️初始化後會生成一串臨時密碼,作爲首次登陸密碼
如:2017-11-29T01:55:23.192210Z 1 [Note] A temporary password is generated for root@localhost: Q5Sck93kdK/*
7、配置my.cnf
接下來進入/opt/mysql/support-files/目錄下
查看是否存在my-default.cnf文件,如果存在直接copy到/etc/my.cnf
cd /opt/mysql/support-files/
cp -a ./support-files/my-default.cnf /etc/my.cnf
如果不存在my-default.cnf文件,則在/etc/目錄下創建my.cnf,並寫入以下內容,例如:
vi /etc/my.cnf
[mysqld]
character_set_server=utf8
init_connect=‘SET NAMES utf8’
basedir=/home/mysql/mysql
datadir=/home/mysql/mysql/data
socket=/home/mysql/mysql/mysql.sock
log-error=/home/mysql/mysql/log/mysqld.log
pid-file=/home/mysql/mysql/mysql.pid
8、把mysqld放到本地系統服務中
接下來進入/opt/mysql/support-files/目錄下
cd /opt/mysql/support-files/
cp -a ./support-files/mysql.server /etc/init.d/mysqld
#chmod 755 /etc/init.d/mysqld
9、啓動mysql
/etc/init.d/mysqld start
如報錯:ERROR! The server quit without updating PID file (/software/mysql/mysqld.pid).
因爲新版本的mysql安全啓動安裝包只認/usr/local/mysql這個路徑。
解決辦法:
方法1、建立軟連接
例:
#cd /usr/local/mysql
#ln -s /opt/mysql/bin/mysqld mysqld
如報錯:Can’t connect to local MySQL server through socket ‘/opt/mysql/mysql.sock’
軟鏈接:
ln -s /tmp/mysql.sock /opt/mysql/mysql.sock
10、登陸mysql
mysql -u root -p
會提示輸入登陸密碼,輸入初始化時候的臨時密碼就可以了
11、加入環境變量,編輯 /etc/profile,這樣可以在任何地方用mysql命令了
vi /etc/profile
在末尾添加如下行
export PATH=$PATH:/opt/mysql/bin
保存後執行 source /etc/profile 使生效
12、使用mysql
service mysqld start/stop/restart
13、修改初始密碼
在這裏插入圖片描述
14、創建遠程連接賬號
在這裏插入圖片描述
以上是一個做運維的朋友給我的他們給客戶安裝的步驟

問題來了

以上的步驟是根據我係統的實際路徑修改的,原文檔是安裝在home目錄下。以開始系統只有一個root用戶,考慮到再去創建一個mysql用戶比較麻煩(xxx的項目,需要和領導以及網管說明。。。)所以就沒有去創建mysql用戶,即部署步驟中的第二步未執行,在初始化的時候–user參數也不填。在執行初始化之後發現The server quit without updating PID file…的問題,檢查mysql.pid文件的確不存在,手動創建一個並賦予讀寫權限(root本身就能對這些文件讀寫,其實沒必要)也無法解決,想着是不能對mysql.pid文件讀寫導致這個問題,於是手動寫一個pid到這個文檔中,啓動成功了,但是ps -ef|grep mysql沒發現mysl的進程,很明顯問題沒解決。
想到log文件是否會有錯誤信息呢,於是檢查log/mysqld.log文件,發現日誌只輸出到隨機生成root密碼處,後面就沒有了。考慮是否是配置文件出錯,首先檢查覈對basedir、datadir、error-log路徑都沒有問題,而且前期log也能正常輸出,data目錄下也有初始化出來的文件,所以my.cnf配置應該沒問題。

網上解決辦法彙總

自己沒法解決只能放大招了——度娘。相信搜過這個問題的人都看到了一下八個解決辦法
1.可能是data/mysql 文件夾沒有寫的權限
解決方法 :給予權限,執行 “chown -R mysql:mysql /home/data/mysql” “chmod -R 755 /home/data/mysql” 然後重新啓動mysqld!

2.可能進程裏已經存在mysql進程
解決方法:用命令“ps -ef|grep mysqld”查看是否有mysqld進程,如果有使用“kill -9 進程號”殺死,然後重新啓動mysqld!

3.可能是第二次在機器上安裝mysql,有殘餘數據影響了服務的啓動。
解決方法:去mysql的數據目錄/data看看,如果存在mysql-bin.index,就趕快把它刪除掉吧,它就是罪魁禍首了。

4.mysql在啓動時沒有指定配置文件時會使用/etc/my.cnf配置文件,請打開這個文件查看在[mysqld]節下有沒有指定數據目錄(datadir)。
解決方法:請在[mysqld]下設置這一行:datadir = /home/data/mysql

5.skip-federated字段問題
解決方法:檢查一下/etc/my.cnf文件中有沒有沒被註釋掉的skip-federated字段,如果有就立即註釋掉吧。

6.錯誤日誌目錄不存在
解決方法:使用“chown” “chmod”命令賦予mysql所有者及權限

7.selinux惹的禍,如果是centos或redhat系統,默認會開啓selinux
解決方法:關閉它,打開/etc/selinux/config,把SELINUX=enforcing改爲SELINUX=disabled後存盤退出重啓機器試試。

8.刪除mysql庫文件/data/mysql/中的“ib_*”文件,然後重啓mysql
PS:這一條要小心使用,千萬記得文件備份,否則萬劫不復

如果以上八條沒有幫助到你,那就接着往下看吧
我安裝的是5.7.24的,朋友說他近期安裝了5.7.23是正常的,所以有想會不會是小版本之間有差異導致的,於是又改成5.7.23的版本,很遺憾沒有解決問題

最終解決辦法

軟件問題、配置問題都排除了黔驢技窮了。。。。想着按照步驟完完整整一步一步地再擼一遍,奇蹟般沒問題了,問題就出在缺少的mysql用戶上,我的天。。。。至於爲什麼一定需要一個mysql用戶後面扒拉下官方文檔繼續更新

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章