limits.conf{

    ulimit -SHn 65535  # 临时设置文件描述符大小 进程最大打开文件柄数 还有socket最大连接数, 等同配置 nofile
    ulimit -SHu 65535  # 临时设置用户最大进程数
    ulimit -a          # 查看

    /etc/security/limits.conf

    # 文件描述符大小  open files
    # lsof |wc -l   查看当前文件句柄数使用数量
    * soft nofile 16384         # 设置太大,进程使用过多会把机器拖死
    * hard nofile 32768

    # 用户最大进程数  max user processes
    # echo $((`ps uxm |wc -l`-`ps ux |wc -l`))  查看当前用户占用的进程数 [包括线程]
    user soft nproc 16384
    user hard nproc 32768

    # 如果/etc/security/limits.d/有配置文件,将会覆盖/etc/security/limits.conf里的配置
    # 即/etc/security/limits.d/的配置文件里就不要有同样的参量设置
    /etc/security/limits.d/90-nproc.conf    # centos6.3的默认这个文件会覆盖 limits.conf
    user soft nproc 16384
    user hard nproc 32768

    sysctl -p    # 修改配置文件后让系统生效

}

随机分配端口范围{

    # 本机连其它端口用的
    echo "10000 65535" > /proc/sys/net/ipv4/ip_local_port_range

}

百万长链接设置{

    # 内存消耗需要较大
    vim /root/.bash_profile
    # 添加如下2行,退出bash重新登陆
    # 一个进程不能使用超过NR_OPEN文件描述符
    echo 20000500 > /proc/sys/fs/nr_open
    # 当前用户最大文件数
    ulimit -n 10000000

}

core崩溃文件查看{

    gdb  core.13844
    bt   # 查看函数调用信息(堆栈)

}


libc.so故障修复{

    # 由于升级glibc导致libc.so不稳定,突然报错,幸好还有未退出的终端
    grep: error while loading shared libraries: /lib64/libc.so.6: ELF file OS ABI invalid

    # 看看当前系统有多少版本 libc.so
    ls /lib64/libc-[tab]

    # 更改环境变量指向其他 libc.so 文件测试
    export LD_PRELOAD=/lib64/libc-2.7.so    # 如果不改变LD_PRELOAD变量,ln不能用,需要使用 /sbin/sln 命令做链接

    # 当前如果好使了,在执行下面强制替换软链接。如不好使,测试其他版本的libc.so文件
    ln -f -s /lib64/libc-2.7.so /lib64/libc.so.6

}

无法分配内存 {

    fork: Cannot allocate memory

    # 报错不一定是内存不够用,进程数或者线程数满了也会报这个错误, 可以适当增加 kernel.pid_max 的值,
    cat /proc/sys/kernel/pid_max  # 默认3.2w

}

sudo{

    echo myPassword | sudo -S ls /tmp  # 直接输入sudo的密码非交互,从标准输入读取密码而不是终端设备
    visudo                             # sudo命令权限添加  /etc/sudoers
    用户  别名(可用all)=NOPASSWD:命令1,命令2
    user  ALL=NOPASSWD:/bin/su         # 免root密码切换root身份
    wangming linuxfan=NOPASSWD:/sbin/apache start,/sbin/apache restart
    UserName ALL=(ALL) ALL
    UserName ALL=(ALL) NOPASSWD: ALL
    peterli        ALL=(ALL)       NOPASSWD:/sbin/service
    Defaults requiretty                # sudo不允许后台运行,注释此行既允许
    Defaults !visiblepw                # sudo不允许远程,去掉!既允许

}

grub开机启动项添加{

    vim /etc/grub.conf
    title ms-dos
    rootnoverify (hd0,0)
    chainloader +1

}

stty{

    #stty时一个用来改变并打印终端行设置的常用命令

    stty iuclc          # 在命令行下禁止输出大写
    stty -iuclc         # 恢复输出大写
    stty olcuc          # 在命令行下禁止输出小写
    stty -olcuc         # 恢复输出小写
    stty size           # 打印出终端的行数和列数
    stty eof "string"   # 改变系统默认ctrl+D来表示文件的结束
    stty -echo          # 禁止回显
    stty echo           # 打开回显
    stty -echo;read;stty echo;read  # 测试禁止回显
    stty igncr          # 忽略回车符
    stty -igncr         # 恢复回车符
    stty erase '#'      # 将#设置为退格字符
    stty erase '^?'     # 恢复退格字符

    定时输入{

        timeout_read(){
            timeout=$1
            old_stty_settings=`stty -g`  # save current settings
            stty -icanon min 0 time 100  # set 10seconds,not 100seconds
            eval read varname            # =read $varname
            stty "$old_stty_settings"    # recover settings
        }

        read -t 10 varname    # 更简单的方法就是利用read命令的-t选项

    }

    检测用户按键{

        #!/bin/bash
        old_tty_settings=$(stty -g)   # 保存老的设置(为什么?).
        stty -icanon
        Keypress=$(head -c1)          # 或者使用$(dd bs=1 count=1 2> /dev/null)
        echo "Key pressed was \""$Keypress"\"."
        stty "$old_tty_settings"      # 恢复老的设置.
        exit 0

    }

}

iptables{

    内建三个表:nat mangle 和 filter
    filter预设规则表,有INPUT、FORWARD 和 OUTPUT 三个规则链
    vi /etc/sysconfig/iptables    # 配置文件
    INPUT    # 进入
    FORWARD  # 转发
    OUTPUT   # 出去
    ACCEPT   # 将封包放行
    REJECT   # 拦阻该封包
    DROP     # 丢弃封包不予处理
    -A       # 在所选择的链(INPUT等)末添加一条或更多规则
    -D       # 删除一条
    -E       # 修改
    -p       # tcp、udp、icmp    0相当于所有all    !取反
    -P       # 设置缺省策略(与所有链都不匹配强制使用此策略)
    -s       # IP/掩码    (IP/24)    主机名、网络名和清楚的IP地址 !取反
    -j       # 目标跳转,立即决定包的命运的专用内建目标
    -i       # 进入的(网络)接口 [名称] eth0
    -o       # 输出接口[名称]
    -m       # 模块
    --sport  # 源端口
    --dport  # 目标端口

    iptables -F                        # 将防火墙中的规则条目清除掉  # 注意: iptables -P INPUT ACCEPT
    iptables-restore < 规则文件        # 导入防火墙规则
    /etc/init.d/iptables save          # 保存防火墙设置
    /etc/init.d/iptables restart       # 重启防火墙服务
    iptables -L -n                     # 查看规则
    iptables -t nat -nL                # 查看转发

    iptables实例{

        iptables -L INPUT                   # 列出某规则链中的所有规则
        iptables -X allowed                 # 删除某个规则链 ,不加规则链,清除所有非内建的
        iptables -Z INPUT                   # 将封包计数器归零
        iptables -N allowed                 # 定义新的规则链
        iptables -P INPUT DROP              # 定义过滤政策
        iptables -A INPUT -s 192.168.1.1    # 比对封包的来源IP   # ! 192.168.0.0/24  ! 反向对比
        iptables -A INPUT -d 192.168.1.1    # 比对封包的目的地IP
        iptables -A INPUT -i eth0           # 比对封包是从哪片网卡进入
        iptables -A FORWARD -o eth0         # 比对封包要从哪片网卡送出 eth+表示所有的网卡
        iptables -A INPUT -p tcp            # -p ! tcp 排除tcp以外的udp、icmp。-p all所有类型
        iptables -D INPUT 8                 # 从某个规则链中删除一条规则
        iptables -D INPUT --dport 80 -j DROP         # 从某个规则链中删除一条规则
        iptables -R INPUT 8 -s 192.168.0.1 -j DROP   # 取代现行规则
        iptables -I INPUT 8 --dport 80 -j ACCEPT     # 插入一条规则
        iptables -A INPUT -i eth0 -j DROP            # 其它情况不允许
        iptables -A INPUT -p tcp -s IP -j DROP       # 禁止指定IP访问
        iptables -A INPUT -p tcp -s IP --dport port -j DROP               # 禁止指定IP访问端口
        iptables -A INPUT -s IP -p tcp --dport port -j ACCEPT             # 允许在IP访问指定端口
        iptables -A INPUT -p tcp --dport 22 -j DROP                       # 禁止使用某端口
        iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 8 -j DROP   # 禁止icmp端口
        iptables -A INPUT -i eth0 -p icmp -j DROP                         # 禁止icmp端口
        iptables -t filter -A INPUT -i eth0 -p tcp --syn -j DROP                  # 阻止所有没有经过你系统授权的TCP连接
        iptables -A INPUT -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT   # IP包流量限制
        iptables -A INPUT -i eth0 -s 192.168.62.1/32 -p icmp -m icmp --icmp-type 8 -j ACCEPT  # 除192.168.62.1外,禁止其它人ping我的主机
        iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent --update --seconds 5 --hitcount 20 --rttl --name WEB --rsource -j DROP  # 可防御cc攻击(未测试)

    }

    iptables配置实例文件{

        # Generated by iptables-save v1.2.11 on Fri Feb  9 12:10:37 2007
        *filter
        :INPUT ACCEPT [637:58967]
        :FORWARD DROP [0:0]
        :OUTPUT ACCEPT [5091:1301533]
        # 允许的IP或IP段访问 建议多个
        -A INPUT -s 127.0.0.1 -p tcp -j ACCEPT
        -A INPUT -s 192.168.0.0/255.255.0.0 -p tcp -j ACCEPT
        # 开放对外开放端口
        -A INPUT -p tcp --dport 80 -j ACCEPT
        # 指定某端口针对IP开放
        -A INPUT -s 192.168.10.37 -p tcp --dport 22 -j ACCEPT
        # 拒绝所有协议(INPUT允许)
        -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,URG RST -j DROP
        # 允许已建立的或相关连的通行
        -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
        # 拒绝ping
        -A INPUT -p tcp -m tcp -j REJECT --reject-with icmp-port-unreachable
        COMMIT
        # Completed on Fri Feb  9 12:10:37 2007

    }

    iptables配置实例{

        # 允许某段IP访问任何端口
        iptables -A INPUT -s 192.168.0.3/24 -p tcp -j ACCEPT
        # 设定预设规则 (拒绝所有的数据包,再允许需要的,如只做WEB服务器.还是推荐三个链都是DROP)
        iptables -P INPUT DROP
        iptables -P FORWARD DROP
        iptables -P OUTPUT ACCEPT
        # 注意: 直接设置这三条会掉线
        # 开启22端口
        iptables -A INPUT -p tcp --dport 22 -j ACCEPT
        # 如果OUTPUT 设置成DROP的,要写上下面一条
        iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
        # 注:不写导致无法SSH.其他的端口一样,OUTPUT设置成DROP的话,也要添加一条链
        # 如果开启了web服务器,OUTPUT设置成DROP的话,同样也要添加一条链
        iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
        # 做WEB服务器,开启80端口 ,其他同理
        iptables -A INPUT -p tcp --dport 80 -j ACCEPT
        # 做邮件服务器,开启25,110端口
        iptables -A INPUT -p tcp --dport 110 -j ACCEPT
        iptables -A INPUT -p tcp --dport 25 -j ACCEPT
        # 允许icmp包通过,允许ping
        iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT设置成DROP的话)
        iptables -A INPUT -p icmp -j ACCEPT  (INPUT设置成DROP的话)
        # 允许loopback!(不然会导致DNS无法正常关闭等问题)
        IPTABLES -A INPUT -i lo -p all -j ACCEPT (如果是INPUT DROP)
        IPTABLES -A OUTPUT -o lo -p all -j ACCEPT(如果是OUTPUT DROP)

    }

    centos6的iptables基本配置{
        *filter
        :INPUT ACCEPT [0:0]
        :FORWARD ACCEPT [0:0]
        :OUTPUT ACCEPT [0:0]
        -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
        -A INPUT -p icmp -j ACCEPT
        -A INPUT -i lo -j ACCEPT
        -A INPUT -s 222.186.135.61 -p tcp -j ACCEPT
        -A INPUT -p tcp  --dport 80 -j ACCEPT
        -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
        -A INPUT -j REJECT --reject-with icmp-host-prohibited
        -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,URG RST -j DROP
        -A FORWARD -j REJECT --reject-with icmp-host-prohibited
        COMMIT
    }

    添加网段转发{

        # 例如通过vpn上网
        echo 1 > /proc/sys/net/ipv4/ip_forward       # 在内核里打开ip转发功能
        iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j MASQUERADE  # 添加网段转发
        iptables -t nat -A POSTROUTING -s 10.0.0.0/255.0.0.0 -o eth0 -j SNAT --to 192.168.10.158  # 原IP网段经过哪个网卡IP出去
        iptables -t nat -nL                # 查看转发

    }

    端口映射{

        # 内网通过有外网IP的机器映射端口
        # 内网主机添加路由
        route add -net 10.10.20.0 netmask 255.255.255.0 gw 10.10.20.111     # 内网需要添加默认网关,并且网关开启转发
        # 网关主机
        echo 1 > /proc/sys/net/ipv4/ip_forward       # 在内核里打开ip转发功能
        iptables -t nat -A PREROUTING -d 外网IP  -p tcp --dport 9999 -j DNAT --to 10.10.20.55:22    # 进入
        iptables -t nat -A POSTROUTING -s 10.10.20.0/24 -j SNAT --to 外网IP                         # 转发回去
        iptables -t nat -nL                # 查看转发

    }

}

}

4 服务{

/etc/init.d/sendmail start                   # 启动服务
/etc/init.d/sendmail stop                    # 关闭服务
/etc/init.d/sendmail status                  # 查看服务当前状态
/date/mysql/bin/mysqld_safe --user=mysql &   # 启动mysql后台运行
/bin/systemctl restart  mysqld.service       # centos7启动服务
vi /etc/rc.d/rc.local                        # 开机启动执行  可用于开机启动脚本
/etc/rc.d/rc3.d/S55sshd                      # 开机启动和关机关闭服务连接    # S开机start  K关机stop  55级别 后跟服务名
ln -s -f /date/httpd/bin/apachectl /etc/rc.d/rc3.d/S15httpd   # 将启动程序脚本连接到开机启动目录
ipvsadm -ln                                  # lvs查看后端负载机并发
ipvsadm -C                                   # lvs清除规则
xm list                                      # 查看xen虚拟主机列表
virsh                                        # 虚拟化(xen\kvm)管理工具  yum groupinstall Virtual*
./bin/httpd -M                               # 查看httpd加载模块
httpd -t -D DUMP_MODULES                     # rpm包httpd查看加载模块
echo 内容| /bin/mail -s "标题" 收件箱 -f 发件人       # 发送邮件
"`echo "内容"|iconv -f utf8 -t gbk`" | /bin/mail -s "`echo "标题"|iconv -f utf8 -t gbk`" 收件箱     # 解决邮件乱码
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg   # 检测nagios配置文件

chkconfig{

    chkconfig service on|off|set             # 设置非独立服务启状态
    chkconfig --level 35   httpd   off       # 让服务不自动启动
    chkconfig --level 35   httpd   on        # 让服务自动启动 35指的是运行级别
    chkconfig --list                         # 查看所有服务的启动状态
    chkconfig --list |grep httpd             # 查看某个服务的启动状态
    chkconfig –-list [service]               # 查看服务的状态

}

systemctl{

    systemctl is-active *.service      # 查看服务是否运行
    systemctl is-enabled *.service     # 查询服务是否开机启动
    systemctl mask *.service           # 注销指定服务
    systemctl unmask cups.service      # 取消注销cups服务
    systemctl enable *.service         # 开机运行服务
    systemctl disable *.service        # 取消开机运行
    systemctl start *.service          # 启动服务
    systemctl stop *.service           # 停止服务
    systemctl restart *.service        # 重启服务
    systemctl reload *.service         # 重新加载服务配置文件
    systemctl status *.service         # 查询服务运行状态
    systemctl --failed                 # 显示启动失败的服务
    systemctl poweroff                 # 系统关机
    systemctl reboot                   # 重新启动
    systemctl rescue                   # 强制进入救援模式
    systemctl emergency                # 强制进入紧急救援模式
    systemctl list-dependencies        # 查看当前运行级别target(mult-user)启动了哪些服务
    systemctl list-unit-files          # 查看开机启动的状态
    journalctl -r -u elasticsearch.service  # 查看日志 r倒序 u服务名
    /etc/systemd/system/falcon-agent.service
        [Unit]
        Description=This is zuiyou monitor agent
        After=network.target remote-fs.target nss-lookup.target

        [Service]
        User= root
        Type=simple
        PIDFile=/opt/falcon-agent/var/app.pid
        ExecStartPre=/usr/bin/rm -f /opt/falcon-agent/var/app.pid
        ExecStart=/opt/falcon-agent/control start
        ExecReload=/bin/kill -s HUP $MAINPID
        KillMode=process
        KillSignal=SIGQUIT
        TimeoutStopSec=5
        PrivateTmp=true
        Restart=always
        LimitNOFILE=infinity

        [Install]
        WantedBy=multi-user.target

    systemctl daemon-reload           # 加载配置

}


nginx{

    yum install -y make gcc  openssl-devel pcre-devel  bzip2-devel libxml2 libxml2-devel curl-devel libmcrypt-devel libjpeg libjpeg-devel libpng libpng-devel openssl

    groupadd nginx
    useradd nginx -g nginx -M -s /sbin/nologin

    mkdir -p /opt/nginx-tmp

    wget http://labs.frickle.com/files/ngx_cache_purge-1.6.tar.gz
    tar fxz ngx_cache_purge-1.6.tar.gz
    # ngx_cache_purge 清除指定url缓存
    # 假设一个URL为 http://192.168.12.133/test.txt
    # 通过访问      http://192.168.12.133/purge/test.txt  就可以清除该URL的缓存。

    tar zxvpf nginx-1.4.4.tar.gz
    cd nginx-1.4.4

    # ./configure --help
    # --with                 # 默认不加载 需指定编译此参数才使用
    # --without              # 默认加载,可用此参数禁用
    # --add-module=path      # 添加模块的路径
    # --add-module=/opt/ngx_module_upstream_check \         # nginx 代理状态页面
    # ngx_module_upstream_check  编译前需要打对应版本补丁 patch -p1 < /opt/nginx_upstream_check_module/check_1.2.6+.patch
    # --add-module=/opt/ngx_module_memc \                   # 将请求页面数据存放在 memcached中
    # --add-module=/opt/ngx_module_lua \                    # 支持lua脚本 yum install lua-devel lua

    ./configure \
    --user=nginx \
    --group=nginx \
    --prefix=/usr/local/nginx \
    --with-http_ssl_module \
    --with-http_realip_module \
    --with-http_gzip_static_module \
    --with-http_stub_status_module \
    --add-module=/opt/ngx_cache_purge-1.6 \
    --http-client-body-temp-path=/opt/nginx-tmp/client \
    --http-proxy-temp-path=/opt/nginx-tmp/proxy \
    --http-fastcgi-temp-path=/opt/nginx-tmp/fastcgi \
    --http-uwsgi-temp-path=/opt/nginx-tmp/uwsgi \
    --http-scgi-temp-path=/opt/nginx-tmp/scgi

    make && make install

    /usr/local/nginx/sbin/nginx –t             # 检查Nginx配置文件 但并不执行
    /usr/local/nginx/sbin/nginx -t -c /opt/nginx/conf/nginx.conf  # 检查Nginx配置文件
    /usr/local/nginx/sbin/nginx                # 启动nginx
    /usr/local/nginx/sbin/nginx -s reload      # 重载配置
    /usr/local/nginx/sbin/nginx -s stop        # 关闭nginx服务

}

elasticsearch{

    vim /etc/sysctl.conf
    vm.max_map_count = 262144

    vim /etc/security/limits.conf
    * soft memlock unlimited
    * hard memlock unlimited
    sysctl -p

    curl 'localhost:9200/_cat/health?v'                    # 健康检查
    curl 'localhost:9200/_cat/nodes?v'                     # 获取集群的节点列表
    curl 'localhost:9200/_cat/indices?v'                   # 列出所有索引
    curl 127.0.0.1:9200/indexname -XDELETE                 # 删除索引
    curl -XGET http://localhost:9200/_cat/shards           # 查看分片
    curl '127.0.0.1:9200/_cat/indices'                     # 查分片同步  unassigned_shards  # 没同步完成

}


mysql常用命令{

    # mysql 可视化工具 MySQL Workbench

    mysqlcheck -uroot -p -S mysql.sock --optimize --databases account       # 检查、修复、优化MyISAM表
    mysqlbinlog slave-relay-bin.000001              # 查看二进制日志
    mysqladmin -h myhost -u root -p create dbname   # 创建数据库

    flush privileges;             # 刷新
    show databases;               # 显示所有数据库
    use dbname;                   # 打开数据库
    show tables;                  # 显示选中数据库中所有的表
    desc tables;                  # 查看表结构
    drop database name;           # 删除数据库
    drop table name;              # 删除表
    create database name;         # 创建数据库
    select column from table;     # 查询
    show processlist;             # 查看mysql进程
    show full processlist;        # 显示进程全的语句
    select user();                # 查看所有用户
    show slave status\G;          # 查看主从状态
    show variables;               # 查看所有参数变量
    show status;                  # 运行状态
    show table status             # 查看表的引擎状态
    show grants for user@'%'                                    # 查看用户权限
    drop table if exists user                                   # 表存在就删除
    create table if not exists user                             # 表不存在就创建
    select host,user,password from user;                        # 查询用户权限 先use mysql
    create table ka(ka_id varchar(6),qianshu int);              # 创建表
    show variables like 'character_set_%';                      # 查看系统的字符集和排序方式的设定
    show variables like '%timeout%';                            # 查看超时相关参数
    delete from user where user='';                             # 删除空用户
    delete from user where user='sss' and host='localhost' ;    # 删除用户
    drop user 'sss'@'localhost';                                # 使用此方法删除用户更为靠谱
    ALTER TABLE mytable ENGINE = MyISAM ;                       # 改变现有的表使用的存储引擎
    SHOW TABLE STATUS from  dbname  where Name='tablename';     # 查询表引擎
    mysql -uroot -p -A -ss -h10.10.10.5 -e "show databases;"    # shell中获取数据不带表格 -ss参数
    CREATE TABLE innodb (id int, title char(20)) ENGINE = INNODB                     # 创建表指定存储引擎的类型(MyISAM或INNODB)
    grant replication slave on *.* to 'user'@'%' identified by 'pwd';                # 创建主从复制用户
    ALTER TABLE player ADD INDEX weekcredit_faction_index (weekcredit, faction);     # 添加索引
    alter table name add column accountid(column)  int(11) NOT NULL(column);         # 插入字段
    update host set monitor_state='Y',hostname='xuesong' where ip='192.168.1.1';     # 更新数据
    select * from information_schema.processlist where command!='sleep';             # 查看当前进程
    select * from atable where name='on' AND t<15 AND host LIKE '10%' limit 1,10;    # 多条件查询
    show create database ops_deploy;                                                 # 查看数据库编码
    show create table updatelog;                                                     # 查看数据库表编码
    alter database ops_deploy CHARACTER SET utf8;                                    # 修改数据库编码
    alter table `updatelog` default character set utf8;                              # 修改表编码
    alter table `updatelog` convert to character set utf8;                           # 修改一张表的所有字段的编码格式

    自增表{

        create table xuesong  (id INTEGER  PRIMARY KEY AUTO_INCREMENT, name CHAR(30) NOT NULL, age integer , sex CHAR(15) );  # 创建自增表
        insert into xuesong(name,age,sex) values(%s,%s,%s)  # 自增插入数据

    }

    登录mysql的命令{

        # 格式:mysql -h 主机地址 -u 用户名 -p 用户密码
        mysql -h110.110.110.110 -P3306 -uroot -p
        mysql -uroot -p -S /data1/mysql5/data/mysql.sock -A  --default-character-set=GBK

    }

    shell执行mysql命令{

        mysql -u root -p'123' xuesong < file.sql   # 针对指定库执行sql文件中的语句,好处不需要转义特殊符号,一条语句可以换行.不指定库执行时语句中需要先use
        mysql -u$username -p$passwd -h$dbhost -P$dbport -A -e "
        use $dbname;
        delete from data where date=('$date1');
        "    # 执行多条mysql命令
        mysql -uroot -p -S mysql.sock -e "use db;alter table gift add column accountid  int(11) NOT NULL;flush privileges;"  2>&1 |grep -v Warning    # 不登陆mysql插入字段

    }


    mysql字符集相关{

        show variables like '%character%';      # 查看数据库中设置字符集的参数
        # character_set_client、character_set_connection 以及 character_set_results 这几个参数都是客户端的设置
        # character_set_system、character_set_server 以及 character_set_database 是指服务器端的设置。
        # 而对于这三个服务器端的参数来说的优先级是:
        # 列级字符集 > 表级字符集 > character_set_database > character_set_server > character_set_system

        show global variables like '%char%';                                 #查看RDS实例字符集相关参数设置
        show global variables like 'coll%';                                  #查看当前会话字符序相关参数设置
        show character set;                                                  #查看实例支持的字符集
        show collation;                                                      #查看实例支持的字符序
        show create table table_name \G                                      #查看表字符集设置
        show create database database_name \G                                #查看数据库字符集设置
        show create procedure procedure_name \G                              #查看存储过程字符集设置
        show procedure status \G                                             #查看存储过程字符集设置
        alter database db_name default charset utf8;                         #修改数据库的字符集 
        create database db_name character set utf8;                          #创建数据库时指定字符集
        alter table tab_name default charset utf8 collate utf8_general_ci;   #修改表字符集和字符序

        # 下面三条sql 分别将库 dbsdq , 表 tt2 , 表 tt2 中的 c2 列修改为utf8mb4 字符集
        alter database dbsdq character set utf8mb4 collate utf8mb4_unicode_ci;
        use dbsdq;
        alter table tt2 character set utf8mb4 collate utf8mb4_unicode_ci;
        alter table tt2 modify c2  varchar(10) character set utf8mb4;
        # 修改列时,当前列中的所有行都会立即转化为新的字符集;
        # alter table 会对表加元数据锁

    }

    备份数据库{

        mysqldump -h host -u root -p --default-character-set=utf8 dbname >dbname_backup.sql               # 不包括库名,还原需先创建库,在use
        mysqldump -h host -u root -p --database --default-character-set=utf8 dbname >dbname_backup.sql    # 包括库名,还原不需要创建库
        /bin/mysqlhotcopy -u root -p    # mysqlhotcopy只能备份MyISAM引擎
        mysqldump -u root -p -S mysql.sock --default-character-set=utf8 dbname table1 table2  > /data/db.sql    # 备份表
        mysqldump -uroot -p123  -d database > database.sql    # 备份数据库结构

        # 最小权限备份
        grant select on db_name.* to dbbackup@"localhost" Identified by "passwd";
        # --single-transaction  InnoDB有时间戳 只备份开始那一刻的数据,备份过程中的数据不会备份
        mysqldump -hlocalhost -P 3306 -u dbbackup --single-transaction  -p"passwd" --database dbname >dbname.sql

        # xtrabackup备份需单独安装软件 优点: 速度快,压力小,可直接恢复主从复制
        innobackupex --user=root --password="" --defaults-file=/data/mysql5/data/my_3306.cnf --socket=/data/mysql5/data/mysql.sock --slave-info --stream=tar --tmpdir=/data/dbbackup/temp /data/dbbackup/ 2>/data/dbbackup/dbbackup.log | gzip 1>/data/dbbackup/db50.tar.gz

    }

    还原数据库{

        mysql -h host -u root -p dbname < dbname_backup.sql
        source 路径.sql   # 登陆mysql后还原sql文件

    }

    赋权限{

        # 指定IP: $IP  本机: localhost   所有IP地址: %   # 通常指定多条
        grant all on zabbix.* to user@"$IP";             # 对现有账号赋予权限
        grant select on database.* to user@"%" Identified by "passwd";     # 赋予查询权限(没有用户,直接创建)
        grant all privileges on database.* to user@"$IP" identified by 'passwd';         # 赋予指定IP指定用户所有权限(不允许对当前库给其他用户赋权限)
        grant all privileges on database.* to user@"localhost" identified by 'passwd' with grant option;   # 赋予本机指定用户所有权限(允许对当前库给其他用户赋权限)
        grant select, insert, update, delete on database.* to user@'ip'identified by "passwd";   # 开放管理操作指令
        revoke all on *.* from user@localhost;     # 回收权限
        GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, EXECUTE, CREATE ROUTINE, ALTER ROUTINE ON `storemisc_dev`.* TO 'user'@'192.168.%'

    }

    更改密码{

        update user set password=password('passwd') where user='root'
        mysqladmin -u root password 'xuesong'

    }

    mysql忘记密码后重置{

        cd /data/mysql5
        /data/mysql5/bin/mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
        use mysql;
        update user set password=password('123123') where user='root';

    }

    mysql主从复制失败恢复{

        slave stop;
        reset slave;
        change master to master_host='10.10.10.110',master_port=3306,master_user='repl',master_password='repl',master_log_file='master-bin.000010',master_log_pos=107,master_connect_retry=60;
        slave start;

    }

    sql语句使用变量{

        use xuesong;
        set @a=concat('my',weekday(curdate()));    # 组合时间变量
        set @sql :concat('CREATE TABLE IF NOT EXISTS ',@a,'( id INT(11) NOT NULL )');   # 组合sql语句
        select @sql;                    # 查看语句
        prepare create_tb from @sql;    # 准备
        execute create_tb;              # 执行

    }

    检测mysql主从复制延迟{

        1、在从库定时执行更新主库中的一个timeout数值
        2、同时取出从库中的timeout值对比判断从库与主库的延迟

    }

    死锁{

        show OPEN TABLES where In_use > 0;                  # 查看当前锁信息
        show variables like 'innodb_print_all_deadlocks';   # 查看当前死锁参数
        set global innodb_print_all_deadlocks = 1;          # 设置死锁信息保存到错误日志
        innodb_print_all_deadlocks = 1                      # conf配置

    }

    mysql慢查询{

        select * from information_schema.processlist where command in ('Query') and time >5\G      # 查询操作大于5S的进程

        开启慢查询日志{

            # 配置文件 /etc/my.conf
            [mysqld]
            log-slow-queries=/var/lib/mysql/slowquery.log         # 指定日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log
            long_query_time=5                                     # 记录超过的时间,默认为10s 建议0.5S
            log-queries-not-using-indexes                         # log下来没有使用索引的query,可以根据情况决定是否开启  可不加
            log-long-format                                       # 如果设置了,所有没有使用索引的查询也将被记录    可不加
            # 直接修改生效
            show variables like "%slow%";                         # 查看慢查询状态
            set global slow_query_log='ON';                       # 开启慢查询日志 变量可能不同,看上句查询出来的变量

        }

        mysqldumpslow慢查询日志查看{

            -s  # 是order的顺序,包括看了代码,主要有 c,t,l,r和ac,at,al,ar,分别是按照query次数,时间,lock的时间和返回的记录数来排序,前面加了a的时倒序
            -t  # 是top n的意思,即为返回前面多少条的数据
            -g  # 后边可以写一个正则匹配模式,大小写不敏感的

            mysqldumpslow -s c -t 20 host-slow.log                # 访问次数最多的20个sql语句
            mysqldumpslow -s r -t 20 host-slow.log                # 返回记录集最多的20个sql
            mysqldumpslow -t 10 -s t -g "left join" host-slow.log # 按照时间返回前10条里面含有左连接的sql语句

            show global status like '%slow%';                     # 查看现在这个session有多少个慢查询
            show variables like '%slow%';                         # 查看慢查询日志是否开启,如果slow_query_log和log_slow_queries显示为on,说明服务器的慢查询日志已经开启
            show variables like '%long%';                         # 查看超时阀值
            desc select * from wei where text='xishizhaohua'\G;   # 扫描整张表 tepe:ALL  没有使用索引 key:NULL
            create index text_index on wei(text);                 # 创建索引

        }

        Percona Toolkit 慢日志分析工具

    }

    mysql操作次数查询{

        select * from information_schema.global_status;

        com_select
        com_delete
        com_insert
        com_update

    }

}

mongodb{

    # mongo可视管理工具 studio 3t  

    一、启动{

        # 不启动认证
        ./mongod --port 27017 --fork --logpath=/opt/mongodb/mongodb.log --logappend --dbpath=/opt/mongodb/data/
        # 启动认证
        ./mongod --port 27017 --fork --logpath=/opt/mongodb/mongodb.log --logappend --dbpath=/opt/mongodb/data/ --auth

        # 配置文件方式启动
        cat /opt/mongodb/mongodb.conf
          port=27017                       # 端口号
          fork=true                        # 以守护进程的方式运行,创建服务器进程
          auth=true                        # 开启用户认证
          logappend=true                   # 日志采用追加方式
          logpath=/opt/mongodb/mongodb.log # 日志输出文件路径
          dbpath=/opt/mongodb/data/        # 数据库路径
          shardsvr=true                    # 设置是否分片
          maxConns=600                     # 数据库的最大连接数
        ./mongod -f /opt/mongodb/mongodb.conf

        # 其他参数
        bind_ip         # 绑定IP  使用mongo登录需要指定对应IP
        journal         # 开启日志功能,降低单机故障的恢复时间,取代dur参数
        syncdelay       # 系统同步刷新磁盘的时间,默认60秒
        directoryperdb  # 每个db单独存放目录,建议设置.与mysql独立表空间类似
        repairpath      # 执行repair时的临时目录.如果没开启journal,出现异常重启,必须执行repair操作
        # mongodb没有参数设置内存大小.使用os mmap机制缓存数据文件,在数据量不超过内存的情况下,效率非常高.数据量超过系统可用内存会影响写入性能

    }

    二、关闭{

        # 方法一:登录mongodb
        ./mongo
        use admin
        db.shutdownServer()

        # 方法:kill传递信号  两种皆可
        kill -2 pid
        kill -15 pid

    }

    三、开启认证与用户管理{

        ./mongo                      # 先登录
        use admin                    # 切换到admin库
        db.addUser("root","123456")                     # 创建用户
        db.addUser('zhansan','pass',true)               # 如果用户的readOnly为true那么这个用户只能读取数据,添加一个readOnly用户zhansan
        ./mongo 127.0.0.1:27017/mydb -uroot -p123456    # 再次登录,只能针对用户所在库登录
        #虽然是超级管理员,但是admin不能直接登录其他数据库,否则报错
        #Fri Nov 22 15:03:21.886 Error: 18 { code: 18, ok: 0.0, errmsg: "auth fails" } at src/mongo/shell/db.js:228
        show collections                                # 查看链接状态 再次登录使用如下命令,显示错误未经授权
        db.system.users.find();                         # 查看创建用户信息
        db.system.users.remove({user:"zhansan"})        # 删除用户

        #恢复密码只需要重启mongodb 不加--auth参数

    }

    四、登录{

        192.168.1.5:28017      # http登录后可查看状态
        mongo                  # 默认登录后打开 test 库
        mongo 192.168.1.5:27017/databaseName      # 直接连接某个库 不存在则创建  启动认证需要指定对应库才可登录

    }

    五、查看状态{

        #登录后执行命令查看状态
        db.runCommand({"serverStatus":1})
            globalLock         # 表示全局写入锁占用了服务器多少时间(微秒)
            mem                # 包含服务器内存映射了多少数据,服务器进程的虚拟内存和常驻内存的占用情况(MB)
            indexCounters      # 表示B树在磁盘检索(misses)和内存检索(hits)的次数.如果这两个比值开始上升,就要考虑添加内存了
            backgroudFlushing  # 表示后台做了多少次fsync以及用了多少时间
            opcounters         # 包含每种主要擦撞的次数
            asserts            # 统计了断言的次数

        #状态信息从服务器启动开始计算,如果过大就会复位,发送复位,所有计数都会复位,asserts中的roolovers值增加

        #mongodb自带的命令
        ./mongostat
            insert     #每秒插入量
            query      #每秒查询量
            update     #每秒更新量
            delete     #每秒删除量
            locked     #锁定量
            qr|qw      #客户端查询排队长度(读|写)
            ar|aw      #活跃客户端量(读|写)
            conn       #连接数
            time       #当前时间

        mongostat -h 127.0.0.1 --port 27047 --authenticationDatabase admin -u zadmin -p Keaphh9e    # 查看mongo状态
        mongotop  -h 127.0.0.1 --port 27047 --authenticationDatabase admin -u zadmin -p Keaphh9e    # 查看mongo集合的统计数据

    }

    六、常用命令{

        db.listCommands()     # 当前MongoDB支持的所有命令(同样可通过运行命令db.runCommand({"listCommands" : `1})来查询所有命令)

        db.runCommand({"buildInfo" : 1})                                  # 返回MongoDB服务器的版本号和服务器OS的相关信息
        db.runCommand({"collStats" : tablename})                          # 返回该集合的统计信息,包括数据大小,已分配存储空间大小,索引的大小等
        db.runCommand({"dropDatabase" : 1})                               # 清空当前数据库的信息,包括删除所有的集合和索引
        db.runCommand({"isMaster" : 1})                                   # 检查本服务器是主服务器还是从服务器
        db.runCommand({"ping" : 1})                                       # 检查服务器链接是否正常。即便服务器上锁,该命令也会立即返回
        db.runCommand({"repaireDatabase" : 1})                            # 对当前数据库进行修复并压缩,如果数据库特别大,这个命令会非常耗时
        db.runCommand({"serverStatus" : 1})                               # 查看这台服务器的管理统计信息
        # 某些命令必须在admin数据库下运行,如下两个命令:
        db.runCommand({"renameCollection" : 集合名, "to":集合名})          # 对集合重命名,注意两个集合名都要是完整的集合命名空间,如foo.bar, 表示数据库foo下的集合bar。
        db.runCommand({"listDatabases" : 1})                              # 列出服务器上所有的数据库

        mongo  172.20.20.1:27072/mdb --eval "db.tb.count();"              # shell执行mongo语句
        mongo --host  172.20.20.1 --port 27049

        rs.config();                                                      # 查看集群配置
        rs.status();                                                      # 查看集群节点的状态
        db.currentOp()                                                    # 获取当前正在执行的操作,可对应命令链接到ip:port
        db.runCommand( { logRotate : 1 } )                                # 日志轮转
        rs.slaveOk()                                                      # 设置从库shell可读
        rs.addArb("172.16.10.199:27020");                                 # 添加仲裁节点
        rs.add({host: "10.2.2.2:27047", priority: 0, hidden: true})       # 添加从节点 hidden true隐藏节点[priority必须为0]  false不隐藏
        rs.remove("172.20.80.216:27047");                                 # 删除节点
        rs.stepDown(120)                                                  # 主库上执行切换为从,120秒后切换回主
        show dbs                                                          # 查询db
        use post                                                          # 选择db
        show tables                                                       # 查看文档列表
        db.tb.drop()                                                      # 删除集合 需要权限
        db.tb.remove({})                                                  # 删除所有数据
        db.tb.count()                                                     # 查询文档条数
        db.tb.find()                                                      # 查看文档内容
        db.tb.find({_id:37530555})                                        # 查询指定id
        db.tb.find().sort({_id:-1}).limit(1)                              # 查询文档最后一条
        db.tb.find({"processed" : {"$ne" : true}}).limit(1);              # 字段不为 true
        db.tb.find({"processed" : {"$eq" : true}}).limit(1);              # 字段为 true
        db.tb.find({"processed" : {"$exists" : false}}).limit(1);         # 字段不存在

        db.tb.ensureIndex({"status":1}, {background:true})                # 后台加索引
        db.tb.getIndexes()                                                # 查看索引
        db.tb.ensureIndex({"c_type":1},{backgrounnd:true})                # 后台添加索引  1正向  -1反向
        db.tb.dropIndex({"c_type":1});                                    # 删除索引

    }

    七、进程控制{

        db.currentOp()                  # 查看活动进程
        db.$cmd.sys.inprog.findOne()    # 查看活动进程 与上面一样
            opid      # 操作进程号
            op        # 操作类型(查询\更新)
            ns        # 命名空间,指操作的是哪个对象
            query     # 如果操作类型是查询,这里将显示具体的查询内容
            lockType  # 锁的类型,指明是读锁还是写锁

        db.killOp(opid值)                         # 结束进程
        db.$cmd.sys.killop.findOne({op:opid值})   # 结束进程

    }

    八、备份还原{
        # mongodump 虽然能不停机备份,但是为了获取实时数据视图的能力,使用fsync命令能在运行时复制数据目录并且不会损坏数据
        # fsync会强制服务器将所有缓冲区的数据写入磁盘.配合lock还阻止对数据库的进一步写入,知道释放锁为止
        db.runCommand({"fsync":1,"lock":1})   # 执行强制更新与写入锁
        db.$cmd.sys.unlock.findOne()          # 解锁
        db.currentOp()                        # 查看解锁是否正常

        mongoexport -d test -c t1 -o t1.dat                 # 导出JSON格式
            -c         # 指明导出集合
            -d         # 使用库
        mongoexport -d test -c t1 -csv -f num -o t1.dat     # 导出csv格式
            -csv       # 指明导出csv格式
            -f         # 指明需要导出那些例

        mongoimport -d test -c t1 -file t1.dat                           # mongoimport还原JSON格式
        mongoimport -d test -c t1 -type csv --headerline -file t1.dat    # mongoimport还原csv格式数据
            --headerline                # 指明不导入第一行 因为第一行是列名

        mongodump -d test -o /bak/mongodump                # mongodump数据备份
        mongorestore -d test --drop /bak/mongodump/*       # mongorestore恢复
            --drop      # 恢复前先删除
            --gzip      # 压缩

        # 备份一个表
        # --excludeCollection string # 排除指定的集合 要排除多个,使用多个
        mongodump --host 127.0.0.1:27080 -d dbname  -c tablename  -o /data/reports/
        mongodump --host 127.0.0.1:27080 -d dbname  -c tablename  -o /data/reports/reports  -u root -p tAvaa5yNUE --authenticationDatabase admin

        # 恢复一个表
        mongorestore --host 127.0.0.1:27080 -d dbname  -c tablename --drop --dir=/data/reports/tablename.bson

        # 在线拷贝一个库
        db.copyDatabase(fromdb, todb, fromhost, username, password, mechanism)
        db.copyDatabase('mate','mate', '172.16.255.176:27047')

    }

    九、修复{

        # 当停电或其他故障引起不正常关闭时,会造成部分数据损坏丢失
        mongod --repair      # 修复操作:启动时候加上 --repair
        # 修复过程:将所有文档导出,然后马上导入,忽略无效文档.完成后重建索引。时间较长,会丢弃损坏文档
        # 修复数据还能起到压缩数据库的作用
        db.repairDatabase()    # 运行中的mongodb可使用 repairDatabase 修复当前使用的数据库
        {"repairDatabase":1}   # 通过驱动程序

    }

    十、python使用mongodb{

        原文: http://blog.nosqlfan.com/html/2989.html

        easy_install pymongo      # python2.7+
        import pymongo
        connection=pymongo.Connection('localhost',27017)   # 创建连接
        db = connection.test_database                      # 切换数据库
        collection = db.test_collection                    # 获取collection
        # db和collection都是延时创建的,在添加Document时才真正创建

        文档添加, _id自动创建
            import datetime
            post = {"author": "Mike",
                "text": "My first blog post!",
                "tags": ["mongodb", "python", "pymongo"],
                "date": datetime.datetime.utcnow()}
            posts = db.posts
            posts.insert(post)
            ObjectId('...')

        批量插入
            new_posts = [{"author": "Mike",
                "text": "Another post!",
                "tags": ["bulk", "insert"],
                "date": datetime.datetime(2009, 11, 12, 11, 14)},
                {"author": "Eliot",
                "title": "MongoDB is fun",
                "text": "and pretty easy too!",
                "date": datetime.datetime(2009, 11, 10, 10, 45)}]
            posts.insert(new_posts)
            [ObjectId('...'), ObjectId('...')]

        获取所有collection
            db.collection_names()    # 相当于SQL的show tables

        获取单个文档
            posts.find_one()

        查询多个文档
            for post in posts.find():
                post

        加条件的查询
            posts.find_one({"author": "Mike"})

        高级查询
            posts.find({"date": {"$lt": "d"}}).sort("author")

        统计数量
            posts.count()

        加索引
            from pymongo import ASCENDING, DESCENDING
            posts.create_index([("date", DESCENDING), ("author", ASCENDING)])

        查看查询语句的性能
            posts.find({"date": {"$lt": "d"}}).sort("author").explain()["cursor"]
            posts.find({"date": {"$lt": "d"}}).sort("author").explain()["nscanned"]

    }

}

JDK安装{

    vim /etc/profile.d/jdk.sh
    export JAVA_HOME=/usr/local/jdk1.8.0_151
    export PATH=$JAVA_HOME/bin:$PATH

    . /etc/profile         # 加载新的环境变量
    jps -ml                # 查看java进程
    jstat -gc 18381 1s 30  # 查看java进程gc情况
}

redis动态加内存{

    ./redis-cli -h 10.10.10.11 -p 6401
    save                                # 保存当前快照
    config get *                        # 列出所有当前配置
    config get maxmemory                # 查看指定配置
    config set maxmemory  15360000000   # 动态修改最大内存配置参数

}

nfs{

    # 依赖rpc服务通信 portmap[centos5] 或 rpcbind[centos6]
    yum install nfs-utils portmap    # centos5安装
    yum install nfs-utils rpcbind    # centos6安装

    vim /etc/exports                 # 配置文件
    # sync                           # 同步写入
    # async                          # 暂存并非直接写入
    # no_root_squash                 # 开放用户端使用root身份操作
    # root_squash                    # 使用者身份为root则被压缩成匿名使用,即nobody,相对安全
    # all_squash                     # 所有NFS的使用者身份都被压缩为匿名
    /data/images 10.10.10.0/24(rw,sync,no_root_squash)

    service  portmap restart         # 重启centos5的nfs依赖的rpc服务
    service  rpcbind restart         # 重启centos6的nfs依赖的rpc服务
    service  nfs restart             # 重启nfs服务  确保依赖 portmap 或 rpcbind 服务已启动
    service  nfs reload              # 重载NFS服务配置文件
    showmount -e                     # 服务端查看自己共享的服务
    showmount -a                     # 显示已经与客户端连接上的目录信息
    showmount -e 10.10.10.3          # 列出服务端可供使用的NFS共享  客户端测试能否访问nfs服务
    mount -t nfs 10.10.10.3:/data/images/  /data/img   # 挂载nfs  如果延迟影响大加参数 noac

    # 服务端的 portmap 或 rpcbind 被停止后,nfs仍然工作正常,但是umout财会提示:not found / mounted or server not reachable  重启服务器的portmap 或 rpcbind 也无济于事。nfs也要跟着重启,否则nfs工作仍然是不正常的。
    # 同时已挂载会造成NFS客户端df卡住和挂载目录无法访问。请先用 mount 查看当前挂载情况,记录挂载信息,在强制卸载挂载目录,重新挂载
    umount -f /data/img/             # 强制卸载挂载目录  如还不可以  umount -l /data/img/

    nfsstat -c                       # 客户机发送和拒绝的RPC和NFS调用数目的信息
    nfsstat -cn                      # 显示和打印与客户机NFS调用相关的信息
    nfsstat -r                       # 显示和打印客户机和服务器的与RPC调用相关的信息
    nfsstat –s                       # 显示关于服务器接收和拒绝的RPC和NFS调用数目的信息

}

hdfs{
    hdfs --help                  # 所有参数

    hdfs dfs -help               # 运行文件系统命令在Hadoop文件系统
    hdfs dfs -ls /logs           # 查看
    hdfs dfs -ls /user/          # 查看用户
    hdfs dfs -cat
    hdfs dfs -df
    hdfs dfs -du
    hdfs dfs -rm
    hdfs dfs -tail
    hdfs dfs –put localSrc dest  # 上传文件

    hdfs dfsadmin -help          # hdfs集群节点管理
    hdfs dfsadmin -report        # 基本的文件系统统计信息
}

}


关注

绝对干货的公众号