运维工作中,你都有哪些技巧

很多人都说运维工作是苦逼的,不可否认,有时候我也这样觉的,但回头想想,又有那份工作不辛苦呢,看看那些在叙利亚前线的记者,在马路上的清洁工,在饭店不停颠勺的厨师,在理发店里两只胳膊永远呆在空中的理发师,不停授课讲话的老师们。。。。。

如果你现在做的这份工作是和运维、DBA相关,不管现状如何,是不是应该往好的方向发展呢,在苦逼,乏味,忙碌的工作中寻找乐趣,才能感受到这其中的不一样。有句话说的好,当你做真正自己喜欢的事情时,你才会很少感觉到疲倦。

扯多了。下面是我整理的日常运维工作中常用的技巧说是技巧,其实无非是帮助你提高效率,简化操作。只整理了 一部分,分享给大家。

Linux

1. screen

screen是一个可以统一管理多个会话,并可在会话之间切换,共享会话的工作,更是DBA在执行DDL,大事务性工作的利器。

示例:

##新建一个screen[lufei@dodba ~]$ screen -R lufei##查看所有screen[lufei@dodba ~]$ screen -lsThere is a screen on:14919.lufei(Attached)1 Socket in /var/run/screen/S-lufei.##将指定的screen离线[lufei@dodba ~]$ screen -D 14919[14919.lufei power detached.]##恢复一个screen[lufei@dodba ~]$ screen -R 14919

2.Ctrl-Z/fg/bg/jobs

如果你正在前台正运行一个执行时间很长的任务,但又需要做其他的事情,这个时候你可以使用Ctrl-Z,将前台任务挂到后台。

常用:

  • CTRL+Z  挂起进程并放入后台。
  • jobs       显示当前暂停的进程。
  • bg %N   使第N个任务在后台运行,默认表示对最后一个进程操作。
  • fg   %N  使第N个任务在前台运行,默认表示对最后一个进程操作。

示例:

##使用Ctrl-Z 将cp任务挂到后台

[lufei@dodba ~]$ cp dump.gz dump.gz2016
^Z[1]+  Stopped  cp -i dump.gz dump.gz2016

##jobs 查看后台任务[lufei@dodba ~]$ jobs
[1]+  Stopped  cp -i dump.gz dump.gz2016

## fg 将最后一个后台任务拉到前台[lufei@dodba ~]$ fg
cp -i dump.gz dump.gz2016

##可以再次使用Ctrl-Z 将cp任务挂到后台^Z[1]+  Stopped cp -i dump.gz dump.gz2016

##使用bg,将最后一个任务放到后台执行[lufei@dodba ~]$ bg
[1]+ cp -i dump.gz dump.gz2016 &

##使用jobs 可以看到cp在后台执行[lufei@dodba ~]$ jobs
[1]+  Running  cp -i dump.gz dump.gz2016 &

3. shell set 命令

set命令作用主要是显示系统中已经存在的shell变量,以及设置shell变量的新变量值, [+ -]分别为打开和关闭这个参数,set 有很多参数,而set -x是我最常用的。 set -x ,显示shell脚本运行的冗余输出,每一条命令以及加载命令行中的任何参数都会显示出来,调试shell脚步非常方便

[lufei@dodba ]$ cat set.sh
#!/bin/bashset -xecho -n "your name?"read nameif [ $name = "lufei" ]then
        echo "hello"else
 echo "haha"fi[lufei@dodba ]$ bash set.sh
+ echo -n 'your name?'your name?
+ read name
lufei
+ '[' lufei = lufei ']'+ echo hello
hello

另一中方式sh -x

[lufei@dodba]$ cat set.sh
#!/bin/bashecho -n "your name?"read nameif [ $name = "lufei" ]then
    echo "hello"else
 echo "haha"fi

[lufei@dodba]$ sh -x set.sh + echo -n 'your name?'your name?
+ read name
lufei
+ '[' lufei = lufei ']'+ echo hello
hello

4. shell 日志记录

运维工作的同学编写shell脚步应该是硬技能,将一些复杂的操作编写成shell脚步,可以提高不少效率,shell脚步记录日志是必不可少的,日志可以用来排错,追溯等用途,下面提供一个记录shell脚步日志的方法。

LOGFILE=${BASEDIR}/logs/${DTTIME}.logexec 3>&1 4>&2 1>>${LOGFILE} 2>&1

5. shell 并发

上面刚说到运维同学会使用shell是硬性要求,那么如何在shell中使用并发呢,见下面代码。

#!/bin/bashcat ip.txt|while read info;dozn=`echo ${info}|awk '{print $1}'`;
IP=`echo ${info}|awk '{print $2}'`;
joblist=($(jobs -p)); --还可以根据ps -ef|grep 当前脚步名称|wc -lwhile(( ${#joblist[*]} >= 10 ))--控制并发数,可以做为参数dosleep 40joblist=($(jobs -p));donescp ${IP}:/home/databak/*${zn}*2016050603* /home/lufei/dump/ &done;

6. crt显示主机名

有时候在crt中打开多个窗口,太多了后,自己都分不清哪个是哪个,使用下面的方法,可以在打开crt时显示主机名

## 在/etc/profile 中增加以下,然后crt选择Xtermecho -ne "\e]2;$(hostname)\a"

还有一些常用命令如下:

  • Ctrl+a 光标移动到命令行开始
  • Ctrl+e 光标移动到到命令行末尾
  • Ctrl+u 清除剪切光标之前的内容
  • Ctrl+w 清除光标前的一个单词
  • Ctrl+r 查找历史命令
  • Ctrl+l 清屏


MySQL

1.MySQL与shell交互

有些时候我们需要从MySQL中读出数据,然后传给shell,去做一些逻辑判断,下面是一个实例,目前我们使用beego框架开发了一套SQL上线平台,这个web平台主要控制审批流程,然后将审批过的信息存到MySQL中,后台我们使用以下脚本远程执行。

#!/bin/bashwhile read id dbname dbip sqlfile;
do echo $id $dbname $dbip $sqlfile##mysql -h$dbip -utest -p'test' 
-D $dbname --default-character-set=utf8 -vvv < ${SQLDIR}/$sqlfiledone < <(/usr/bin/mysql -utest -p"test"     -s --skip-column-names  -e "use enndb;select id,n,d,e from aw where s='3'")

还有一个经典的交互案例就是备份,我们都知道mysqldump备份是串行的,多个database,一个一个备份,同database中一个一个table去备份,如何可以并行使用mysqldump备份呢,写多个mysqldump,太low了吧。下面代码可以做到。

for db in $(mysql -e "show databases" -s --skip-column-names);do echo $db;
mysqldump ........ &done

2.MySQL 解压恢复

使用mysqldump备份的时候,一般我们为了节省磁盘空间会使用以下方法进行压缩,

mysqldump -hlocalhost --default-character-set=utf8 
--master-data=2 --single-transaction  
-B a   | gzip > 'a'`date +%Y%m%d%H%M`.sql.gz

在进行恢复/搭建从库时需要先解压,再去导入,需要两条命令,简洁的方法如下:

gunzip < a201612071131.sql.gz |mysql

3.MySQL loose_

当你在不同的MySQL版本中,或是不同的MySQL分支中切换my.conf配置文件时(少数),可能有些参数会不兼容,使用loose_参数,如果没有这个参数,将会忽略。

[root@dodba ~]# grep dodba /etc/my.cnf
dodba=1
[root@dodba ~]# /etc/init.d/mysql startStarting MySQL (Percona Server)...... ERROR! The server quit without updating PID file (/home/mysql/dodba.com.pid).
[root@dodba ~]# tail -f error.log
2016-12-19T10:08:31.875314Z 0 [ERROR] unknown variable 'dodba=1'
2016-12-19T10:08:31.875371Z 0 [ERROR] Aborting

##增加loose_前缀
[root@dodba ~]# grep dodba /etc/my.cnf
loose_dodba=1[root@dodba ~]# /etc/init.d/mysql start
Starting MySQL (Percona Server).. SUCCESS!

4.MySQL 帮助

众多的MySQL命令,除了常用的,应该有很多都记不住,其实不用查文档,直接使用?+命令就会有很详细的帮助。

mysql> ? purge
Name: 'PURGE BINARY LOGS'Description:
Syntax:
PURGE { BINARY | MASTER } LOGS
    { TO 'log_name' | BEFORE datetime_expr }

Examples:
PURGE BINARY LOGS TO 'mysql-bin.010';PURGE BINARY LOGS BEFORE '2008-04-02 22:46:26';

5.MySQL --initialize-insecure

相信大家都知道MySQL5.7版本的安装最重要的一个变化就是不在使用mysql_install_db,而是使用mysqld --initialize,其实还有一个参数是--initialize-insecure

两个参数的区别就是前者生成一个临时密码在日志中,对于自动化安装脚步来讲还得处理,而直接使用后者,会生成一个空密码的账号,安装脚步就不需要再处理,但是登陆后为安全起见还是希望你能修改密码。


6.MySQL -vv

在mysql中使用-vv参数,可以返回更详细的信息,有详细的信息就会更容易排错。

##什么都不返回
[root@dodba ~]# mysql  -e "use tdb;update t set name=444;"   

##-v 显示语句本身
[root@dodba ~]# mysql  -v -e "use tdb;update t set name=444;"--------------update t set name=444--------------

##-vv 显示执行时间,结果
[root@dodba ~]#  mysql  -vv -e "use tdb;update t set name=444;"--------------update t set name=444--------------Query OK, 0 rows affected (0.02 sec)Rows matched: 2  Changed: 0  Warnings: 0Bye
7.MySQL 类型转换

有些时候,有同学在SQL的where条件中会直接写key=1278类似(值不加引号)的谓词条件,但如果这个key是varchar类型,就会发生隐式类型转换,导致全表扫描。其实你只需要记住一条,谓词条件中的值,都加引号就可以了。 下面是个实例:

mysql> desc t;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+| id    | int(11)     | YES  |     | NULL    |       || name  | varchar(20) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+2 rows in set (0.00 sec)

mysql> alter table t add index ind_id(id);
Query OK, 0 rows affected (0.19 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> alter table t add index ind_name(name);
Query OK, 0 rows affected (0.09 sec)
Records: 0  Duplicates: 0  Warnings: 0

##隐式转换,全表扫描
select * from t where name=222;

##不会发生隐式类型转换,索引扫描
select * from t where name='222';
select * from t where id=1;
select * from t where id='1';





扫描二维码,可联系作者。 







时间: 2024-12-27 11:33:46

运维工作中,你都有哪些技巧的相关文章

因果图在运维工作中的应用

因果图在运维工作中的应用 http://netkiller.github.io/journal/fishbone.html Mr. Neo Chen (netkiller), 陈景峰(BG7NYT) 中国广东省深圳市龙华新区民治街道溪山美地518131+86 13113668890+86 755 29812080<netkiller@msn.com> 版权 2014 http://netkiller.github.io 版权声明 转载请与作者联系,转载时请务必标明文章原始出处和作者信息及本声明

跟老男孩学Linux运维:Shell编程实战2.3 Shell脚本在Linux运维工作中的地位

2.3 Shell脚本在Linux运维工作中的地位 Shell脚本语言很适合用于处理纯文本类型的数据,而Linux系统中几乎所有的配置文件.日志文件(如NFS.Rsync.Httpd.Nginx.LVS.MySQL等),以及绝大多数的启动文件都是纯文本类型的文件.因此,学好Shell脚本语言,就可以利用它在Linux系统中发挥巨大的作用. 图2-2形象地展示了Shell脚本在运维工作中的地位.   图2-2 Shell脚本在运维工作中的地位形象图

如何做好大型数据中心的运维工作?

随着数据中心建设规模的不断扩大,新技术的层出不穷,数据中心变得越来越复杂.大型数据中心往往是由很多规模庞大的集群系统组成,其运维工作需要具备方方面面的知识,包括硬件.网络.服务器.存储.安全以及业务上的东西,需要上下打通地去做运维工作. 当一个数据中心的规模非常大,面临的挑战和问题也比较超前,很多在小环境小体系下不是问题的问题在这样的规模下也就凸显出来了,所以要做好大型数据中心的运维工作,对整个数据中心技术体系的系统学习就要花费比较长的时间,只有对这个数据中心整体非常了解,才能有针对性地制定一些

仪表盘 hostmap 新玩法让运维工作越玩越 high

Cloud Insight 第13次新品发布会现在开始,首先非常感谢大家前来看我们的新功能发布会,下面我先给大家介绍一下新功能,之后有什么问题大家尽管问. 新功能 Cloud Insight 发布 4.4.0 版本,主要增加以及修复以下功能: 增加仪表盘标记线 增加仪表盘数据表现形式 增加仪表盘 rate 指标 增加 hostmap 无限分组功能 增加端口监控,进程监控 修复 Windows 平台显示问题 仪表盘是什么? 天啊,互联网时代有人连这个都不知道,好吧,既然这样那我来解(an)释(li

如何在运维场景中构建一个优秀精准的异常检查系统

在实际的运维场景中,构建一个异常检测系统往往需要两个角色共同参与:领域专家和算法开发人员.领域专家也就是我们的运维人员,他们对KPI曲线的行为很熟悉,可以通过观察KPI曲线并结合自己的领域知识,判断KPI曲线是否出现异常:算法开发人员负责构建异常检测系统,他们熟悉异常检测器(算法),但是实际中有各种不同类型的KPI曲线需要维护,所以需要为不同类型的KPI曲线选择合适的异常检测器以及合适的算法参数. 在实际构建异常检测系统时,首先需要运维人员结合自己的领域知识向算法开发人员描述异常,然后开发人员根

优云运维:漫谈redis在运维数据分析中的去重统计方式

今天,我和大家分享下redis在运维数据分析中的去重统计方式.为了避免混淆,本文中对于redis的数据结构做如下约定: SET:saddkey member ZSET:zaddkeyscoremember HYPERLOGLOG:pfaddkeyelement STRING:setbitkeyoffset value 名词约定: 维度:比如版本.操作系统类型.操作系统版本.运营商.设备型号.网络类型等 复合维度:由两个或多个维度交错产生的维度,比如某个版本下的某个设备型号. 去重统计在数据化运维

中小企业运维:三个移动安全应用技巧

本文讲的是中小企业运维:三个移动安全应用技巧,企业中的所有人都应该共同努力打击攻击者的入侵和数据丢失,特别是对于中小型企业来说尤其如此.移动技术给各行各业的企业带来了全新的安全风险,很多大型企业有资源来加强防御措施以抵御这些风险,而资源有限的较小型企业则受到很大的冲击. 这里有三个步骤来帮助中小企业制定更智能的移动安全策略来应对这个不断变化的威胁环境. 第一步:政策 制定一个安全和移动设备政策,明确分离设备上的个人数据和企业数据.员工需要明确知道他们在自己的手机上能做什么和不能做什么.你应该制定

Linux主流架构运维工作简单剖析

随着IT运维的不断发展,尤其的Linux的飞速发展,越来越多的企业开始使用Linux操作系统平台,例如CentOS.RedHat.Ubuntu.Fedora等等,成千上亿个网站涌现在当今互联网,互联网已经成为必不可少的工具,那今天我们跟大家一起来分享讨论目前用的最多的Linux下主流网站架构: LVS+KEEPALIVED(heartbeat)+Squid+Nginx/Apache+JAVA/PHP +MySQL/MariaDB等,分享一个简单的拓扑图,供各位同学实验参考 一般网站总体分为四层,

Linux主流架构运维工作简单剖

随着IT运维的不断发展,尤其的Linux的飞速发展,越来越多的企业开始使用Linux操作系统平台,例如CentOS.RedHat.Ubuntu.Fedora等等,成千上亿个网站涌现在当今互联网,互联网已经成为必不可少的工具,那今天我们跟大家一起来分享讨论目前用的最多的Linux下主流网站架构: LVS+KEEPALIVED(heartbeat)+Squid+Nginx/Apache+JAVA/PHP +MySQL/MariaDB等,分享一个简单的拓扑图,供各位同学实验参考 一般网站总体分为四层,