標籤:
前言
在MySQL日常開發或者是維護中,有一些問題或是故障往往是難以避免的,如丟失密碼、表損壞。在此總結一下常見的問題,以備今後所需。
忘記MySQL的root密碼
解決辦法:
1.登入資料庫所在伺服器,手動kill掉Mysql進程
關閉進程的命令為:kill 進程號(linux下)
關閉進程的命令為:taskkill 進程號(win下)
怎麼查看進程號呢?
我們都知道MySQL的進程號一般都會儲存在Mysql資料目錄下的,它記錄了Mysql的服務進程號。檔案名稱為hostname.pid,如下,其中YEGZT8JOIIU2LKY為主機名稱。
linux下查看進程通過使用ps命令;在win下,我們也可以通過tasklist查看進程號,
開啟該檔案,可以看到,裡面僅僅記錄著進程好
現在為了方便,我主要示範win下操作,不準備開啟虛擬機器在測試了。如果我們不熟悉taskkill命令,可以通過taskkill /?來查看命令。
2.使用–skip-grant-tables選項重啟MySQL服務
linux下
文法:./bin/mysqld_safe –skip-grant-tables
其中–skip-grant-tables選項代表啟動mysql
(注意win下安裝的Mysql,我使用mysqld –skip-grant-tables )
3.使用空密碼的root使用者串連MySQL,並修改root口令
修改如下
因為使用–skip-grant-tables啟動,故使用set password命令失敗。
使用update語句,直接更新mysql資料庫中user表。
4.更新許可權
5.重新登入
退出後,發現在此使用mysql -uroot登入,會登陸不成功,只能使用密碼登陸。
處理MyISAM儲存引擎的表損壞
在使用MySQL,可能會遇到過MyISAM儲存引擎的表損壞的情況。如以下情況:
- .frm被鎖定不能修改
- 找不到.myi檔案(索引檔案)
- 我呢間意外結束
- 記錄檔案被毀壞
- 從表處理器得到錯誤nnn
解決辦法1
使用MySQL內建的myisamchk工具進行修複
開啟bin目錄,可以看到該工具
命令如下
myisamchk -r tablename
r代表recover
或
myisamchk -o tablename
-o參數代表–safe-recover 可以進行更安全的修複
解決辦法2
使用MySQL的CHECK table和repair table命令進行修複
check table用來檢查表是否有損壞,repair table用來對壞表進行修複。
MyISAM表過大,無法訪問問題
首先我們可以通過myisamchk命令來查看MyISAM表的情況。如,我查看admin表
datefile length代表當前檔案大小
keyfile length代表索引檔案大小
max datefile length 最大檔案大小
max keyfile length 最大索引大小
可以通過如下命令來進行擴充資料檔案大小
alter table table_name MAX_ROWS=88888888 AVG_ROW_LE=66666
資料目錄磁碟空間不足的問題針對MyISAM儲存引擎
可以將資料目錄和索引目錄存放到不同的磁碟空間。
針對InnoDB儲存引擎
對於InnoDB儲存引擎的表,因為資料檔案和索引檔案時存放在一起的。所以無法將他們分離。當磁碟空間出現不足時候,可以增加一個新的資料檔案,這個檔案放在有充足空間的磁碟上。具體實現是通過InnoDB_data_file_path中增加此檔案。
innodb_data_file_path=/home/mysql/data:10000M;/user/mysql/data:10000M:autoextend
參數修改之後,需要重啟伺服器,才可以生效。
同一台主機上安裝多個Mysql
除了每個Mysql安裝目錄不能相同外,還需要的是port和socket不能一樣。
mysql.sock就是用戶端串連與mysql間通訊用的。socket檔案,只能本機使用,遠端連線要通過tcp/ip了。
總結
時隔一個月了,方將《MySQL資料庫開發、最佳化與管理維護》閱讀完。感覺這本書還是相當不錯的,挺適合像我這樣的初學者。在閱讀過程中,感覺受益頗多。
MySQL常見問題和應用技巧