Linux運維工程師工作手冊簿_第1頁
Linux運維工程師工作手冊簿_第2頁
Linux運維工程師工作手冊簿_第3頁
Linux運維工程師工作手冊簿_第4頁
Linux運維工程師工作手冊簿_第5頁
已閱讀5頁,還剩15頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

實用文案文案大全Linux運維工程師工作手冊釋放內存:sync

echo

3

>

/proc/sys/vm/drop_caches

Linux查看Dell服務器型號

命令:

dmidecode

|

grep

"Product

Name"

查看系統負載:

cat

/proc/loadavg

0.0

0.00

0.00

1/283

10904

意思是:前三個是系統負載,1/283中,1代表此時運行隊伍中的進程個數,而283是代表此時的進程總數

10904到此為止,最后創建的一個進程ID。

系統裝好后,要做的事如下:

關閉防火墻Selinux:

vim

/etc/selinux/config

把SELINUX=enforcing改成SELINUX=disabled

更改主機名:

vim

/etc/sysconfig/network

修改主機名,不要用localhost

添加hosts主機記錄

vim

/etc/hosts中,在后面,添加自己的主機名

創建0-9

a-z目錄

for

i

in

`seq

0

9`

{a..z};do

mkdir

-p

$i;done:

測試硬盤性能工具:iozone

監視服務器每少上下文切換數次工具:Nmon(很不錯的性能監視工具)

#占用內存大小前10的進程

ps

-eo

comm,size

--sort

-size

|

head

-10

#占用cpu使用前10的進程

ps

-eo

comm,pcpu

--sort

-pcpu

|

head

-10

一、Apache服務優化:

2

1.配置cronolog進行日志輪詢

2

2.錯誤頁面優雅顯示

2

3.mod_deflate文件壓縮功能

3

4.mod_expires緩存功能

4

5.更改apache的默認用戶

5

6.worker模式,提升并發數(可以達到2000-5000)

5

7.屏蔽apache版本等敏感信息

6

8.apache目錄文件權限設置(root,目錄755,文件644)

6

9.開啟httpd-mpm.conf

增加連接數

6

10.

apache防盜鏈功能

8

11.禁止目錄Index

8

12.

禁止用戶覆蓋(重載)

8

13.關閉CGI

9

14.避免使用.htaccess文件(分布式配置文件)

9

15.

apache的安全模塊

9

16.正確途徑取得源代碼,勤打apache補丁

10

17.apache日志授予root

700權限

10

18.系統內核參數優化

10

19.禁止PHP解析指定站點的目錄

10

20.使用tmpfs文件系統替代頻繁訪問的目錄

11

21盡可能減少

HTTP

請求數

11

22使用CDN做網站加速

12

查看你的服務器網絡連接狀態

netstat

-n

|

awk

'/^tcp/

{++S[$NF]}

END

{for(a

in

S)

print

a,

S[a]}'

◆CLOSED:無連接是活動的或正在進行

◆LISTEN:服務器在等待進入呼叫

◆SYN_RECV:一個連接請求已經到達,等待確認

◆SYN_SENT:應用已經開始,打開一個連接

◆ESTABLISHED:正常數據傳輸狀態

◆FIN_WAIT1:應用說它已經完成

◆FIN_WAIT2:另一邊已同意釋放

◆ITMED_WAIT:等待所有分組死掉

◆CLOSING:兩邊同時嘗試關閉

◆TIME_WAIT:另一邊已初始化一個釋放

◆LAST_ACK:等待所有分組死掉

ESTABLISHED的值其實也是當前的并發數,這個可重點關注下;另外,可關注下TIME——WAIT這項的數值。Linux下高并發的Squid服務器,TCP

TIME_WAIT套接字數量經常達到兩、三萬,服務器很容易被拖死。通過修改Linux內核參數,可以減少Squid服務器的TIME_WAIT套接字數量。

#查看系統本地可用端口極限值

cat

/proc/sys/net/ipv4/ip_local_port_range

尋找惡意IP并用iptables禁止掉

netstat

-an|

grep

:80

|

grep

-v

|awk

'{

print

$5

}'

|

sort|awk

-F:

'{print

$1,$4}'

|

uniq

-c

|

awk

'$1

>50

{print

$1,$2}'

4.5備份單個數據庫

mysqldump

-u

用戶

–p’密碼’

--default-character-set=latin1

數據庫名

>

備份文件名(數據庫默認編碼是latin1)

普通備份:

mysqldump

-uroot

-p'oldboy123'

oldboy

>

/server/bak/oldboy.sql

壓縮備份:

mysqldump

-uroot

-p'oldboy123'

oldboy

|gzip

>

/server/bak/oldboy.sql.gz

設置字符集備份:

mysqldump

-uroot

-p'oldboy123'

oldboy

--default-character-set=gbk

|gzip

>

/server/bak/oldboy.sql.gz

執行結果:

[root@oldboy

~]#

mkdir

/server/bak

-p

[root@oldboy

~]#

mysqldump

-uroot

-p'oldboy123'

oldboy

>

/server/ba

backup/

bak/

[root@oldboy

~]#

mysqldump

-uroot

-p'oldboy123'

oldboy

>

/server/bak/oldboy.sql

[root@oldboy

~]#

mysqldump

-uroot

-p'oldboy123'

oldboy

|gzip

>

/server/bak/oldboy.sql.gz

[root@oldboy

~]#

ls

-l

/server/bak/

total

8

-rw-r--r--

1

root

root

1991

Apr

9

00:51

oldboy.sql

-rw-r--r--

1

root

root

801

Apr

9

00:51

oldboy.sql.gz

4.6

mysqldump在做啥?

mysqldump實際上就是把數據從mysql庫里以邏輯的sql語句的形式導出。

備份的數據過濾掉注釋:

[root@oldboy

~]#

egrep

-v

"\*|--|^$"

/server/bak/oldboy.sql

DROP

TABLE

IF

EXISTS

`test`;CREATE

TABLE

`test`

(

`id`

int(4)

NOT

NULL

AUTO_INCREMENT,

`name`

char(20)

NOT

NULL,

PRIMARY

KEY

(`id`)

)

ENGINE=MyISAM

AUTO_INCREMENT=12

DEFAULT

CHARSET=gbk;

LOCK

TABLES

`test`

WRITE;

INSERT

INTO

`test`

VALUES

(1,'zhaoyue'),(2,'jesse'),(4,'elain'),(5,'wodi'),(6,'yingsui'),(7,'zhangyang'),(8,'zaixiangpan'),(9,'??????'),(10,'鑰佺敺瀛?),(11,'鎴?);

<==這里是亂碼,是因為導出時的格式沒加字符集,而系統當前字符集又是zh_cn.gb18030格式,一般恢復到數據庫里會正常,只是系統外查看不正常而已。另外insert是批量插入的方式,這樣在恢復時效率很高。

UNLOCK

TABLES;

提示:看到了吧,就是我們曾經插入的表和數據。

[root@oldboy

~]#

mysqldump

-uroot

-p'oldboy123'

oldboy

--default-character-set=gbk

>

/server/bak/oldboy-gbk.sql

[root@oldboy

~]#

egrep

-v

"\*|--|^$"

/server/bak/oldboy-gbk.sql

DROP

TABLE

IF

EXISTS

`test`;

CREATE

TABLE

`test`

(

`id`

int(4)

NOT

NULL

AUTO_INCREMENT,

`name`

char(20)

NOT

NULL,

PRIMARY

KEY

(`id`)

)

ENGINE=MyISAM

AUTO_INCREMENT=12

DEFAULT

CHARSET=gbk;

LOCK

TABLES

`test`

WRITE;

INSERT

INTO

`test`

VALUES

(1,'zhaoyue'),(2,'jesse'),(4,'elain'),(5,'wodi'),(6,'yingsui'),(7,'zhangyang'),(8,'zaixiangpan'),(9,'??????'),(10,'老男孩'),(11,'我');

<==。其他亂碼是當初插入時就有問題的。

UNLOCK

TABLES;

4.7備份多個庫

[root@oldboy

~]#

mysqldump

-uroot

-p'oldboy123'

-B

oldboy

mysql

--default-character-set=gbk

>

/server/bak/oldboy-gbk-muli.sql

提示:-B參數是關鍵,表示接多個庫。

※※※※※(生產環境常用)

-B,

--databases

To

dump

several

databases.

Note

the

difference

in

usage;

In

this

case

no

tables

are

given.

All

name

arguments

are

regarded

as

databasenames.

'USE

db_name;'

will

be

included

in

the

output.

參數說明:該參數用于導出若干個數據庫,在備份結果中會加入USE

db_name和CREATE

DATABASE

`db_name`;

-B后的參數都將被作為數據庫名。該參數比較常用。當-B后的數據庫列全時

-A參數。請看-A的說明。

4.8備份單個表

mysqldump

-u

用戶名

-p

數據庫名

表名>

備份的文件名

mysqldump

-u

root

-p

oldboy

test>

oldboy_oldboy.sql

執行結果:

[root@oldboy

~]#

mysqldump

-uroot

-p'oldboy123'

oldboy

test

--default-character-set=gbk

>

/server/bak/oldboy-gbk-single.sql

提示:無-B參數,庫oldboy后面就是test表了。

4.9備份多個表

[root@oldboy

~]#

mysqldump

-uroot

-p'oldboy123'

oldboy

test

ett

--default-character-set=gbk

>

/server/bak/oldboy-gbk-muti-tables.sql

[root@oldboy

~]#

egrep

-v

"\*|--|^$"

/server/bak/oldboy-gbk-muti-tables.sql

DROP

TABLE

IF

EXISTS

`test`;

CREATE

TABLE

`test`

(

`id`

int(4)

NOT

NULL

AUTO_INCREMENT,

`name`

char(20)

NOT

NULL,

PRIMARY

KEY

(`id`)

)

ENGINE=MyISAM

AUTO_INCREMENT=12

DEFAULT

CHARSET=gbk;

LOCK

TABLES

`test`

WRITE;

INSERT

INTO

`test`

VALUES

(1,'zhaoyue'),(2,'jesse'),(4,'elain'),(5,'wodi'),(6,'yingsui'),(7,'zhangyang'),(8,'zaixiangpan'),(9,'??????'),(10,'老男孩'),(11,'我');

UNLOCK

TABLES;

DROP

TABLE

IF

EXISTS

`ett`;

CREATE

TABLE

`ett`

(

`id`

int(11)

DEFAULT

NULL

)

ENGINE=MyISAM

DEFAULT

CHARSET=gbk;

LOCK

TABLES

`ett`

WRITE;

UNLOCK

TABLES;

4.10備份數據庫結構(不包含數據)

mysqldump

-uroot

-d

-p'oldboy'

oldboy

oldboy>

oldboy_oldboy.sql

-d

只備份表結構

[root@oldboy

~]#

mysqldump

-uroot

-p'oldboy123'

-d

oldboy

>/tmp/desc.sql

[root@oldboy

~]#

egrep

-v

"\*|--|^$"

/tmp/desc.sql

DROP

TABLE

IF

EXISTS

`ett`;

CREATE

TABLE

`ett`

(

`id`

int(11)

DEFAULT

NULL

)

ENGINE=MyISAM

DEFAULT

CHARSET=gbk;

DROP

TABLE

IF

EXISTS

`test`;

CREATE

TABLE

`test`

(

`id`

int(4)

NOT

NULL

AUTO_INCREMENT,

`name`

char(20)

NOT

NULL,

PRIMARY

KEY

(`id`)

)

ENGINE=MyISAM

AUTO_INCREMENT=12

DEFAULT

CHARSET=gbk;

更多用法可以

執行

mysqldump

–help

查詢。有關mysql和mysqldump同學們要詳細總結。

5恢復數據庫

5.1

source命令恢復

進入mysql數據庫控制臺,mysql

-u

root

-p

mysql>use

數據庫

然后使用source命令,后面參數為腳本文件(如這里用到的.sql)

mysql>source

oldboy_db.sql

#這個文件是系統路徑。

[root@oldboy

bak]#

mysql

-uroot

-p'oldboy123'

Welcome

to

the

MySQL

monitor.

Commands

end

with

;

or

\g.

...skip...

Type

'help;'

or

'\h'

for

help.

Type

'\c'

to

clear

the

current

input

statement.

mysql>

use

oldboy

Database

changed

mysql>

show

tables;

+------------------+

|

Tables_in_oldboy

|

+------------------+

|

ett

|

|

test

|

+------------------+

2

rows

in

set

(0.00

sec)

mysql>

drop

tables

test;

Query

OK,

0

rows

affected

(0.01

sec)

mysql>

system

ls

.

oldboy-gbk-muli.sql

oldboy-gbk-single.sql

oldboy.sql

oldboy-gbk-muti-tables.sql

oldboy-gbk.sql

oldboy.sql.gz

mysql>

source

./oldboy.sql

<==還是用第一版沒加字符集的備份,就是備份后查看亂碼的備份。

Query

OK,

0

rows

affected

(0.00

sec)

...skip...

Query

OK,

0

rows

affected

(0.00

sec)

Q...skip...

Query

OK,

0

rows

affected

(0.00

sec)

mysql>

select

*

from

test;

+----+-------------+

|

id

|

name

|

+----+-------------+

|

1

|

zhaoyue

|

|

2

|

jesse

|

|

4

|

elain

||

5

|

wodi

|

|

6

|

yingsui

|

|

7

|

zhangyang

|

|

8

|

zaixiangpan

|

|

9

|

??????

|

|

10

|

???

|<==亂碼

|

11

|

?

|

+----+-------------+

10

rows

in

set

(0.00

sec)

mysql>

set

names

gbk;

Query

OK,

0

rows

affected

(0.00

sec)

mysql>

select

*

from

test;

+----+-------------+

|

id

|

name

|

+----+-------------+

|

1

|

zhaoyue

|

|

2

|

jesse

|

|

4

|

elain

|

|

5

|

wodi

|

|

6

|

yingsui

|

|

7

|

zhangyang

|

|

8

|

zaixiangpan

|

|

9

|

??????

|

|

10

|

老男孩

|

<==仍然是正常的,就是說備份不加字符集導出,將來恢復不會影響恢復的數據,但是備份后查看文件會亂碼。

|

11

|

|

+----+-------------+

10

rows

in

set

(0.00

sec)

5.2

mysql命令恢復(標準)

mysql

-u

oldboy

-p'oldboy'

oldboy

<

oldboy.sql

mysql>

system

mysql

-uroot

-p'oldboy123'

oldboy

<

oldboy-gbk.sql

<==導入的是備份時加字符集的版本。

mysql>

select

*

from

test;

+----+-------------+

|

id

|

name

|

+----+-------------+

|

1

|

zhaoyue

|

|

2

|

jesse

|

|

4

|

elain

|

|

5

|

wodi

|

|

6

|

yingsui

|

|

7

|

zhangyang

|

|

8

|

zaixiangpan

|

|

9

|

??????

|

|

10

|

老男孩

|<==因為上文source導入時已經set

names

gbk了,

所以此處不是亂碼。

|

11

|

|

+----+-------------+

10

rows

in

set

(0.00

sec)

MyISAM引擎備份

由于MyISAM引擎為表級鎖,因此,在備份時需要防止在備份期間數據寫入而導致不一致,所以,在備份時使用--lock-all-tables加上讀鎖

mysqldump

-A

-F

-B

--lock-all-tables

|gzip

>/data/backup/$(date

+%F).tar.gz

特別提示:有關MyISAM和InnoDB引擎的差別和在工作中如何選擇,在前面的文章已經詳細講解過了,這里就不在講了。

InnoDB引擎備份

InnoDB引擎為行鎖,因此,備份時可以不對數據庫加鎖的操作,可以加選項--single-transaction進行備份:mysqldump

-A

-F

-B

--single-transaction

|gzip

>/data/backup/$(date

+%F).tar.gz

特別注意:

1)--single-transaction僅適用于InnoDB引擎。

生產環境mysqldump備份命令

mysqldump

–u

root

–p

–S

/data/3306/mysql.sock

–default-character-set=gbk

–single-transaction

–F

–B

oldboy|gzip

>

/server/backup/mysql_$(date

+%F).sql.gz

:注

-F:刷新bin-log參數,數據庫備份完以后,會刷新bin-log

增量備份:

更新bin-log:

mysqladmin

–uroot

–p

–S

/data/3306/mysql.sock

flush-logs

如生成mysql-bin.000004文件

把生成的最新mysql-bin.000004文件,CP到/var/backup/

把二進制的日志生成

sql語句:

mysqlbinlog

mysql-bin.000004>bin04.sql

如果有多個庫,我們應該用-d來指定恢復單個庫

mysqlbinlog

mysql-bin.000004

–d

oldboy

>binlog.sql

(當然對于庫也要分庫備,否則恢復還是麻煩)

還原數據:先還原全備,再還原增備

先還原全備:mysql

–u

root

–p

<mysqlfile.sql

還原增備:mysql

–u

root

–p

<binlog.sql(恢復增備的時候,需要把誤操作的語句刪掉后,再還原,否則,還原后,還是會和誤操作后一樣)

基于時間點的增量恢復

mysqlbinlog

mysql-bin.000004

–start-datetime=’2011-03-19

02:58:54’—stop-datetime=’2011-03-19

03:22:44’

–r

time.sql

上面語句將顯示2011.03-19

02:58:54-----2011-03-19

03:22:44時間段的binlog,并輸出到time.sql拽定開始時間到文件結束

mysqlbinlog

mysql-bin.000004

–start-datetime=’

2011-03-19

02:58:54’

–d

oldboy

–r

time.sql

這個語句只有開始時間,那么就是從2011-03-19

02:58:54時刻到日志結尾,lodboy數據庫的binlog輸出到time.sql

基于位置點的增量恢復

指定開始位置和結束位置

mysqlbinlog

mysql-bin.000004

–start-position=510

–stop-position=1312

–r

pos.sql

輸出初始位置510,結束位置1312的所有binlog日志到pos.sql

注意:結尾的日志點細弱特殊不會被包含。即輸出1312pos以前的binlog。

指定開始位置到文件結束

mysqlbinlog

mysql-bin.000004

–start-position=510

–r

pos510-end.sql

輸出初始位置510,結束位置到文件結尾的所有binlog到pos510-end.sql。當然,你也可以指定庫名輸出binlog。如:

mysqlbinlog

mysql-bin.000004

--start-position=510

–r

pos510-end-oldboy.sql

–d

oldboy

從文件開頭到指定結束位置

mysqlbinlog

mysql-bin.000004

--stop-position=954

-r

start-954.sql

輸出從文件開始位置,到954位置截止的所有binlog掌握和查找打開的文件

lsof(列出打開的文件)實用程序會顯示打開的文件名。其選項僅顯示某些進程,只有一個進程的某些文件描述符,或只有某些網絡連接(網絡連接使用文件描述符,就像普通文件一樣,lsof

也顯示這些)。使用

ps

ef

確定了可疑進程后,輸入以下命令:

#

lsof

-s

-p

pid服務器最大設置的連接數:151

mysql>

show

variables

like'max_connections';

+-----------------+-------+

|

Variable_name

|

Value

|

+-----------------+-------+

|

max_connections

|

151

|

+-----------------+-------+

1

row

in

set

(0.00

sec)

服務器響應的最大連接數:152

mysql>

show

global

status

like

'Max_used_connections';

+----------------------+-------+

|

Variable_name

|

Value

|

+----------------------+-------+

|

Max_used_connections

|

152

|

+----------------------+-------+

1

row

in

set

(0.00

sec)

查看服務器key_buffer_size數值:402653184

mysql>

show

variables

like

'key_buffer_size';

+-----------------+-----------+

|

Variable_name

|

Value

|

+-----------------+-----------+

|

key_buffer_size

|

402653184

|

+-----------------+-----------+1

row

in

set

(0.00

sec)

查看服務器現在使用的key_buffer_size使用情況:

key_read_requests:

879600044

key-reads:

830525

mysql>

show

global

status

like

'key_read%';

+-------------------+-----------+

|

Variable_name

|

Value

|

+-------------------+-----------+

|

Key_read_requests

|

879600044

|

|

Key_reads

|

830525

|

+-------------------+-----------+

2

rows

in

set

(0.00

sec)

計算索引未命中的概率:

key_cache_miss_rate

=

key_reads

/

key_read_requests

*

100%

達到0.1%以下(即每1000個請求有一個直接讀硬盤)以下都很好,如果key_cache_miss_rae在0.01%以下的話,則說明key_buffer_size分配得過多,可以適當減少。

Key_blocks_unused表示未使用的緩存簇數,Key_blocks_used表示曾經用到的最大的blocks數,比如這臺服務器,所有的緩存都用到了,要么增加key_buffer_size,要么就是過度索引,把緩存占滿了。比較理想的設置是:

key_blocks_used

/

(

key_blocks_unused

+

key_blocks_used

)

*

100

%

=

80%

mysql>

show

global

status

like

'key_blocks_u%';

+-------------------+--------+

|

Variable_name

|

Value

|

+-------------------+--------+

|

Key_blocks_unused

|

317003

|

|

Key_blocks_used

|

6439

|

+-------------------+--------+

2

rows

in

set

(0.00

sec)

臨時表:

當執行語句時,關于已經被創造了的隱含臨時表的數量,我們可以用如下命令查詢其具體情況:

mysql>

show

global

status

like

'created_tmp%';

+-------------------------+--------+

|

Variable_name

|

Value

|

+-------------------------+--------+

|

Created_tmp_disk_tables

|

343326

|

|

Created_tmp_files

|

172

||

Created_tmp_tables

|

675795

|

+-------------------------+--------+

3

rows

in

set

(0.00

sec)

每次創建臨時表時,created_tmp_tables都會增加,如果是在磁盤上創建臨時表,created_tmp_disk_tables也會增加。created_tem_files表示MYSQL服務創建的臨時文件數,比較理想的配置是:

Created_Tmp_disk_tables

/

Created_tmp_tables

*

100%

<=

25%

比如上面服務器Created_Tmp_disk_tables

/

Created_tmp_tables

*

100%

=

50%,比較差了。

我們再看一下MYSQL服務器對臨時表的配置:

mysql>

show

variables

where

Variable_name

in

('tmp_table_size','max_heap_table_size');

+---------------------+----------+

|

Variable_name

|

Value

|

+---------------------+----------+

|

max_heap_table_size

|

16777216

|

|

tmp_table_size

|

16777216

|

+---------------------+----------+

2

rows

in

set

(0.00

sec)

只有16M以下的臨時表才能全部放在內存中,超過的就會用到硬盤臨時表。

打開表的情況

Open_tables表示打開表的數量,Opend_tables表示打開過的表數量,我們可以用如下命令查看其具體情況:

mysql>

show

global

status

like

'open%tables%';

+---------------+--------+

|

Variable_name

|

Value

|

+---------------+--------+

|

Open_tables

|

512

|

|

Opened_tables

|

234200

|

+---------------+--------+

2

rows

in

set

(0.00

sec)

如果Opened_tables數量過大,說明配置中tables_caceh(MYSQL

5.1.3

之后這個值叫做table_open_cache)的值可能太小。我們查詢一下服務器table_cache值:

mysql>

show

variables

like

'table_open_cache';

+------------------+-------+

|

Variable_name

|

Value

|

+------------------+-------+

|

table_open_cache

|

614

|

+------------------+-------+

1

row

in

set

(0.00

sec)比較合適的值為:

Open_tables

/

Opened_tables

*

100%

>=

85%

Open_tables

/

table_open_cache

*

100%

<=

95%

進程使用情況

如果我們在MYSQL服務器的配置文件中設置了thread-cache_size,當客戶端斷開之時,服務器處理此客戶請求的線程將會緩存起來以響應下一個客戶而不是銷毀(前提是緩存數未達上限)。Threads_created表示創建過的線程數,我們可以用如下命令查看:

mysql>

show

global

status

like

'Thread%';

+-------------------+-------+

|

Variable_name

|

Value

|

+-------------------+-------+

|

Threads_cached

|

7

|

|

Threads_connected

|

2

|

|

Threads_created

|

2124

|

|

Threads_running

|

2

|

+-------------------+-------+

4

rows

in

set

(0.00

sec)

如果發現Threads_created的值過大的話,表明MYSQL服務器一直在創建線程,這也是比較耗費資源的,可以適當增大配置文件中的thread_cache_size的值。查詢服務器thread_cahce_size配置,如下所示:

mysql>

show

variables

like

'thread_cache_size';

+-------------------+-------+

|

Variable_name

|

Value

|

+-------------------+-------+

|

thread_cache_size

|

8

|

+-------------------+-------+

1

row

in

set

(0.00

sec)

查詢緩存

它涉及的主要有兩個參數,query_cache_size是設置MYSQL的Query_Cache大小,query_cache_size是設置使用查詢緩存的類型,我們可以用如下命令查看其具體情況:

mysql>

show

global

status

like

'qcache%';

+-------------------------+----------+

|

Variable_name

|

Value

|

+-------------------------+----------+

|

Qcache_free_blocks

|

130

|

|

Qcache_free_memory

|

31557680

|

|

Qcache_hits

|

15838885

|

|

Qcache_inserts

|

2391041

|

|

Qcache_lowmem_prunes

|

0

|

|

Qcache_not_cached

|

671718

|

|

Qcache_queries_in_cache

|

676

|

|

Qcache_total_blocks

|

1798

|

+-------------------------+----------+

8

rows

in

set

(0.00

sec)

我們再查詢一下服務器上關于query-cache的配置命令如下:

mysql>

show

variables

like

'query_cache%';

+------------------------------+----------+

|

Variable_name

|

Value

|

+------------------------------+----------+

|

query_cache_limit

|

1048576

|

|

query_cache_min_res_unit

|

4096

|

|

query_cache_size

|

33554432

|

|

query_cache_type

|

ON

|

|

query_cache_wlock_invalidate

|

OFF

|

+------------------------------+----------+

5

rows

in

set

(0.00

sec)

排序使用情況

它表示系統中對數據進行排序時所使用的Buffer,我們可以用如下命令查看:

mysql>

show

global

status

like

'sort%';

+-------------------+-----------+

|

Variable_name

|

Value

|

+-------------------+-----------+

|

Sort_merge_passes

|

84

|

|

Sort_range

|

393425

|

|

Sort_rows

|

751581502

|

|

Sort_scan

|

324383

|

+-------------------+-----------+

4

rows

in

set

(0.00

sec)

Sort_merge_passes包括如下步驟:MYSQL首先會嘗試在內存中做排序,使用的內存大小由系統變量sort_buffer_size來決定,如果它不夠大則把所有的記錄都讀到內存中,而MYSQl則會把每次在內存中排序的結果存到臨時文件中,等

MYSQL找到所有記錄之后,再把臨時文件中的記錄做一次排序。這次再排序就會增加sort_merge_passes。實際上,MYSQL會用另一個臨時文件來存儲再次排序的結果,所以我們通常會看到sort_merge_passes增加的數值是建臨時文件數的兩倍。因為用到了臨時文件,所以速度可能會比較慢,增大sort_buffer_size會減少sort_merge_passes和創建臨時文件的次數,但盲目地增加sort_buffer_size并不一定能提高速度。

文件打開數(open_files)

我們在處理MYSQL故障時,發現當open_files大于open_files_limit值時,MYSQL數據庫就會發生卡住的現象,導致APACHE服務器打不開相應頁面。這個問題大家在工作中應注意,我們可以用如下命令查看其具體情況:

mysql

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論