MySQL常見(jiàn)故障與優(yōu)化方式
一、mysql單實(shí)例常見(jiàn)故障
1.故障一
ERROR 2002 (HY000): Can't connect to local MySQL server through socket/data/mysql/mysql.sock'(2)
問(wèn)題分析:以上這種情況一般都是數(shù)據(jù)庫(kù)未啟動(dòng)或者數(shù)據(jù)庫(kù)端口被防火墻攔截導(dǎo)致。
解決方法:?jiǎn)?dòng)數(shù)據(jù)庫(kù)或者防火墻開(kāi)放數(shù)據(jù)庫(kù)監(jiān)聽(tīng)端口。
2.故障二
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
問(wèn)題分析:密碼不正確或者沒(méi)有權(quán)限訪問(wèn)。
解決方法:
- 修改my.cnf主配置文件,在[mysqld]下添加 skip-grant-tables
- update更新user表authentication_string字段
- 重新授權(quán)
3.故障三
在使用遠(yuǎn)程連接數(shù)據(jù)庫(kù)時(shí)偶爾會(huì)發(fā)生遠(yuǎn)程連接數(shù)據(jù)庫(kù)很慢的問(wèn)題。
問(wèn)題分析:
- 如果 MySQL 主機(jī)查詢 DNS 很慢或是有很多客戶端主機(jī)時(shí)會(huì)導(dǎo)致連接很慢.
- 由于開(kāi)發(fā)機(jī)器是不能夠連接外網(wǎng)的,在進(jìn)行 MySQL 連接時(shí),DNS 解析是不可能完成的, 從而也就明白了為什么連接那么慢了。
解決方法:
- 修改 my.cnf 主配置文件,在[mysqld]下添加 skip-name-resolve,重啟數(shù)據(jù)庫(kù)可以解決。
- 注意在以后授權(quán)里面不能再使用主機(jī)名授權(quán)。
4.故障四
Can't open file: 'xxx_forums.MYI'. (errno: 145)
問(wèn)題分析:
服務(wù)器非正常關(guān)機(jī),數(shù)據(jù)庫(kù)所在空間已滿,或一些其它未知的原因?qū)?shù)據(jù)庫(kù)表造成了損壞因拷貝數(shù)據(jù)庫(kù)導(dǎo)致文件的屬組發(fā)生變化
解決方法:
修復(fù)數(shù)據(jù)表 (myisamchk、phpMyAdmin)修改文件的屬組
5.故障五
ERROR 1129 (HY000): Host 'xxx.xxx.xxx.xxx' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
問(wèn)題分析:
超出最大連接錯(cuò)誤數(shù)量限制
解決方法:
清除緩存(flush-hosts關(guān)鍵字)修改mysql配置文件 (max_connect_errors=1000)
6.故障六
Too many connections
問(wèn)題分析:
連接數(shù)超出MySQL的最大連接限制
解決方法:
修改MySQL配置文件 (max_connections=2000)臨時(shí)修改參數(shù):set GLOBAL max_connections=2000;
7.故障七
Warning:World-writable config file '/etc/my.cnf' is ignoredERROR! MySQL is running but PlD file could not be found
問(wèn)題分析:
MySQL的配置文件/etc/my.cnf 權(quán)限問(wèn)題
解決方法:
chmod 644 /etc/my.cnf
8.故障八
InnoDB:Error: page 14178 log sequence number 29455369832InnoDB: is in the future! Current system log sequence number 29455369832
問(wèn)題分析:
innodb數(shù)據(jù)文件損壞
解決方法:
修改 my.cnf 配置文件 (innodb_force_recovery=4)啟動(dòng)數(shù)據(jù)庫(kù)后備份數(shù)據(jù)文件利用備份文件恢復(fù)數(shù)據(jù)
二、主從環(huán)境常見(jiàn)故障
1.故障一
從庫(kù)的Slave_lO_Running為NO
The slave I/O thread stops because master and slave have equal MySQL serverids; these ids must be different for replication to work (or the --replicate-same-server-idoption must be used on slave but this does not always make sense;please check the manual before using it).
問(wèn)題分析:
主庫(kù)和從庫(kù)的server-id值一樣
解決方法:
修改從庫(kù)的 server-id 的值,修改為和主庫(kù)不一樣重新啟動(dòng)數(shù)據(jù)庫(kù)并再次同步
2. 故障二
從庫(kù)的Slave_lO_Running為NO
問(wèn)題分析:
主鍵沖突或者主庫(kù)刪除或更新數(shù)據(jù),從庫(kù)內(nèi)找不到記錄,數(shù)據(jù)被修改導(dǎo)致
解決方法:
方法一
mysql> stop slave; mysqI> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; mysql> start slave;
方法二
set global read_only=true;
3. 故障三
Error initializing relay log position: I/O error reading the header from the binary log
問(wèn)題分析:
從庫(kù)的中繼日志 relay-bin 損壞
解決方法:
手工修復(fù),重新找到同步的 binlog 和 pos 點(diǎn),然后重新同步即可
mysqI> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.xxx',MASTER_LOG_POS=xxx;
三、mysql優(yōu)化
可以從不同角度進(jìn)行優(yōu)化:
- 硬件優(yōu)化
- MySQL配置文件優(yōu)化
- SQL優(yōu)化
- MySQL架構(gòu)優(yōu)化
1.硬件優(yōu)化
cpu:64位,高主頻,高緩存,高并行處理能力
內(nèi)存:大內(nèi)存,主頻高,盡量不要使用SWAP
硬盤:15000轉(zhuǎn),RAID5 ,RAID10 ,SSD
網(wǎng)絡(luò):標(biāo)配的千兆網(wǎng)卡,10G網(wǎng)卡,bond0,MySQL服務(wù)器盡可能和使用它的web服務(wù)器在同一局域網(wǎng)內(nèi),盡量避免諸如防火墻策略等不必要的開(kāi)銷
2.查詢優(yōu)化
1.優(yōu)化建表結(jié)構(gòu)
2.建立合適的索引
3.查詢時(shí)盡量減少邏輯運(yùn)算
4.減少不當(dāng)?shù)牟樵冋Z(yǔ)句,不要查詢應(yīng)用中不需要的列
5.減少事務(wù)包大小
6.將多個(gè)小的查詢適當(dāng)合并成一個(gè)大的查詢,減少每次建立/關(guān)閉查詢的開(kāi)銷
7.將某些過(guò)于復(fù)雜的查詢拆解成多個(gè)小查詢,和上一條正好相反
8.建立和優(yōu)化存儲(chǔ)過(guò)程來(lái)代替大量的外部程序交互
3.操作系統(tǒng)的優(yōu)化
網(wǎng)卡bond技術(shù)
設(shè)置TCP連接數(shù)量限制,優(yōu)化系統(tǒng)打開(kāi)文件的最大限制
使用64位操作系統(tǒng),64位系統(tǒng)可以分給單個(gè)進(jìn)程更多內(nèi)存,計(jì)算更快
禁止不必要啟動(dòng)的服務(wù)
4.my.cnf內(nèi)參數(shù)的優(yōu)化
4.1連接參數(shù):
- max_connections:限制并發(fā)連接數(shù),根據(jù)應(yīng)用需求適當(dāng)調(diào)整
- thread_cache_size:控制線程緩存的大小,以減少創(chuàng)建和銷毀線程的開(kāi)銷
4.2緩存池設(shè)置:
- innodb_buffer_pool_size:設(shè)置lnnoDB緩沖池的大小,通常建議設(shè)置為物理內(nèi)存的50%-70%
- key_buffer_size:對(duì)于MyISAM表,這個(gè)參數(shù)表示鍵緩存的大小
4.3日志設(shè)置:
- log_error:指定錯(cuò)誤日志文件的路徑
- slow_query_log:?jiǎn)?dòng)慢查詢?nèi)罩?,幫助識(shí)別需要優(yōu)化的查詢
- general_log:啟動(dòng)通用查詢?nèi)罩荆糜谡{(diào)試目的
4.4lnnoDB參數(shù)設(shè)置:
- lnnodb_log_file_size:設(shè)置lnnoDB事務(wù)日志文件的大小
- innodb_flush_log_at_trx_commit:控制事務(wù)提交時(shí)日志刷新的行為
- innodb_file_per_table:對(duì)于innoDB表,啟動(dòng)獨(dú)立表空間
4.5查詢緩存和臨時(shí)表位置:
- query_cache_type和query_cache_size:如果使用查詢緩存,可以設(shè)置緩存的類型和大小
- tmp_table_size和max_heap_table_size:控制臨時(shí)表的內(nèi)存和磁盤使用
4.6其他參數(shù):
- table_open_cache:設(shè)置打開(kāi)表的緩存數(shù)量,以提高性能
- innodb_io_capacity:設(shè)置lnnoDB的I/O容量,適應(yīng)存儲(chǔ)設(shè)備的性能
- skip-name-reslove:禁止使用使用DNS查找,只能使用ip地址
4.7安全參數(shù):
- secure_fiel_priv:限制導(dǎo)入/導(dǎo)出數(shù)據(jù)的目錄
- skip_networking:禁止網(wǎng)絡(luò)連接,只允許本地連接
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL深分頁(yè)問(wèn)題解決的實(shí)戰(zhàn)記錄
優(yōu)化項(xiàng)目代碼過(guò)程中發(fā)現(xiàn)一個(gè)千萬(wàn)級(jí)數(shù)據(jù)深分頁(yè)問(wèn)題,覺(jué)著有必要給大家總結(jié)整理下,這篇文章主要給大家介紹了關(guān)于解決MySQL深分頁(yè)問(wèn)題的相關(guān)資料,需要的朋友可以參考下2021-09-09用命令創(chuàng)建MySQL數(shù)據(jù)庫(kù)(de1)的方法
下面小編就為大家?guī)?lái)一篇用命令創(chuàng)建MySQL數(shù)據(jù)庫(kù)(de1)的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03window10系統(tǒng)下mysql5.7安裝審計(jì)插件(親測(cè)有用)
mysql有沒(méi)oracle這樣的審計(jì)功能,突然想在mysql做審計(jì)怎么辦,下面帶大家從零開(kāi)始給mysql安裝審計(jì)插件,親測(cè)絕對(duì)可用哦,需要的朋友可以參考下2022-09-09mysql數(shù)據(jù)庫(kù)表增添字段,刪除字段,修改字段的排列等操作
這篇文章主要介紹了mysql數(shù)據(jù)庫(kù)表增添字段,刪除字段,修改字段的排列等操作,修改表指的是修改數(shù)據(jù)庫(kù)之后中已經(jīng)存在的數(shù)據(jù)表的結(jié)構(gòu)2022-07-07mysql中索引與FROM_UNIXTIME的問(wèn)題
這篇文章主要介紹了mysql中索引與FROM_UNIXTIME的問(wèn)題的相關(guān)資料,需要的朋友可以參考下2017-05-05mysql中g(shù)eneral_log日志知識(shí)點(diǎn)介紹
這篇文章主要介紹了mysql中g(shù)eneral_log日志知識(shí)點(diǎn)的介紹以及其他相關(guān)內(nèi)容,以后興趣的朋友們學(xué)習(xí)下。2019-08-08mysql備份恢復(fù)mysqldump.exe幾個(gè)常用用例
收集了,一個(gè)整理不錯(cuò)的,mysql備份與恢復(fù)用法2008-08-08