1、原因:可能是/usr/local/mysql/mysql.pid文件沒(méi)有寫的權(quán)限;
彰武網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián)公司,彰武網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為彰武成百上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的彰武做網(wǎng)站的公司定做!
解決方法 :給予權(quán)限,執(zhí)行 “chmod 775 /usr/local/mysql/ -R” 然后重新啟動(dòng)mysqld。
2、原因:可能進(jìn)程里已經(jīng)存在mysql進(jìn)程;
解決方法:用命令“ps -ef|grep mysqld”查看是否有mysqld進(jìn)程,如果有使用“kill -9 進(jìn)程號(hào)”殺死,然后重新啟動(dòng)mysqld。
3、原因:可能是第二次在機(jī)器上安裝mysql,有殘余數(shù)據(jù)影響了服務(wù)的啟動(dòng);
解決方法:去mysql的數(shù)據(jù)目錄/data看看,如果存在mysql-bin.index,就趕快把它刪除掉吧,它就是罪魁禍?zhǔn)琢恕?/p>
4、原因:mysql在啟動(dòng)時(shí)沒(méi)有指定配置文件時(shí)會(huì)使用/etc/my點(diǎn)吸煙 f配置文件,請(qǐng)打開這個(gè)文件查看在[mysqld]節(jié)下有沒(méi)有指定數(shù)據(jù)目錄(datadir);
解決方法:請(qǐng)?jiān)赱mysqld]下設(shè)置這一行:datadir = /usr/local/mysql/data。
5、原因:skip-federated字段問(wèn)題;
解決方法:檢查一下/etc/my點(diǎn)吸煙 f文件中有沒(méi)有沒(méi)被注釋掉的skip-federated字段,如果有就立即注釋掉吧。
6、原因:錯(cuò)誤日志目錄不存在;
解決方法:使用“chown” “chmod”命令賦予mysql所有者及權(quán)限。
7、原因:如果是centos系統(tǒng),默認(rèn)會(huì)開啟selinux;
解決方法:關(guān)閉它,打開/etc/selinux/config,把SELINUX=enforcing改為SELINUX=disabled后存盤退出重啟機(jī)器試試。
8、原因:log-bin路徑錯(cuò)誤;
解決方法:查看對(duì)應(yīng)數(shù)據(jù)庫(kù)下的error log,例如我的數(shù)據(jù)庫(kù)為,/usr/local/mysql/var目錄,其下的localhost.localdomain.err為錯(cuò)誤日志,只要把其下的ib_logfile*刪除即可,重啟mysql即可。
一、Linux下MySQL的啟動(dòng)與停止
1、Mysql啟動(dòng)、停止、重啟常用命令
a、啟動(dòng)方式
(1)使用 service 啟動(dòng):
[root@localhost /]# service mysqld start (5.0版本是mysqld)
[root@szxdb etc]# service mysql start (5.5.7版本是mysql)
(2)使用 mysqld 腳本啟動(dòng):
/etc/inint.d/mysqld start
(3)使用 safe_mysqld 啟動(dòng):
safe_mysqld
b、停止方式
(1)使用 service 啟動(dòng):service mysqld stop
(2)使用 mysqld 腳本啟動(dòng):/etc/inint.d/mysqld stop
(3)mysqladmin shutdown
c、重啟方式
(1)使用 service 啟動(dòng):
service mysqld restart
service mysql restart (5.5.7版本命令)
(2)使用 mysqld 腳本啟動(dòng):
/etc/init.d/mysqld restart
MYSQL執(zhí)行如下語(yǔ)句報(bào)錯(cuò):
報(bào)錯(cuò)信息如下:
意思是不能在同一語(yǔ)句中更新select出的同一張表元組的屬性值
解決方法:將select出的結(jié)果通過(guò)中間表再select一遍即可。
MYSQL手冊(cè)restrictions.html#subquery-restrictions里給出了限制規(guī)則和解決方法:
其實(shí)想想也是這樣的,對(duì)同一張表查的同時(shí)更新會(huì)引起數(shù)據(jù)不一致的問(wèn)題吧,但是將查詢結(jié)果事先放到臨時(shí)表中就不會(huì)有這個(gè)問(wèn)題了。
這個(gè)是我們?cè)谑褂胾pdate或者delete語(yǔ)句時(shí),在where條件里面加入的子查詢導(dǎo)致的。例如如下的update語(yǔ)句:
修改上述語(yǔ)句為下面這樣,該問(wèn)題可以解決:
注意,這樣一定要給最里面的子查詢定義一個(gè)別名,不然會(huì)報(bào)另外一個(gè)錯(cuò)誤:
自己的例子:下面這種方式報(bào)錯(cuò) ? error code:1093
所以改成:
原因:一定要給最里面的子查詢定義一個(gè)別名.
中文意思:不能先select出同一表中的某些值,再update這個(gè)表(在同一語(yǔ)句中)
解決: 注:把同一個(gè)table重新包一遍,重命名
原句
修改后
轉(zhuǎn)自
操作沒(méi)有問(wèn)題,按照本思路對(duì)product表進(jìn)行操作
產(chǎn)生You can't specify target table '表名' for update in FROM clause錯(cuò)誤
3、解決思路:既然Mysql不讓對(duì)查詢到的目標(biāo)語(yǔ)句進(jìn)行更新,那么我在它的上面在套一個(gè)子查詢就可以。
將SELECT出的結(jié)果再通過(guò)中間表SELECT一遍,這樣就規(guī)避了錯(cuò)誤。需要注意的是,這個(gè)問(wèn)題只出現(xiàn)于MySQL,MSSQL和Oracle不會(huì)出現(xiàn)此問(wèn)題。
如下業(yè)務(wù)場(chǎng)景,ecs_order_shipping表里面記錄了每一個(gè)訂單的配送流轉(zhuǎn)記錄,type從11,12,21,22,23這么遞進(jìn).
按理說(shuō)每個(gè)訂單的每一個(gè)type就出現(xiàn)一次,因?yàn)橄到y(tǒng)bug造成type為11、12的記錄,都出現(xiàn)了兩次或多次。對(duì)于每一個(gè)訂單,如果它有兩條type等于11的ecs_order_shipping記錄,那么只保留第一條,其他的刪除。
一、先查出來(lái)那些要被刪除的記錄的id組合
#查出type為11的全部記錄
#分組后,記錄少了,說(shuō)明有重復(fù)的記錄
#這樣篩選出那些重復(fù)的訂單
#從篩選的重復(fù)訂單中,得到id最大的
二、根據(jù)這些id組合,刪除他們
這樣就會(huì)報(bào)錯(cuò)!??!Error : You can't specify target table 'ecs_order_shipping' for update in FROM clause
三、如上,修改sql語(yǔ)句如下即可
/****每個(gè)訂單type等于11,12的記錄,出現(xiàn)了很多重復(fù)的,要?jiǎng)h除重復(fù)項(xiàng),只留下最早的那個(gè)***/
改為下面就OK
刪除重復(fù),但保留最小id項(xiàng)。
刪除表中多余的重復(fù)記錄,重復(fù)記錄是根據(jù)單個(gè)字段(peopleId)來(lái)判斷,只留有rowid最小的記錄
在 MyEclipse 中連接 MySQL 時(shí)出現(xiàn)“Access denied for user 'root'@'localhost' (using password: YES)”錯(cuò)誤可能是由于多種原因造成的。
密碼錯(cuò)誤:您在 MyEclipse 中使用的 MySQL 用戶名和密碼與您在 MySQL 控制臺(tái)中使用的用戶名和密碼可能不同。請(qǐng)確保您在 MyEclipse 中使用的用戶名和密碼是正確的。
MySQL 服務(wù)未啟動(dòng):請(qǐng)確保 MySQL 服務(wù)已啟動(dòng)。
用戶沒(méi)有遠(yuǎn)程訪問(wèn)權(quán)限:如果您在 MyEclipse 中使用的是遠(yuǎn)程 MySQL 服務(wù)器,請(qǐng)確保用戶具有遠(yuǎn)程訪問(wèn)權(quán)限。
建議您從上述幾個(gè)方面入手,嘗試解決這個(gè)問(wèn)題。如果仍然無(wú)法解決,建議您參考 MySQL 官方文檔或搜索網(wǎng)上的解決方案,或者向 MySQL 技術(shù)支持尋求幫助。
MySQL數(shù)據(jù)庫(kù) Too many connections
出現(xiàn)這種錯(cuò)誤明顯就是 mysql_connect 之后忘記 mysql_close;
當(dāng)大量的connect之后,就會(huì)出現(xiàn)Too many connections的錯(cuò)誤,mysql默認(rèn)的連接為100個(gè),而什么情況下會(huì)出現(xiàn)這種錯(cuò)誤呢?
正常的mysql_connect 之后調(diào)用 mysql_close()關(guān)閉連接
但在連接錯(cuò)誤時(shí),會(huì)者mysql_real_query()出現(xiàn)錯(cuò)誤退出時(shí),可能忘記mysql_close();
所以在程序return 之前一定要判斷是否close(),最穩(wěn)妥的方法就是在寫任何函數(shù)時(shí)都只有一個(gè)出口!
還有可以通過(guò)修改mysql配置文件來(lái)加大允許連接的數(shù)量!
有時(shí)你的服務(wù)器是經(jīng)常出現(xiàn)這樣的錯(cuò)誤呢:
錯(cuò)誤信息如下:
Can not connect to MySQL server
Error: Too many connections
Errno.: 1040
Similar error report has beed dispatched to administrator before.
從官方文檔知道Linux上面編譯安裝的mysql默認(rèn)的連接為100個(gè)
文檔:
mysql官方告訴我們需要修改max_connections的值,那么我們?cè)趺慈バ薷哪??有兩種方法
1、修改配置文件文件
修改/etc/my點(diǎn)吸煙 f這個(gè)文件,在[mysqld] 中新增max_connections=N,如果你沒(méi)有這個(gè)文件請(qǐng)從編譯源碼中的support-files文件夾中復(fù)制你所需要的*點(diǎn)吸煙 f文件為到 /etc/my點(diǎn)吸煙 f。我使用的是my-medium點(diǎn)吸煙 f,中型服務(wù)器配置。例如我的[mysqld]的內(nèi)容如下
[mysqld]
port = 3306
socket = /tmp/mysql.sock
skip-locking
key_buffer = 160M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
max_connections=1000
由于對(duì)mysql還不是很熟悉,所以很多參數(shù)沒(méi)有修改。哈哈。。
2、非使用mysqld腳本自動(dòng)啟動(dòng)的用戶。
修改MYSQLHOME/bin/mysqldsafe文件例如:/usr/local/mysql/bin/mysqldsafe這個(gè)文件grep?n‘maxconnection′
MYSQLHOME/bin/mysqldsafe文件例如:/usr/local/mysql/bin/mysqldsafe這個(gè)文件grep?n‘maxconnection′MYSQL_HOME/bin/mysqld_safe
修改對(duì)應(yīng)行號(hào)的max_connections參數(shù)值
3、服務(wù)器登錄mysql : mysql -u root -p
百分之九十進(jìn)不去,進(jìn)不去的執(zhí)行重啟命令 :/etc/init.d/mysql restart(centos系統(tǒng))
此時(shí)重啟mysql就能連接mysql了,如果還有時(shí)間,可以繼續(xù)下一步,治病要治本
打開配置文件 添加一下配置 vi /etc/my點(diǎn)吸煙 f
wait_timeout = 600
interactive_timeout = 600
再次重啟mysql即可
原理解答
mysql 默認(rèn)100 連接數(shù),超過(guò)則連不上,實(shí)際工作的連接數(shù)遠(yuǎn)遠(yuǎn)沒(méi)有100,大部分在sleep
所以要么增大連接數(shù),要么殺掉無(wú)用連接,推薦后者。