MySQL常見故障與優(yōu)化方式
一、mysql單實例常見故障
1.故障一
ERROR 2002 (HY000): Can't connect to local MySQL server through socket/data/mysql/mysql.sock'(2)
問題分析:以上這種情況一般都是數(shù)據(jù)庫未啟動或者數(shù)據(jù)庫端口被防火墻攔截導致。
解決方法:啟動數(shù)據(jù)庫或者防火墻開放數(shù)據(jù)庫監(jiān)聽端口。
2.故障二
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
問題分析:密碼不正確或者沒有權(quán)限訪問。
解決方法:
- 修改my.cnf主配置文件,在[mysqld]下添加 skip-grant-tables
- update更新user表authentication_string字段
- 重新授權(quán)
3.故障三
在使用遠程連接數(shù)據(jù)庫時偶爾會發(fā)生遠程連接數(shù)據(jù)庫很慢的問題。
問題分析:
- 如果 MySQL 主機查詢 DNS 很慢或是有很多客戶端主機時會導致連接很慢.
- 由于開發(fā)機器是不能夠連接外網(wǎng)的,在進行 MySQL 連接時,DNS 解析是不可能完成的, 從而也就明白了為什么連接那么慢了。
解決方法:
- 修改 my.cnf 主配置文件,在[mysqld]下添加 skip-name-resolve,重啟數(shù)據(jù)庫可以解決。
- 注意在以后授權(quán)里面不能再使用主機名授權(quán)。
4.故障四
Can't open file: 'xxx_forums.MYI'. (errno: 145)
問題分析:
服務(wù)器非正常關(guān)機,數(shù)據(jù)庫所在空間已滿,或一些其它未知的原因?qū)?shù)據(jù)庫表造成了損壞因拷貝數(shù)據(jù)庫導致文件的屬組發(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'
問題分析:
超出最大連接錯誤數(shù)量限制
解決方法:
清除緩存(flush-hosts關(guān)鍵字)修改mysql配置文件 (max_connect_errors=1000)
6.故障六
Too many connections
問題分析:
連接數(shù)超出MySQL的最大連接限制
解決方法:
修改MySQL配置文件 (max_connections=2000)臨時修改參數(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
問題分析:
MySQL的配置文件/etc/my.cnf 權(quá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
問題分析:
innodb數(shù)據(jù)文件損壞
解決方法:
修改 my.cnf 配置文件 (innodb_force_recovery=4)啟動數(shù)據(jù)庫后備份數(shù)據(jù)文件利用備份文件恢復(fù)數(shù)據(jù)
二、主從環(huán)境常見故障
1.故障一
從庫的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).
問題分析:
主庫和從庫的server-id值一樣
解決方法:
修改從庫的 server-id 的值,修改為和主庫不一樣重新啟動數(shù)據(jù)庫并再次同步
2. 故障二
從庫的Slave_lO_Running為NO
問題分析:
主鍵沖突或者主庫刪除或更新數(shù)據(jù),從庫內(nèi)找不到記錄,數(shù)據(jù)被修改導致
解決方法:
方法一
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
問題分析:
從庫的中繼日志 relay-bin 損壞
解決方法:
手工修復(fù),重新找到同步的 binlog 和 pos 點,然后重新同步即可
mysqI> CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.xxx',MASTER_LOG_POS=xxx;
三、mysql優(yōu)化
可以從不同角度進行優(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ò):標配的千兆網(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.查詢時盡量減少邏輯運算
4.減少不當?shù)牟樵冋Z句,不要查詢應(yīng)用中不需要的列
5.減少事務(wù)包大小
6.將多個小的查詢適當合并成一個大的查詢,減少每次建立/關(guān)閉查詢的開銷
7.將某些過于復(fù)雜的查詢拆解成多個小查詢,和上一條正好相反
8.建立和優(yōu)化存儲過程來代替大量的外部程序交互
3.操作系統(tǒng)的優(yōu)化
網(wǎng)卡bond技術(shù)
設(shè)置TCP連接數(shù)量限制,優(yōu)化系統(tǒng)打開文件的最大限制
使用64位操作系統(tǒng),64位系統(tǒng)可以分給單個進程更多內(nèi)存,計算更快
禁止不必要啟動的服務(wù)
4.my.cnf內(nèi)參數(shù)的優(yōu)化
4.1連接參數(shù):
- max_connections:限制并發(fā)連接數(shù),根據(jù)應(yī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:對于MyISAM表,這個參數(shù)表示鍵緩存的大小
4.3日志設(shè)置:
- log_error:指定錯誤日志文件的路徑
- slow_query_log:啟動慢查詢?nèi)罩荆瑤椭R別需要優(yōu)化的查詢
- general_log:啟動通用查詢?nèi)罩?,用于調(diào)試目的
4.4lnnoDB參數(shù)設(shè)置:
- lnnodb_log_file_size:設(shè)置lnnoDB事務(wù)日志文件的大小
- innodb_flush_log_at_trx_commit:控制事務(wù)提交時日志刷新的行為
- innodb_file_per_table:對于innoDB表,啟動獨立表空間
4.5查詢緩存和臨時表位置:
- query_cache_type和query_cache_size:如果使用查詢緩存,可以設(shè)置緩存的類型和大小
- tmp_table_size和max_heap_table_size:控制臨時表的內(nèi)存和磁盤使用
4.6其他參數(shù):
- table_open_cache:設(shè)置打開表的緩存數(shù)量,以提高性能
- innodb_io_capacity:設(shè)置lnnoDB的I/O容量,適應(yīng)存儲設(shè)備的性能
- skip-name-reslove:禁止使用使用DNS查找,只能使用ip地址
4.7安全參數(shù):
- secure_fiel_priv:限制導入/導出數(shù)據(jù)的目錄
- skip_networking:禁止網(wǎng)絡(luò)連接,只允許本地連接
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
用命令創(chuàng)建MySQL數(shù)據(jù)庫(de1)的方法
下面小編就為大家?guī)硪黄妹顒?chuàng)建MySQL數(shù)據(jù)庫(de1)的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03
window10系統(tǒng)下mysql5.7安裝審計插件(親測有用)
mysql有沒oracle這樣的審計功能,突然想在mysql做審計怎么辦,下面帶大家從零開始給mysql安裝審計插件,親測絕對可用哦,需要的朋友可以參考下2022-09-09
mysql數(shù)據(jù)庫表增添字段,刪除字段,修改字段的排列等操作
這篇文章主要介紹了mysql數(shù)據(jù)庫表增添字段,刪除字段,修改字段的排列等操作,修改表指的是修改數(shù)據(jù)庫之后中已經(jīng)存在的數(shù)據(jù)表的結(jié)構(gòu)2022-07-07
mysql備份恢復(fù)mysqldump.exe幾個常用用例
收集了,一個整理不錯的,mysql備份與恢復(fù)用法2008-08-08

