久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

博客專欄

EEPW首頁 > 博客 > 如何在Linux下解決MySQL的兩個基本問題

如何在Linux下解決MySQL的兩個基本問題

發布人:only1 時間:2020-09-24 來源:工程師 發布文章

在我們學習linux運維時,時常會遇到各種各樣的問題,那么在使用mysql基本基本上會遇到主要的兩個問題,那到底是什么問題?今天就讓我們扣丁學堂為大家揭開神秘的面紗,為大家歸納整理了一下我們在學習的過程中會遇到的基本的問題,并且做以詳細的說明。

  

1.第一次起動mysql是沒有問題的.對mysql做了一些操作,特別是刪除mysql中一些不要的帳號后,重新起動mysql會遇到這樣的問題  

#/etc/init.d/mysqldrestart  

stoppingmysql[ok]  

TimeouterroroccurredtryingtostartMySQLDaemon.[failure]  

但是這個時候mysql實際上已經起動了,因為用netstat-ln命令去看3306端口已經起動.使用mysql-uroot-ppassword也能連接到數據庫.  

這實際上是mysql-3.x的一個bug(具體可以去看mysql的bugzilla和redhat的bugzilla).  

是什么原因導致連接超時呢?  

我們不妨先看看/etc/init.d/mysqld起動腳本是如何工作的,注意下面的一段  

#Ifyou'veremovedanonymoususers,thislinemustbechangedto  

#useauserthatisallowedtopingmysqld.  

ping="/usr/bin/mysqladmin-uUNKNOWN_MYSQL_USERping"  

#Spinforamaximumoftensecondswaitingfortheservertocomeup  

if[$ret-eq0];then  

forxin12345678910;do  

if[-n"`$ping2>/dev/null`"];then  

break;  

else  

sleep1;  

fi  

done  

if!([-n"`$ping2>/dev/null`"]);then  

echo"TimeouterroroccurredtryingtostartMySQL  

Daemon."action$"Starting$prog:"/bin/false  

else  

action$"Starting$prog:"/bin/true  

fi  

else  

action$"Starting$prog:"/bin/false  

fi  

[$ret-eq0]&&touch/var/lock/subsys/mysqld  

return$ret  

我們看到,腳本判斷mysql是否起動,使用的是mysqladminping命令.  

而這個命令想要正確執行是需要能夠登錄mysql的.現在一些默認帳號已經刪除,而且其它帳號已經設置了密碼(默認沒有設置密碼).于是它沒有辦法連接到mysql.  

不妨使用下面的命令測試一下  

#mysqladmin-uroot-ppasswordping  

mysqlalive  

當你提供了帳號和密碼時,它的ping命令就可以正確執行了.  

這個bug在mysql新出的mysql4.x可以解決.  

但是RH9到FC3一直使用的是mysql3.x(不過mysql官方好象才推出mysql4.1,FC需要考慮問題性).  

于是我用了下面的辦法臨時解決.  

a)建立一個帳號,不設置密碼,不給任何權限.  

b)修改/etc/init.d/mysqld  

下面我給出具體操作  

#mysql-uroot-ppasswd  

mysql>GRANTselectONtest.*TOdaemon@localhost  

mysql>revokeselectontest.*fromdaemon@localhost  

打開/etc/init.d/mysqld  

把下面這行  

ping="/usr/bin/mysqladmin-uUNKNOWN_MYSQL_USERping"  

修改為  

ping="/usr/bin/mysqladmin-udaemonping"  

保存,退出.  

重新起動mysql  

#/etc/init.d/mysqldrestart  

StoppingMySQL:[OK]  

StartingMySQL:[OK]  

如果你的第二行仍然是failure的話.再執行下面的命令  

#/etc/init.d/mysqldstart  

這時應該式ok了.  

如果這樣可以ok的話.  

那么你需要修改/etc/init.d/mysqld,  

在restart函數的start后面再加一個start就可了.  

2.即使剛安裝的mysql再起動后,去看日志,給給出下面的這些信息  

CannotinitializeInnoDBas'innodb_data_file_path'isnotset.  

IfyoudonotwanttousetransactionalInnoDBtables,addaline  

skip-innodb  

tothe[mysqld]sectionofinitparametersinyourmy.cnf  

ormy.ini.IfyouwanttouseInnoDBtables,addtothe[mysqld]  

section,forexample,  

innodb_data_file_path=ibdata1:10M:autoextend  

Buttogetgoodperformanceyoushouldadjustforyourhardware  

theInnoDBstartupoptionslistedinsection2at  

這是因為默認的數據庫起動腳本需要加載innodb數據庫,但是mysql在做初始話時并沒有初始化時,并沒有加載這樣的數據庫.  

因此這里有兩種解決辦法:使用和不使用innodb.  

我們先看不使用innodb的辦法.  

其實這個方法就是跳過innodb的方法.  

在/etc/my.cnf文件的mysqld區域增加一行  

skip-innodb就可以了.  

如果我們需要使用innodb呢?  

那么可在/etc/my.cnf文件的mysqld區域增加下面幾行  

innodb_data_home_dir=/var/lib/mysql/  

innodb_data_file_path=ibdata1:10M:autoextend  

innodb_log_group_home_dir=/var/lib/mysql/  

innodb_log_arch_dir=/var/lib/mysql/  

set-variable=innodb_buffer_pool_size=16M  

set-variable=innodb_additional_mem_pool_size=2M  

set-variable=innodb_log_file_size=5M  

set-variable=innodb_log_buffer_size=8M  

innodb_flush_log_at_trx_commit=1  

set-variable=innodb_lock_wait_timeout=50  

保存,退出.重啟起動mysql,再去看日志,應該不會再提示有關innodb的問題了.  

上面就是我們扣丁學堂關于linux運維在MySQL方面遇到的問題做出的詳細的舉例說明,我們扣丁學堂不僅在linux方面擁有獨特的教學方法和方式,更是在JAVA、Python等十幾種語言方面都有杰出的老師以及配套的學習資料,具備了這么多豐厚的資源,你是否心動了,心動不如行動,趕緊行動起來,在我們扣丁學堂保證你會有不一樣的收獲,首先第一步就是加入我們的學習交流群吧!扣丁學堂Linux技術交流群:659974587。

*博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。

模擬電路相關文章:模擬電路基礎




關鍵詞:

相關推薦

技術專區

關閉