MySQL常見故障與優(yōu)化方式
一、mysql單實(shí)例常見故障
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ù)或者防火墻開放數(shù)據(jù)庫(kù)監(jiān)聽端口。
2.故障二
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
問(wèn)題分析:密碼不正確或者沒有權(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)致連接很慢.
- 由于開發(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)境常見故障
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),盡量避免諸如防火墻策略等不必要的開銷
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)閉查詢的開銷
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)打開文件的最大限制
使用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)建和銷毀線程的開銷
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è)置打開表的緩存數(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導(dǎo)入.CSV數(shù)據(jù)中文亂碼的解決方式
當(dāng)將xls或xlsx文件轉(zhuǎn)換為CSV并導(dǎo)入數(shù)據(jù)庫(kù)時(shí),可能出現(xiàn)亂碼,原因是編碼格式不是UTF-8,解決方法是使用Notepad或記事本打開CSV文件,所以本文給大家介紹了MySQL導(dǎo)入.CSV數(shù)據(jù)中文亂碼的解決方式,需要的朋友可以參考下2024-08-08
MySQL時(shí)間類型與Java日期時(shí)間類對(duì)應(yīng)關(guān)系示例詳解
在開發(fā)中數(shù)據(jù)庫(kù)和編程語(yǔ)言通常需要處理日期和時(shí)間數(shù)據(jù),MySQL數(shù)據(jù)庫(kù)和Java編程語(yǔ)言都提供了各種時(shí)間類型來(lái)處理日期和時(shí)間數(shù)據(jù),這篇文章主要介紹了MySQL時(shí)間類型與Java日期時(shí)間類對(duì)應(yīng)關(guān)系的相關(guān)資料,需要的朋友可以參考下2025-08-08
Docker安裝mysql配置大小寫不敏感掛載數(shù)據(jù)卷存儲(chǔ)操作步驟
這篇文章主要介紹了Docker安裝mysql配置大小寫不敏感掛載數(shù)據(jù)卷存儲(chǔ)操作步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11
MySQL表空間結(jié)構(gòu)詳解表空間到段頁(yè)操作
在MySQL架構(gòu)和存儲(chǔ)引擎專題中介紹了使用不同存儲(chǔ)引擎創(chuàng)建表時(shí)生成的表空間數(shù)據(jù)文件,在本章節(jié)主要介紹使用InnoDB存儲(chǔ)引擎創(chuàng)建表時(shí)生成的表空間數(shù)據(jù)文件,對(duì)mysql表空間結(jié)構(gòu)及表空間到段頁(yè)相關(guān)知識(shí)感興趣的朋友一起看看吧2025-05-05
MySQL 中查詢 VARCHAR 類型 JSON 數(shù)據(jù)的問(wèn)題記錄
在數(shù)據(jù)庫(kù)設(shè)計(jì)中,有時(shí)我們會(huì)將 JSON 數(shù)據(jù)存儲(chǔ)在 VARCHAR 或 TEXT 類型字段中,本文將詳細(xì)介紹如何在 MySQL 中有效查詢存儲(chǔ)為 VARCHAR 類型的 JSON 數(shù)據(jù),感興趣的朋友一起看看吧2025-04-04

