mysql登錄時(shí)報(bào)socket找不到的問題及解決
mysql登錄時(shí)報(bào)socket找不到
mysqld.socket文件是用來給客戶端和服務(wù)端進(jìn)行通信的,如果通過源碼方式安裝,默認(rèn)情況下這個(gè)文件會(huì)被放在tmp目錄下。
當(dāng)然也可以手動(dòng)指定存放位置,通過修改/etc/my.cnf文件的socket參數(shù)來修改mysqld.socket的存放路徑。
例如:
[mysqld] socket=/data/mysqldb/mysqld.sock
但是這樣一來在登錄的時(shí)候就會(huì)出現(xiàn)如下問題
[root@s186 /data/mysql]#/usr/local/mysql/bin/mysql -uroot -p Enter password: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
mysql客戶端在登錄的時(shí)候默認(rèn)會(huì)去/tmp/mysql.sock這個(gè)目錄查找mysqld.socket文件,由于修改了路徑自然是找不到的。
可以通過修改/etc/my.cnf文件給客戶端指定位置。
添加如下配置:
[client] socket=/data/mysqldb/mysqld.sock
這樣客戶端在登錄時(shí)就會(huì)去指定的目錄查找mysqld.socket文件,
注意client的socket要和mysqld是一樣的,因?yàn)榭蛻舳撕头?wù)端通信靠的就是這個(gè)文件,肯定要一致
通過上面的案例應(yīng)該明白為何服務(wù)端可以啟動(dòng),但是登錄的時(shí)候會(huì)報(bào)socket找不到的問題了。
出現(xiàn)socket找不到的問題大致有以下幾種情況
1.mysqld和client的socket配置路徑不一樣
比如像下面這樣的配置
[mysqld] socket=/data/mysqldb/mysqld.sock [client] socket=/data/mysqldb/mysql.sock
路徑是一樣的,但是文件名不一樣,一個(gè)是mysqld.socket,一個(gè)是mysql.socket
socket文件是由服務(wù)端生成的,而客戶端找的就是服務(wù)端生成的socket文件,所以client的配置要和mysqld一樣
2.在cmake的時(shí)候指定了路徑
比如像下面這一段cmake指令
在參數(shù)DMYSQL_UNIX_ADDR=/tmp/mysqld.sock中指定了socket的位置
那么/etc/my.cnf上mysqld上的socket和client上的socket都需要和這個(gè)一致
因?yàn)閏make在執(zhí)行完之后,mysqld這個(gè)執(zhí)行文件才會(huì)生成,并且這個(gè)執(zhí)行文件中會(huì)記錄你指定的參數(shù)
那么當(dāng)執(zhí)行mysqld的時(shí)候,它就會(huì)在你指定的目錄下去查找
這個(gè)時(shí)候/etc/my.cnf下的mysqld和client的socket必須和指定的路徑保持一致
否則mysqld執(zhí)行都會(huì)失敗(會(huì)報(bào)change dir…這樣的錯(cuò)誤)
cmake \-DCMAKE_INSTALL_PREFIX=/usr/local/mysql56 -DMYSQL_DATADIR=/data/mysqldb/data -DSYSCONFDIR=/etc/my.cnf -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/data/mysqld.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=utf8 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci
解決方法
解決socket的核心就是在登錄的時(shí)候告訴客戶端socket文件的位置
要么通過/etc/my.cnf文件指定位置
要么就是在登錄的時(shí)候指定位置
像下面這樣:
mysql -uroot -p --socket=/data/mysqldb/mysqld.sock
還有一種方式就是創(chuàng)建軟連接,因?yàn)榭蛻舳四J(rèn)會(huì)到/tmp下找mysqld.socket文件
我不通過配置文件,在tmp下建一個(gè)軟連接就可以了
ln -s /data/mysqldb/mysqld.sock mysql.socket
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
mysql 數(shù)據(jù)庫中my.ini的優(yōu)化 2G內(nèi)存針對站多 抗壓型的設(shè)置
mysql數(shù)據(jù)庫中my.ini的優(yōu)化,2G內(nèi)存,針對站多,抗壓型的設(shè)置.大家可以借鑒下。2009-08-08
MySql兩表關(guān)聯(lián)更新update示例SQL語句(用一個(gè)表更新另一個(gè)表)
這篇文章主要介紹了MySql兩表關(guān)聯(lián)更新update示例SQL語句的相關(guān)資料,文中分享了兩種處理方式(保留/清空未匹配數(shù)據(jù)),演示觸發(fā)器記錄更新操作至audit表,并通過示例SQL展示不同場景下更新效果及注意事項(xiàng),需要的朋友可以參考下2025-06-06
玩轉(zhuǎn)?MySQL?庫表:庫和表的操作"通關(guān)指南"
文章主要介紹了MySQL數(shù)據(jù)庫的基本概念、結(jié)構(gòu)和操作方法,包括數(shù)據(jù)庫和MySQL服務(wù)端的區(qū)別,SQL語句分類,以及數(shù)據(jù)庫和表的創(chuàng)建、查看、修改和刪除等操作,最后還介紹了備份和恢復(fù)數(shù)據(jù)庫的方法2026-04-04
mysql 5.7.21 解壓版通過歷史data目錄恢復(fù)數(shù)據(jù)的教程圖解
本文通過圖文并茂的形式給大家介紹了mysql 5.7.21 解壓版,通過歷史data目錄恢復(fù)數(shù)據(jù)的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09
解決MYSQL出現(xiàn)Can''t create/write to file ''/tmp/#sql_5c0_0.MYD''
今天在配置服務(wù)器的時(shí)候提示這個(gè)問題Can't create/write to file,原來是php.ini中設(shè)置的tmp目錄不存在2013-07-07

