mysql數(shù)據(jù)庫(kù)連接造量sleep狀態(tài)辦
創(chuàng)新互聯(lián)從2013年成立,先為海興等服務(wù)建站,海興等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為海興企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
用navicat自備份mysql數(shù)據(jù)庫(kù):
1、啟navicat軟件使用連接mysql數(shù)據(jù)庫(kù)
2、隨彈隨意起連接名;輸入主機(jī)名/ip填寫mysql數(shù)據(jù)庫(kù)所服務(wù)器ip址用戶名密碼mysql數(shù)據(jù)庫(kù)root密碼
3、左邊列數(shù)據(jù)庫(kù)連接名快捷式雙擊列mysql面所數(shù)據(jù)庫(kù)等同于show databases命令圖172..16.20.69:
4、單擊選定需要備份數(shù)據(jù)庫(kù)點(diǎn)項(xiàng)計(jì)劃任務(wù)翻譯計(jì)畫任務(wù)圖:
5、點(diǎn)擊創(chuàng)建批處理任務(wù)
6、彈新窗口雙擊用任務(wù)Backup【數(shù)據(jù)庫(kù)名稱】面選擇任務(wù)框現(xiàn)選取Backup 【數(shù)據(jù)庫(kù)名稱】備份庫(kù)比圖wakawaka數(shù)據(jù)庫(kù)
7、點(diǎn)擊"保存" 隨意輸入文件名比 chuxuefeng-wakawaka
8、返 Navicat for MySQL 窗口打hl2庫(kù)計(jì)畫任務(wù)看計(jì)畫任務(wù)chuxuefeng-wakawakachuxuefeng-wakawaka點(diǎn)右鍵選擇設(shè)置計(jì)畫任務(wù)
9、新窗口選擇計(jì)劃頁(yè)新建計(jì)劃高級(jí)選項(xiàng)勾選重復(fù)任務(wù)
10、打高級(jí)選項(xiàng)設(shè)定每少備份持續(xù)間選擇9999設(shè)置每每隔3備份實(shí)際般設(shè)定每0:00備份行具體間間隔視服務(wù)器情況定
11、設(shè)置完計(jì)劃任務(wù)系統(tǒng)要求輸入windows本機(jī)administrator密碼
12、現(xiàn)做計(jì)劃任務(wù)數(shù)據(jù)庫(kù)每隔設(shè)定段間自備份自備份文件名按間排序名稱按照設(shè)定名稱備份需要恢復(fù)備份按間恢復(fù)數(shù)據(jù)
13、需要恢復(fù)數(shù)據(jù)雙擊相應(yīng)備份文件點(diǎn)擊始恢復(fù)數(shù)據(jù)
第一階段:
1,一定要正確設(shè)計(jì)索引
2,一定要避免SQL語(yǔ)句全表掃描,所以SQL一定要走索引(如:一切的 != 等等之類的寫法都會(huì)導(dǎo)致全表掃描)
3,一定要避免 limit 10000000,20 這樣的查詢
4,一定要避免 LEFT JOIN 之類的查詢,不把這樣的邏輯處理交給數(shù)據(jù)庫(kù)
5,每個(gè)表索引不要建太多,大數(shù)據(jù)時(shí)會(huì)增加數(shù)據(jù)庫(kù)的寫入壓力
第二階段:
1,采用分表技術(shù)(大表分小表)
a)垂直分表:將部分字段分離出來(lái),設(shè)計(jì)成分表,根據(jù)主表的主鍵關(guān)聯(lián)
b)水平分表:將相同字段表中的記錄按照某種Hash算法進(jìn)行拆分多個(gè)分表
2,采用mysql分區(qū)技術(shù)(必須5.1版以上,此技術(shù)完全能夠?qū)筄racle),與水平分表有點(diǎn)類似,但是它是在邏輯層進(jìn)行的水平分表
第三階段(服務(wù)器方面):
1,采用memcached之類的內(nèi)存對(duì)象緩存系統(tǒng),減少數(shù)據(jù)庫(kù)讀取操作
2,采用主從數(shù)據(jù)庫(kù)設(shè)計(jì),分離數(shù)據(jù)庫(kù)的讀寫壓力
3,采用Squid之類的代理服務(wù)器和Web緩存服務(wù)器技術(shù)
PS:由于篇幅問(wèn)題,我只簡(jiǎn)單說(shuō)一些基本概念,其實(shí)里面每個(gè)知識(shí)點(diǎn)關(guān)系到的內(nèi)容都很多。特別是第一階段,很多工作幾年的程序員,都不能完全理解。我覺(jué)得要真正理解索引,最好的辦法就是在1000W-億級(jí)以上的數(shù)據(jù),進(jìn)行測(cè)試SQL語(yǔ)句,再結(jié)合 explain 命令進(jìn)行查看SQL語(yǔ)句索引情況。
我們經(jīng)常會(huì)遇到操作一張大表,發(fā)現(xiàn)操作時(shí)間過(guò)長(zhǎng)或影響在線業(yè)務(wù)了,想要回退大表操作的場(chǎng)景。在我們停止大表操作之后,等待回滾是一個(gè)很漫長(zhǎng)的過(guò)程,盡管你可能對(duì)知道一些縮短時(shí)間的方法,處于對(duì)生產(chǎn)環(huán)境數(shù)據(jù)完整性的敬畏,也會(huì)選擇不做介入。最終選擇不作為的原因大多源于對(duì)操作影響的不確定性。實(shí)踐出真知,下面針對(duì)兩種主要提升事務(wù)回滾速度的方式進(jìn)行驗(yàn)證,一種是提升操作可用內(nèi)存空間,一種是通過(guò)停實(shí)例,禁用 redo 回滾方式進(jìn)行進(jìn)行驗(yàn)證。
仔細(xì)閱讀過(guò)官方手冊(cè)的同學(xué),一定留意到了對(duì)于提升大事務(wù)回滾效率,官方提供了兩種方法:一是增加 innodb_buffer_pool_size 參數(shù)大小,二是合理利用 innodb_force_recovery=3 參數(shù),跳過(guò)事務(wù)回滾過(guò)程。第一種方式比較溫和,innodb_buffer_pool_size 參數(shù)是可以動(dòng)態(tài)調(diào)整的,可行性也較高。第二種方式相較之下較暴力,但效果較好。
兩種方式各有自己的優(yōu)點(diǎn),第一種方式對(duì)線上業(yè)務(wù)系統(tǒng)影響較小,不會(huì)中斷在線業(yè)務(wù)。第二種方式效果更顯著,會(huì)短暫影響業(yè)務(wù)連續(xù),回滾所有沒(méi)有提交的事務(wù)。
-- 判斷存儲(chǔ)test是否存在,如果存在則刪除
DROP PROCEDURE IF EXISTS test;
-- 創(chuàng)建存儲(chǔ)過(guò)程
CREATE PROCEDURE test()
BEGIN
-- 聲明循環(huán)變量int型 i
DECLARE i INT DEFAULT 1;
-- 設(shè)置i=0
set i=0;
-- 循環(huán)100次
while i100 do
-- if判斷i為偶數(shù)
if i%2 = 0 THEN
-- 要實(shí)現(xiàn)的操作? CONCAT(str1,str2,...) concat函數(shù)用于拼接子串和數(shù)字類型
INSERT into user(name,addr) VALUES(CONCAT('test',i,'ss'),'addr');
end if;
-- i自增
set i=i+1;
END WHILE;
END;
-- 調(diào)用存儲(chǔ)過(guò)程
CALL test()