mysql怎么關(guān)閉異常,mysql意外關(guān)閉啟動(dòng)不了

windows怎么關(guān)閉mysql

啟動(dòng)方法一:

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),淮濱企業(yè)網(wǎng)站建設(shè),淮濱品牌網(wǎng)站建設(shè),網(wǎng)站定制,淮濱網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,淮濱網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

在運(yùn)行框內(nèi)輸入:net start mysql

啟動(dòng)方法二:

在cmd中輸入mysqld --standalone (請(qǐng)確保mysql的bin路徑加入到了系統(tǒng)的環(huán)境變量中)

如果mysql不是采用的默認(rèn)安裝目錄,那么上述命令還要給出路徑參數(shù),如下:

mysqld --standalone --basedir c:\\mysql

關(guān)閉方法一:

在運(yùn)行內(nèi)輸入:net stop mysql

關(guān)閉方法二:

mysqladmin -uroot -p shutdown

另外,從client連入到mysql的方法:

方法一:進(jìn)入mysql的安裝目錄,然后使用mysql命令;

方法二:直接使用開(kāi)始菜單里的client快捷鏈接,查看這個(gè)屬性,可以發(fā)現(xiàn)它就是一條命令,我們?nèi)绻?p后面加上我們的密碼,那么點(diǎn)擊這個(gè)鏈接就可以直接使用mysql,不用輸入密碼了,當(dāng)然請(qǐng)確保密碼的安全;

方法三:自己寫(xiě)個(gè)bat腳本,直接點(diǎn)擊進(jìn)入;

面試官:MySQL權(quán)限表?yè)p壞導(dǎo)致無(wú)法啟動(dòng)怎么辦?

一、背景

近期,公司RDS云產(chǎn)品的MySQL Server版本進(jìn)行升級(jí),由目前使用的5.7.26版本升級(jí)到最新版本5.7.31;升級(jí)后測(cè)試同學(xué)發(fā)現(xiàn):在MySQL創(chuàng)建用戶后,5.7.31版本重新啟動(dòng)集群會(huì)出現(xiàn)啟動(dòng)失敗的現(xiàn)象;而5.7.26版本在相同測(cè)試場(chǎng)景下是正常啟動(dòng)的。這到底是為什么呢?

二、問(wèn)題復(fù)現(xiàn)

2.1 實(shí)驗(yàn)環(huán)境

2.2 操作步驟

按照測(cè)試同學(xué)的測(cè)試步驟,首先創(chuàng)建一個(gè)用戶:

然后關(guān)閉mysqld;這里需要介紹一下,我們集群的關(guān)閉方式是如下方式:

這種方式的內(nèi)部實(shí)現(xiàn)類似于kill -9模式。所以我在線下環(huán)境使用kill -9的方式來(lái)復(fù)現(xiàn),操作如下:

然后重啟mysqld,操作如下:

此時(shí)問(wèn)題復(fù)現(xiàn)了,mysqld啟動(dòng)失敗,我們查看了下error日志,信息如下:

根據(jù)報(bào)錯(cuò)信息可以看出:MySQL的權(quán)限系統(tǒng)表發(fā)生了損壞,導(dǎo)致了mysqld啟動(dòng)失敗;由于在MySQL 5.7及其之前版本該表是MyISAM引擎,且該引擎不支持事務(wù),所以在mysqld異常崩潰會(huì)導(dǎo)致該類型引擎表的損壞;但在mysqld啟動(dòng)時(shí)是有參數(shù)控制MyISAM引擎的恢復(fù)模式,且該參數(shù)在我們產(chǎn)品中也配置到了my.cnf中,如下所示:

2.3 參數(shù)解析

對(duì)于該參數(shù)的官方文檔的解釋如下:

設(shè)置MyISAM存儲(chǔ)引擎恢復(fù)模式。選項(xiàng)值是OFF、DEFAULT、BACKUP、FORCE或QUICK的值的任意組合。如果指定多個(gè)值,請(qǐng)用逗號(hào)分隔。指定不帶參數(shù)的選項(xiàng)與指定DEFAULT相同,指定顯式值" "將禁用恢復(fù)(與OFF值相同)。如果啟用了恢復(fù),則mysqld每次打開(kāi)MyISAM表時(shí),都會(huì)檢查該表是否標(biāo)記為已崩潰或未正確關(guān)閉。(只有在禁用外部鎖定的情況下運(yùn)行,最后一個(gè)選項(xiàng)才起作用。)在這種情況下,mysqld在表上運(yùn)行檢查。如果表已損壞,mysqld將嘗試對(duì)其進(jìn)行修復(fù)。

服務(wù)器自動(dòng)修復(fù)表之前,它將有關(guān)修復(fù)的注釋寫(xiě)到錯(cuò)誤日志中。如果您希望能夠在無(wú)需用戶干預(yù)的情況下從大多數(shù)問(wèn)題中恢復(fù),則應(yīng)使用選項(xiàng)BACKUP,F(xiàn)ORCE。即使某些行將被刪除,這也會(huì)強(qiáng)制修復(fù)表,但是它將舊的數(shù)據(jù)文件保留為備份,以便您以后可以檢查發(fā)生了什么。

全局變量,只讀變量,默認(rèn)為OFF。

三、問(wèn)題修復(fù)

這類MySQL用戶表?yè)p耗的問(wèn)題解決方式也是有多種,我這里列舉其中一種:

(1)my.cnf中的[mysqld]標(biāo)簽下添加skip_grant_tables,啟動(dòng)時(shí)跳過(guò)加載系統(tǒng)字典。

(2)重啟mysqld,然后修復(fù)mysql schema下的所有表。

(3)在[mysqld]標(biāo)簽下注釋或刪除掉skip_grant_tables,然后重啟mysqld。

此時(shí)mysqld是可以正常啟動(dòng)的,無(wú)異常。

四、深入排查

在產(chǎn)品化中,以上修復(fù)方式很不優(yōu)雅,只是作為臨時(shí)的解決方案;并且也存在一些令人疑惑的點(diǎn):

帶著這些疑問(wèn),我們繼續(xù)排查出現(xiàn)該現(xiàn)象的原因;此時(shí)Google也沒(méi)有找到一些有效的信息,那么只能通過(guò)MySQL源代碼來(lái)尋找一些答案。

首先需要下載mysql 5.7.31版本的源代碼,并搭建mysql debug環(huán)境;具體步驟可以自動(dòng)Google搜索一下,本文就不再贅述了。

在源代碼中搜索一下關(guān)鍵詞,用于打斷點(diǎn)的位置,然后進(jìn)行調(diào)試:

定位到相關(guān)代碼,大概是sql/mysqld.cc的4958行,且存在if條件判斷,此時(shí)我們開(kāi)始調(diào)試:

通過(guò)以上調(diào)試信息,可以判斷出acl_init函數(shù)返回的值為真;此時(shí)我們查看該函數(shù)的代碼 (sql/auth/sql_auth_cache.cc:1365):

根據(jù)該函數(shù)的注釋發(fā)現(xiàn):該函數(shù)是初始化負(fù)責(zé)用戶/數(shù)據(jù)庫(kù)級(jí)特權(quán)檢查的結(jié)構(gòu),并從mysql schema中的表中為其加載特權(quán)信息;且return值為1代表的是初始化權(quán)限失敗。

此后開(kāi)始逐步調(diào)試,觀察return相關(guān)信息,當(dāng)調(diào)試到lock_table_names函數(shù)時(shí),我們發(fā)現(xiàn)在Phase 3時(shí)return值為true,且根據(jù)代碼注釋發(fā)現(xiàn)true代表是Failure;具體代碼如下(sql/sql_base.cc:5549):

調(diào)試信息如下:

可以看到flags的值為0,而MYSQL_OPEN_SKIP_SCOPED_MDL_LOCK為宏定義值0x1000,與flags的值 做按位與操作,結(jié)果自然也是0,當(dāng)然MYSQL_LOCK_IGNORE_GLOBAL_READ_ONLY也是如此;need_global_read_lock_protection是bool類型值,代表是否需要全局讀鎖的保護(hù),這個(gè)值是在table- mdl_request.type不為MDL_SHARED_READ_ONLY發(fā)生改變;check_readonly函數(shù)相關(guān)信息 下面概述。

此時(shí)也查看了下MySQL 5.7.26版本代碼作為對(duì)比,發(fā)現(xiàn)lock_table_names函數(shù)下的Phase 3后的部分代 碼是在5.7.29版本后新增的。如果是git clone的MySQL代碼可以用git blame命令查詢文件變化的信息:

上述展示的信息中,最左側(cè)的列值為commit id為05824063和0405ebee,有興趣的同學(xué)可以詳細(xì)看下。

此功能解決的問(wèn)題是 BUG#28438114: SET READ_ONLY=1 SOMETIMES DOESN'T BLOCK CONCURRENT DDL.;當(dāng)然這個(gè)代碼的變更功能也在5.7 Release Notes中有所體現(xiàn),如下所示( m/doc/relnotes/mysql/5.7/en/news-5-7-29.html ):

最后我們?cè)俨榭聪耤heck_readonly函數(shù),該函數(shù)是基于read_only和super_read_only狀態(tài)執(zhí)行標(biāo)準(zhǔn)化檢查,是禁止(TRUE)還是允許(FALSE)操作。代碼如下(sql/auth/sql_authorization.cc:489):

此時(shí)第一反應(yīng)就是去檢查my.cnf中是否包含read_only相關(guān)參數(shù),檢查之后發(fā)現(xiàn)確實(shí)是使用了該參數(shù), 如下:

此時(shí)注釋掉該參數(shù),然后再次啟動(dòng)mysqld,發(fā)現(xiàn)MyISAM表可以自動(dòng)修復(fù),且正常啟動(dòng);error log信息如下:

由于docker一些限制,我們?cè)趍ysqld啟動(dòng)會(huì)涉及兩次;所以解決該問(wèn)題的方式為:第一次mysqld的啟動(dòng)時(shí)先關(guān)閉read_only參數(shù),第二次啟動(dòng)時(shí)開(kāi)啟read_only參數(shù)。之所以選擇默認(rèn)開(kāi)啟read_only參數(shù), 是為了避免在mysqld啟動(dòng)后,選主邏輯未完成時(shí)的保護(hù)措施;當(dāng)然選主完成后,會(huì)自動(dòng)對(duì)master執(zhí)行 set global read_only=0 操作。

五、總結(jié)

六、附錄

調(diào)試的棧幀信息如下,有興趣的小伙伴可以研究下:

熟悉MySQL體系結(jié)構(gòu)和innodb存儲(chǔ)引擎工作原理;以及MySQL備份恢復(fù)、復(fù)制、數(shù)據(jù)遷移等技術(shù);專注于MySQL、MariaDB開(kāi)源數(shù)據(jù)庫(kù),喜好開(kāi)源技術(shù)。

原文鏈接:

MySql不能插入中文,引起的異常,怎么解決

亂碼唄. 方法一,命令修改 進(jìn)入cmd,進(jìn)入mysql 用show variables查看你的字符集,character_set_server是服務(wù)器編碼.要改變服務(wù)器的編碼必須重新啟動(dòng)服務(wù)器 用mysqladmin –uroot shutdown關(guān)閉服務(wù)器,然后mysqld –C GBK啟動(dòng)服務(wù)器 –C是character_set_server的一個(gè)簡(jiǎn)寫(xiě)(可以也可以寫(xiě)成mysqld –character_set_server gbk) 方法二,手動(dòng)修改 修改 my.ini文件,就是你的mysql所在的文件夾下面,你可以搜索下.找到default-character-set=gb2312(或者是其他編碼)改為default-character-set=gbk 修改data目錄中相應(yīng)數(shù)據(jù)庫(kù)目錄下的db.opt配置文件 default-character-set=gbk default-collation=gbk_chinese_ci 祝樓主好運(yùn),good luck

win7 MySQL登錄異常

首先你需要是administror ,系統(tǒng)管理員:實(shí)現(xiàn)方法可以開(kāi)始-》附件-》命令提示符,右擊命令提示符,選擇:按系統(tǒng)管理員身份運(yùn)行。

之后你啟動(dòng)sql命令: net start mysql

如果要禁止,停止使用sql,命令:net stop mysql

當(dāng)然你如果安裝mysql,名稱是自定義的,那要按照你自定義的名字來(lái),比如net start mysql56。

mysql異常關(guān)閉(例如用kill -9 殺掉mysql進(jìn)程), 錯(cuò)誤返回碼是?

mysql目錄下有一個(gè) 主機(jī)名.err文件,直接用記事本打看看看就是了

MYSQL訪問(wèn)數(shù)據(jù),出現(xiàn)異常,這個(gè)要怎么解決

這是空指針的錯(cuò)誤,找到你的UsersAction這個(gè)類,在95行有這個(gè)空指針的錯(cuò)誤,就是你錯(cuò)誤信息上第二行顯示的信息

本文名稱:mysql怎么關(guān)閉異常,mysql意外關(guān)閉啟動(dòng)不了
URL地址:http://muchs.cn/article40/pheceo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、動(dòng)態(tài)網(wǎng)站、網(wǎng)站營(yíng)銷、外貿(mào)建站虛擬主機(jī)、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)