Linux运维工程师工作手册_第1页
Linux运维工程师工作手册_第2页
Linux运维工程师工作手册_第3页
Linux运维工程师工作手册_第4页
Linux运维工程师工作手册_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上Linux运维工程师工作手册释放内存:syncecho 3 > /proc/sys/vm/drop_caches Linux查看Dell服务器型号命令:dmidecode | grep "Product Name" 查看系统负载:cat /proc/loadavg0.0  0.00 0.00 1/283 10904意思是:前三个是系统负载,1/283中,1代表此时运行队伍中的进程个数,而283是

2、代表此时的进程总数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&#

3、160;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  

4、0; 一、Apache服务优化: 21.配置cronolog进行日志轮询 22.错误页面优雅显示 23.mod_deflate文件压缩功能 34.mod_expires缓存功能 45.更改apache的默认用户 56.worker模式,提升并发数(可以达到2000-5000) 57.屏蔽apache版本等敏感信息 68.apache目录文件权限设置(root,目录755,文件644) 69.开启httpd-mpm.conf 增加连接数 610. apache防盗链功

5、能 811.禁止目录Index 812. 禁止用户覆盖(重载) 813.关闭CGI 914.避免使用.htaccess文件(分布式配置文件) 915. apache的安全模块 916.正确途径取得源代码,勤打apache补丁 1017.apache日志授予root 700权限 1018.系统内核参数优化 1019.禁止PHP解析指定站点的目录 1020.使用tmpfs文件系统替代频繁访问的目录 1121尽可能减少 HTTP 请求数

6、60;1122使用CDN做网站加速 12   查看你的服务器网络连接状态netstat -n | awk '/tcp/ +S$NF END for(a in S) print a, Sa'CLOSED:无连接是活动的或正在进行 LISTEN:服务器在等待进入呼叫 SYN_RECV:一个连接请求已经到达,等待确认 SYN_SENT:应用已经开始,打开一个连接 ESTABLISHED:

7、正常数据传输状态 FIN_WAIT1:应用说它已经完成 FIN_WAIT2:另一边已同意释放 ITMED_WAIT:等待所有分组死掉 CLOSING:两边同时尝试关闭 TIME_WAIT:另一边已初始化一个释放 LAST_ACK:等待所有分组死掉 ESTABLISHED的值其实也是当前的并发数,这个可重点关注下;另外,可关注下TIMEWAIT这项的数值。Linux下高并发的Squid服务器,TCP TIME_WAIT套接字数量经常达到两、三万,服务器很容易被拖死。通过修改Linux内核参数,可以减少Squid服务器

8、的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 $

9、1,$4' | uniq -c | awk '$1 >50 print $1,$2'  4.5备份单个数据库mysqldump -u 用户 p密码 -default-character-set=latin1 数据库名 > 备份文件名(数据库默认编码是latin1)普通备份:mysqldump -uroot -p'oldboy123' o

10、ldboy > /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/o

11、ldboy.sql.gz执行结果:rootoldboy # mkdir /server/bak -prootoldboy # mysqldump -uroot -p'oldboy123' oldboy > /server/babackup/ bak/   rootoldboy # mysqldump -uroot -p'oldboy123' oldboy

12、60;> /server/bak/oldboy.sqlrootoldboy # mysqldump -uroot -p'oldboy123' oldboy |gzip > /server/bak/oldboy.sql.gzrootoldboy # ls -l /server/bak/total 8-rw-r-r- 1 root root 1991 Apr  9

13、 00:51 oldboy.sql-rw-r-r- 1 root root  801 Apr  9 00:51 oldboy.sql.gz4.6 mysqldump在做啥?mysqldump实际上就是把数据从mysql库里以逻辑的sql语句的形式导出。备份的数据过滤掉注释:rootoldboy # egrep -v "*|-|$" /server/bak/oldboy.sqlDROP T

14、ABLE 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

15、 TABLES test WRITE;INSERT INTO test VALUES (1,'zhaoyue'),(2,'jesse'),(4,'elain'),(5,'wodi'),(6,'yingsui'),(7,'zhangyang'),(8,'zaixiangpan'),(9,'?'),(10,'鑰佺敺瀛?),(11,'鎴?); <=这里是乱码,是因为导出时的

16、格式没加字符集,而系统当前字符集又是zh_cn.gb18030格式,一般恢复到数据库里会正常,只是系统外查看不正常而已。另外insert是批量插入的方式,这样在恢复时效率很高。UNLOCK TABLES;提示:看到了吧,就是我们曾经插入的表和数据。rootoldboy # mysqldump -uroot -p'oldboy123' oldboy -default-character-set=gbk > /server/bak/oldboy-gbk.sqlrootoldboy

17、0;# egrep -v "*|-|$" /server/bak/oldboy-gbk.sqlDROP TABLE IF EXISTS test;CREATE TABLE test (  id int(4) NOT NULL AUTO_INCREMENT,  name char(20) NOT NULL,  PRIMARY KE

18、Y (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,'

19、;zaixiangpan'),(9,'?'),(10,'老男孩'),(11,'我'); <=。其他乱码是当初插入时就有问题的。UNLOCK TABLES;4.7备份多个库rootoldboy # mysqldump -uroot -p'oldboy123' -B oldboy mysql -default-character-set=gbk > /server/bak/oldboy-gbk-m

20、uli.sql提示:-B参数是关键,表示接多个库。 (生产环境常用)  -B, -databases     To dump several databases. Note the difference in usage;                 &#

21、160;    In this case no tables are given. All name arguments are                      regarded as databasename

22、s. 'USE db_name;' will be                      included in the output.参数说明:该参数用于导出若干个数据库,在备份结果中会加入USE db_name和CREATE DATABASE db_nam

23、e;      -B后的参数都将被作为数据库名。该参数比较常用。当-B后的数据库列全时 同 -A参数。请看-A的说明。4.8备份单个表mysqldump -u 用户名 -p 数据库名 表名> 备份的文件名mysqldump -u root -p oldboy test> oldboy_oldboy.sql执行结果:rootoldboy # mysqldump

24、0;-uroot -p'oldboy123' oldboy test -default-character-set=gbk > /server/bak/oldboy-gbk-single.sql提示:无-B参数,库oldboy后面就是test表了。4.9备份多个表rootoldboy # mysqldump -uroot -p'oldboy123' oldboy test ett -default-character-

25、set=gbk > /server/bak/oldboy-gbk-muti-tables.sqlrootoldboy # egrep -v "*|-|$" /server/bak/oldboy-gbk-muti-tables.sqlDROP TABLE IF EXISTS test;CREATE TABLE test (  id int(4) NOT NULL AUTO_

26、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,&#

27、39;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

28、) ENGINE=MyISAM DEFAULT CHARSET=gbk;LOCK TABLES ett WRITE;UNLOCK TABLES;4.10备份数据库结构(不包含数据)mysqldump -uroot -d -p'oldboy' oldboy oldboy> oldboy_oldboy.sql-d 只备份表结构rootoldboy # mysqldump -uroot -p'

29、oldboy123' -d oldboy >/tmp/desc.sql                         rootoldboy # egrep -v "*|-|$" /tmp/desc.sql  

30、60;         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&

31、#160;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和m

32、ysqldump同学们要详细总结。5恢复数据库5.1 source命令恢复进入mysql数据库控制台,mysql -u root -pmysql>use 数据库然后使用source命令,后面参数为脚本文件(如这里用到的.sql)mysql>source oldboy_db.sql #这个文件是系统路径。rootoldboy bak# mysql -uroot -p'oldboy123'Welcome to the MySQL&#

33、160;monitor.  Commands end with  or g.skip.Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql> use oldboyDatabase changed

34、mysql> show tables;+-+| Tables_in_oldboy |+-+| ett              | test             |+-+2 rows in set (0.00 

35、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.sqloldboy-gbk-muti-tables.s

36、ql  oldboy-gbk.sql         oldboy.sql.gzmysql> source ./oldboy.sql <=还是用第一版没加字符集的备份,就是备份后查看乱码的备份。Query OK, 0 rows affected (0.00 sec).skip.Query OK, 0 rows affected (0.0

37、0 sec)Q.skip.Query OK, 0 rows affected (0.00 sec) mysql> select * from test;+-+-+| id | name        |+-+-+|  1 | zhaoyue     |  

38、;2 | jesse       |  4 | elain       |  5 | wodi        |  6 | yingsui     |  7 |

39、 zhangyang   |  8 | zaixiangpan |  9 | ?      | 10 | ?         |<=乱码| 11 | ?        

40、60;  |+-+-+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     &#

41、160;  |+-+-+|  1 | zhaoyue     |  2 | jesse       |  4 | elain       |  5 | wodi      

42、;  |  6 | yingsui     |  7 | zhangyang   |  8 | zaixiangpan |  9 | ?      | 10 | 老男孩      

43、| <=仍然是正常的,就是说备份不加字符集导出,将来恢复不会影响恢复的数据,但是备份后查看文件会乱码。| 11 | 我          |+-+-+10 rows in set (0.00 sec)5.2 mysql命令恢复(标准)mysql -u oldboy -p'oldboy' oldboy < old

44、boy.sqlmysql> system mysql -uroot -p'oldboy123' oldboy < oldboy-gbk.sql <=导入的是备份时加字符集的版本。mysql> select * from test;+-+-+| id | name        |+-+-+|  1 

45、| zhaoyue     |  2 | jesse       |  4 | elain       |  5 | wodi        |  6 | yi

46、ngsui     |  7 | zhangyang   |  8 | zaixiangpan |  9 | ?      | 10 | 老男孩      |<=因为上文source导入时已经set names g

47、bk了, 所以此处不是乱码。| 11 | 我          |+-+-+10 rows in set (0.00 sec)     MyISAM引擎备份    由于MyISAM引擎为表级锁,因此,在备份时需要防止在备份期间数据写入而导致不一致,所以,在备份时使用-lock-all-tables加上读锁

48、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-

49、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 > /

50、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.文件把生成的最新mysql-bin.文件,CP到/var/backup/把二进制的日志生成 sql语句:mysqlbinlog mysql-bin.>bin04.sql如果有多个库

51、,我们应该用-d来指定恢复单个库mysqlbinlog mysql-bin. d oldboy >binlog.sql  (当然对于库也要分库备,否则恢复还是麻烦)还原数据:先还原全备,再还原增备先还原全备:mysql u root p  <mysqlfile.sql还原增备:mysql u root p  <binlog.sql(恢复增备的时候,需要把误操作的语句删掉后,再还原,否则,还原后,还是会和误操作后一样)&

52、#160;基于时间点的增量恢复mysqlbinlog mysql-bin. start-datetime=2011-03-19 02:58:54stop-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. start-datetime= 2011-03-19

53、 02:58:54 d oldboy r time.sql这个语句只有开始时间,那么就是从2011-03-19 02:58:54时刻到日志结尾,lodboy数据库的binlog输出到time.sql 基于位置点的增量恢复指定开始位置和结束位置mysqlbinlog mysql-bin. start-position=510 stop-position=1312 r pos.sql输出初始位置510,结束位置1312的所有binlog日志到pos.sql注意:结尾的日志点细弱特

54、殊不会被包含。即输出1312pos以前的binlog。指定开始位置到文件结束mysqlbinlog mysql-bin. start-position=510 r pos510-end.sql输出初始位置510,结束位置到文件结尾的所有binlog到pos510-end.sql。当然,你也可以指定库名输出binlog。如:mysqlbinlog mysql-bin. -start-position=510 r pos510-end-oldboy.sql d oldboy从文件开头到指定结束位置m

55、ysqlbinlog mysql-bin. -stop-position=954 -r start-954.sql输出从文件开始位置,到954位置截止的所有binlog掌握和查找打开的文件lsof(列出打开的文件)实用程序会显示打开的文件名。其选项仅显示某些进程,只有一个进程的某些文件描述符,或只有某些网络连接(网络连接使用文件描述符,就像普通文件一样,lsof 也显示这些)。使用 ps  ef 确定了可疑进程后,输入以下命令: # lsof -s -p 

56、pid服务器最大设置的连接数:151mysql> show variables like'max_connections'+-+-+| Variable_name   | Value |+-+-+| max_connections | 151   |+-+-+1 row in set (0.00 sec) 服务器响应的最大连接数:152mysql> 

57、show global status like 'Max_used_connections'+-+-+| Variable_name        | Value |+-+-+| Max_used_connections | 152   |+-+-+1 row in set (0.00 sec)查看服务器key_buffe

58、r_size数值:mysql> show variables like 'key_buffer_size'+-+-+| Variable_name   | Value     |+-+-+| key_buffer_size |  |+-+-+1 row in set (0.00 sec) 查看服务器现在使用的key_buffer_siz

59、e使用情况:key_read_requests: key-reads: mysql> show global status like 'key_read%'+-+-+| Variable_name     | Value     |+-+-+| Key_read_requests |  | Key_reads  &#

60、160;      |     |+-+-+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%以下的话,则说明ke

61、y_buffer_size分配得过多,可以适当减少。  Key_blocks_unused表示未使用的缓存簇数,Key_blocks_used表示曾经用到的最大的blocks数,比如这台服务器,所有的缓存都用到了,要么增加key_buffer_size,要么就是过度索引,把缓存占满了。比较理想的设置是:key_blocks_used / ( key_blocks_unused + key_blocks_used ) * 100 % = 80% mysql&

62、gt; show global status like 'key_blocks_u%'+-+-+| Variable_name     | Value  |+-+-+| Key_blocks_unused |  | Key_blocks_used   | 6439   |+-+-+2 rows in&#

63、160;set (0.00 sec)  临时表:当执行语句时,关于已经被创造了的隐含临时表的数量,我们可以用如下命令查询其具体情况:mysql> show global status like 'created_tmp%'+-+-+| Variable_name           | Value  |+-+-+| Creat

64、ed_tmp_disk_tables |  | Created_tmp_files       | 172    | Created_tmp_tables      |  |+-+-+3 rows in set (0.00 sec) 每次创建临时表时,created_tmp_tables都

65、会增加,如果是在磁盘上创建临时表,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服务器对临时表的配

66、置:mysql> show variables where Variable_name in ('tmp_table_size','max_heap_table_size');+-+-+| Variable_name       | Value    |+-+-+| max_heap_table_size |  | tm

67、p_table_size      |  |+-+-+2 rows in set (0.00 sec)只有16M以下的临时表才能全部放在内存中,超过的就会用到硬盘临时表。   打开表的情况Open_tables表示打开表的数量,Opend_tables表示打开过的表数量,我们可以用如下命令查看其具体情况:mysql> show global status like 'ope

68、n%tables%'+-+-+| Variable_name | Value  |+-+-+| Open_tables   | 512    | Opened_tables |  |+-+-+2 rows in set (0.00 sec)如果Opened_tables数量过大,说明配置中tables_caceh(MYSQL 5.1.3 之

69、后这个值叫做table_open_cache)的值可能太小。我们查询一下服务器table_cache值:mysql> show variables like 'table_open_cache'          +-+-+| Variable_name    | Value |+-+-+| table_open_cache | 614

70、   |+-+-+1 row in set (0.00 sec)比较合适的值为:Open_tables / Opened_tables * 100% >= 85%Open_tables / table_open_cache * 100% <= 95%  进程使用情况如果我们在MYSQL服务器的配置文件中设置了thread-cache_size,当客户端断开之时,服务

71、器处理此客户请求的线程将会缓存起来以响应下一个客户而不是销毁(前提是缓存数未达上限)。Threads_created表示创建过的线程数,我们可以用如下命令查看:mysql> show global status like 'Thread%'+-+-+| Variable_name     | Value |+-+-+| Threads_cached    | 7  

72、   | Threads_connected | 2     | Threads_created   | 2124  | Threads_running   | 2     |+-+-+4 rows in set (0.00 sec)如果发现Threads_create

73、d的值过大的话,表明MYSQL服务器一直在创建线程,这也是比较耗费资源的,可以适当增大配置文件中的thread_cache_size的值。查询服务器thread_cahce_size配置,如下所示:mysql> show variables like 'thread_cache_size'+-+-+| Variable_name     | Value |+-+-+| thread_cache_size | 8 &

74、#160;   |+-+-+1 row in set (0.00 sec)  查询缓存它涉及的主要有两个参数,query_cache_size是设置MYSQL的Query_Cache大小,query_cache_size是设置使用查询缓存的类型,我们可以用如下命令查看其具体情况:mysql> show global status like 'qcache%'+-+-+| Variable_name 

75、60;         | Value    |+-+-+| Qcache_free_blocks      | 130      | Qcache_free_memory      |  | Qcache_hits&#

76、160;            |  | Qcache_inserts          |   | Qcache_lowmem_prunes    | 0        |

77、60;| Qcache_not_cached       |    | Qcache_queries_in_cache | 676      | Qcache_total_blocks     | 1798     |+-+-+8 rows in&#

78、160;set (0.00 sec) 我们再查询一下服务器上关于query-cache的配置命令如下:mysql> show variables like 'query_cache%'+-+-+| Variable_name                | Value    |+-+-

79、+| query_cache_limit            |   | query_cache_min_res_unit     | 4096     | query_cache_size          

80、;   |  | query_cache_type             | ON       | query_cache_wlock_invalidate | OFF      |+-+-+5 rows in

81、0;set (0.00 sec)   排序使用情况它表示系统中对数据进行排序时所使用的Buffer,我们可以用如下命令查看:mysql> show global status like 'sort%'+-+-+| Variable_name     | Value     |+-+-+| Sort_merge_passes | 

82、;84        | Sort_range        |     | Sort_rows         |  | Sort_scan         

83、|     |+-+-+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_file

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论