Linux运维工程师工作手册.docx
《Linux运维工程师工作手册.docx》由会员分享,可在线阅读,更多相关《Linux运维工程师工作手册.docx(25页珍藏版)》请在冰豆网上搜索。
![Linux运维工程师工作手册.docx](https://file1.bdocx.com/fileroot1/2023-2/24/35f8ae10-9d95-4c9e-a6d6-9b79c90e69e0/35f8ae10-9d95-4c9e-a6d6-9b79c90e69e01.gif)
Linux运维工程师工作手册
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禁止掉
?
?
4.5备份单个数据库
mysqldump?
-u?
用户?
–p’密码’?
--default-character-set=latin1?
数据库名?
>?
备份文件名(数据库默认编码是latin1)
普通备份:
mysqldump?
-uroot?
-p'oldboy123'?
oldboy?
>?
/server/bak/oldboy.sql
压缩备份:
设置字符集备份:
执行结果:
[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?
~]#?
ls?
-l?
/server/bak/
total?
8
-rw-r--r--?
1?
root?
root?
1991?
Apr?
?
9?
00:
51?
oldboy.sql
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
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引擎为表级锁,因此,在备份时需要防止在备份期间数据写入而导致不一致,所以,在备份时使用--lock-all-tables加上读锁
mysqldump?
-A?
-F?
-B?
--lock-all-tables?
|gzip?
>/data/backup/$(date?
+%F).tar.gz
特别提示:
有关MyISAM和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?
?
还原增备:
mysql?
–u?
root?
–p?
?
?
基于时间点的增量恢复
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?
ol