redis配置认证密码

1. 通过配置文件进行配置

yum方式安装的redis配置文件通常在/etc/redis.conf中,打开配置文件找到

#requirepass foobared  

去掉行前的注释,并修改密码为所需的密码,保存文件

requirepass myRedis  

重启redis

sudo service redis restart  
#或者  
sudo service redis stop  
sudo redis-server /etc/redis.conf  

这个时候尝试登录redis,发现可以登上,但是执行具体命令是提示操作不允许

redis-cli -h 127.0.0.1 -p 6379  
redis 127.0.0.1:6379>  
redis 127.0.0.1:6379> keys *  
(error) ERR operation not permitted  
redis 127.0.0.1:6379> select 1  
(error) ERR operation not permitted  
redis 127.0.0.1:6379[1]>   

尝试用密码登录并执行具体的命令看到可以成功执行

redis-cli -h 127.0.0.1 -p 6379 -a myRedis  
redis 127.0.0.1:6379> keys *  
1) "myset"  
2) "mysortset"  
redis 127.0.0.1:6379> select 1  
OK  
redis 127.0.0.1:6379[1]> config get requirepass  
1) "requirepass"  
2) "myRedis"  

2. 通过命令行进行配置

redis 127.0.0.1:6379[1]> config set requirepass my_redis  
OK  
redis 127.0.0.1:6379[1]> config get requirepass  
1) "requirepass"  
2) "my_redis"  

无需重启redis
使用第一步中配置文件中配置的老密码登录redis,会发现原来的密码已不可用,操作被拒绝

redis-cli -h 127.0.0.1 -p 6379 -a myRedis  
redis 127.0.0.1:6379> config get requirepass  
(error) ERR operation not permitted  

使用修改后的密码登录redis,可以执行相应操作

redis-cli -h 127.0.0.1 -p 6379 -a my_redis  
redis 127.0.0.1:6379> config get requirepass  
1) "requirepass"  
2) "my_redis  

尝试重启一下redis,用新配置的密码登录redis执行操作,发现新的密码失效,redis重新使用了配置文件中的密码

sudo service redis restart  
Stopping redis-server:                                     [  OK  ]  
Starting redis-server:                                     [  OK  ]  
redis-cli -h 127.0.0.1 -p 6379 -a my_redis  
redis 127.0.0.1:6379> config get requirepass  
(error) ERR operation not permitted  
redis-cli -h 127.0.0.1 -p 6379 -a myRedis  
redis 127.0.0.1:6379> config get requirepass  
1) "requirepass"  
2) "myRedis"  

除了在登录时通过 -a 参数制定密码外,还可以登录时不指定密码,而在执行操作前进行认证。

redis-cli -h 127.0.0.1 -p 6379  
redis 127.0.0.1:6379> config get requirepass  
(error) ERR operation not permitted  
redis 127.0.0.1:6379> auth myRedis  
OK  
redis 127.0.0.1:6379> config get requirepass  
1) "requirepass"  
2) "myRedis"  

3. master配置了密码,slave如何配置

若master配置了密码则slave也要配置相应的密码参数否则无法进行正常复制的。
slave中配置文件内找到如下行,移除注释,修改密码即可

#masterauth  mstpassword

python下的redis连接

redis的概念

redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set –有序集合)和hash(哈希类型)。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作,而且这些操作都是原子性的。在此基础上,redis支持各种不同方式的排序。与memcached一样,为了保证效率,数据都是缓存在内存中。区别的是redis会周期性的把更新的数据写入磁盘或者把修改操作写入追加的记录文件,并且在此基础上实现了master-slave(主从)同步。

Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。

Redis支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。这使得Redis可执行单层树复制。存盘可以有意无意的对数据进行写操作。由于完全实现了发布/订阅机制,使得从数据库在任何地方同步树时,可订阅一个频道并接收主服务器完整的消息发布记录。同步对读取操作的可扩展性和数据冗余很有帮助。

安装redis的客户端

pip install redis

redis的插入和读取操作

import redis
r=redis.Redis(host="192.168.1.202",port=6379)
#set操作,第一个参数是key,第二个参数时value
r.set("chao","I love you")
print(r.get("chao"))
#获取所有key 个数
print(len(r.keys()))

结果:
I love you
12

连接池
redis-py使用connection pool来管理对一个redis server的所有连接,避免每次建立、释放连接的开销。默认,每个Redis实例都会维护一个自己的连接池。可以直接建立一个连接池,然后作为参数Redis,这样就可以实现多个Redis实例共享一个连接池

import redis
redis_config = {
    "host":"192.168.1.202",
    "port":6379
}
#r=redis.Redis(**redis_config)
def get_redis_conn():
    pool = redis.ConnectionPool(**redis_config)
    r=redis.Redis(connection_pool=pool)
    return r
if __name__ == '__main__':
    r =get_redis_conn()
    r.set("one","this is frist")
    print(r.get("one"))

结果:this is frist

管道

redis-py默认在执行每次请求都会创建(连接池申请连接)和断开(归还连接池)一次连接操作,如果想要在一次请求中指定多个命令,则可以使用pipline实现一次请求指定多个命令,并且默认情况下一次pipline 是原子性操作。减少功耗

import datetime
import redis
#利用管道批量set
def withpipe(r):
    pipe = r.pipeline(transaction=True)
    for i in xrange(1, 1000):
        key = "test1" +str(i)
        value = "test1" + str(i)
        pipe.set(key, value)
    pipe.execute()

#普通依次set
def withoutpipe(r):
    # pipe = r.pipeline(transaction=True)
    for i in xrange(1, 1000):
        key = "test1" + str(i)
        value = "test1" + str(i)
        r.set(key, value)

if __name__ == "__main__":
    pool = redis.ConnectionPool(host="192.168.1.202", port=6379, db=0)
    r1 = redis.Redis(connection_pool=pool)
    r2 = redis.Redis(connection_pool=pool)
    start = datetime.datetime.now()
    # print(start)
    withpipe(r1)
    end = datetime.datetime.now()
    # print((end-start).microseconds)
    # print(end-start)
    t_time = (end - start).microseconds
    print("withpipe time is : {0}".format(t_time))

    start = datetime.datetime.now()
    withoutpipe(r2)
    end = datetime.datetime.now()
    t_time = (end - start).microseconds
    print("withoutpipe time is : {0}".format(t_time))

结果:

withpipe time is : 28000 
withoutpipe time is : 253000 

可以发现用管道要比普通插入速度快。

环境部署:CentOS7 下 Redis4 安装与配置(Redis开机启动)

一、前言

环境信息

  • CentOS 7
  • Redis 4.0.2

二、安装步骤

  • 安装基础依赖
#安装基础依赖包
sudo yum install -y gcc gcc-c++ make jemalloc-devel epel-release
  • 下载Redis( https://redis.io/download )
#从官网获取最新版本的下载链接,然后通过wget命令下载
wget http://download.redis.io/releases/redis-4.0.2.tar.gz
  • 解压到指定目录
#创建目录
sudo mkdir /usr/redis
#解压
sudo tar -zvxf redis-4.0.2.tar.gz -C /usr/redis
  • 编译&安装
#进入目录
cd /usr/redis/redis-4.0.2
#编译&安装
sudo make & make install
  • 启动redis-server
#进入src目录
cd /usr/redis/redis-4.0.2/src
#启动服务端
sudo ./redis-server
  • 启动redis客户端测试
#进入src目录
cd /usr/redis/redis-4.0.2/src
#启动客户端
sudo ./redis-cli

设置:set key1 value1
获取:get key1

三、Redis配置

1、 配置本机外访问

  • 修改配置:绑定本机IP&关闭保护模式
#修改配置文件
sudo vi /usr/redis/redis-4.0.2/redis.conf

#更换绑定
#将bind 127.0.0.1 更换为本机IP,例如:192.168.11.11
bind 192.168.11.11

#关闭保护模式
protected-mode no
  • 开放端口
#增加redis端口:6379
sudo firewall-cmd --add-port=6379/tcp --permanent
#重新加载防火墙设置
sudo firewall-cmd --reload
  • Redis指定配置文件启动
#进入目录
cd /usr/redis/redis-4.0.2
#指定配置文件启动
sudo ./src/redis-server redis.conf
  • Redis客户端连接指定Redis Server
#进入目录
cd /usr/redis/redis-4.0.2
#连接指定Redis Server
sudo ./src/redis-cli -h 192.168.11.11

2、配置Redis开机启动

将Redis配置成为系统服务,以支持开机启动

  • 创建Redis服务
#创建服务文件
sudo vi /usr/lib/systemd/system/redis.service

#文件内容
[Unit]
Description=Redis Server
After=network.target

[Service]
ExecStart=/usr/redis/redis-4.0.2/src/redis-server /usr/redis/redis-4.0.2/redis.conf --daemonize no
ExecStop=/usr/redis/redis-4.0.2/src/redis-cli -p 6379 shutdown
Restart=always

[Install]
WantedBy=multi-user.target
  • 设置Redis服务开机启动&开启服务
#设置Redis服务开机启动
sudo systemctl enable redis
#启动Redis服务
sudo systemctl start redis

Linux下通过受限bash创建指定权限的账号

在日常业务运维中,有时为了配合解决问题,需要给非运维人员开通系统账号,用于查询日志或代码。通常为了系统安全或避免不必要的误操作等目的,会将账号权限降至最低。下面介绍下在Linux下通过受限bash创建指定权限账号的操作记录:

[root@mq-server ~]# ln -s /bin/bash  /bin/rbash
[root@mq-server ~]# useradd -s /bin/rbash wangshibo
[root@mq-server ~]# passwd wangshibo
[root@mq-server ~]# mkdir /home/wangshibo/bin
[root@mq-server ~]# chown root. /home/wangshibo/.bash_profile
[root@mq-server ~]# chmod 755 /home/wangshibo/.bash_profile
[root@mq-server ~]# vim /home/wangshibo/.bash_profile       //复制下面的内容覆盖原内容
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$HOME/bin

export PATH<br data-filtered="filtered">
[root@mq-server ~]# ln -s /bin/cat /home/wangshibo/bin/cat
[root@mq-server ~]# ll /home/wangshibo/
total 4
drwxr-xr-x 2 root root 4096 Nov 25 23:38 bin
[root@mq-server ~]# ll /home/wangshibo/bin/
total 0
lrwxrwxrwx 1 root root 8 Nov 25 23:12 cat -> /bin/cat

如上设置后,可以发现创建的wangshibo用户家目录下的文件权限是root.root,上面只设置了wangshibo用户的cat权限,并且只能cat查看wangshibo用户家目录/home/wangshibo下的文件。除了cat命令外。不能执行其他命令!

[wangshibo@mq-server ~]$ cat /var/log/messages
cat: /var/log/messages: Permission denied
[wangshibo@mq-server ~]$ ls
-rbash: /home/wangshibo/bin/ls: No such file or directory
[wangshibo@mq-server ~]$ touch test
-rbash: /home/wangshibo/bin/touch: No such file or directory

如果要想在其家目录下有其他命令的执行权,那么需要添加这些命令的软链接到/home/wangshibo/bin目录下(可以通过which命令查看二进制命令的全路径)

[root@mq-server ~]# ln -s /bin/ls /home/wangshibo/bin
[root@mq-server ~]# ln -s /bin/touch /home/wangshibo/bin
[root@mq-server ~]# ln -s /bin/mkdir /home/wangshibo/bin
[root@mq-server ~]# ln -s /usr/bin/vim /home/wangshibo/bin/
[root@mq-server ~]# ll /home/wangshibo/bin/
total 0
lrwxrwxrwx 1 root root  8 Nov 25 23:12 cat -> /bin/cat
lrwxrwxrwx 1 root root  7 Nov 25 23:44 ls -> /bin/ls
lrwxrwxrwx 1 root root 10 Nov 25 23:45 mkdir -> /bin/mkdir
lrwxrwxrwx 1 root root 10 Nov 25 23:44 touch -> /bin/touch
lrwxrwxrwx 1 root root 12 Nov 25 23:45 vim -> /usr/bin/vim

这样,wangshibo用户就拥有了上面加入的命令的执行权

[root@mq-server ~]# su - wangshibo
[wangshibo@mq-server ~]$ ls
bin
[wangshibo@mq-server ~]$ touch test
[wangshibo@mq-server ~]$ mkdir ops
[wangshibo@mq-server ~]$ vim test
[wangshibo@mq-server ~]$ cat test
dsfdsafsadf
[wangshibo@mq-server ~]$ rm -f test
-rbash: rm: command not found
[wangshibo@mq-server ~]$ ls /usr/
bin  etc  games  include  lib  lib64  libexec  local  sbin  share  src  tmp
[wangshibo@mq-server ~]$ cat /var/log/messages
cat: /var/log/messages: Permission denied

详解shell中source、sh、bash、./执行脚本的区别

1、source命令用法

source FileName

  
作用:在当前bash环境下读取并执行FileName中的命令。该filename文件可以无”执行权限”

注:该命令通常用命令“.”来替代。

如:source .bash_profile

. .bash_profile两者等效。

source(或点)命令通常用于重新执行刚修改的初始化文档。

source命令(从 C Shell 而来)是bash shell的内置命令。

点命令,就是个点符号,(从Bourne Shell而来)。

2、sh和bash命令用法

sh FileName
bash FileName

作用:在当前bash环境下读取并执行FileName中的命令。该filename文件可以无”执行权限”

注:两者在执行文件时的不同,是分别用自己的shell来跑文件。

sh使用“-n”选项进行shell脚本的语法检查,使用“-x”选项实现shell脚本逐条语句的跟踪,

可以巧妙地利用shell的内置变量增强“-x”选项的输出信息等。

3、./的命令用法

./FileName

作用:打开一个子shell来读取并执行FileName中命令。

注:运行一个shell脚本时会启动另一个命令解释器.

每个shell脚本有效地运行在父shell(parent shell)的一个子进程里.

这个父shell是指在一个控制终端或在一个xterm窗口中给你命令指示符的进程.

shell脚本也可以启动他自已的子进程.

这些子shell(即子进程)使脚本并行地,有效率地地同时运行脚本内的多个子任务.

shell的嵌入命令:

  • : 空,永远返回为true
  • . 从当前shell中执行操作
  • break 退出for、while、until或case语句
  • cd 改变到当前目录
  • continue 执行循环的下一步
  • echo 反馈信息到标准输出
  • eval 读取参数,执行结果命令
  • exec 执行命令,但不在当前shell
  • exit 退出当前shell
  • export 导出变量,使当前shell可利用它
  • pwd 显示当前目录
  • read 从标准输入读取一行文本
  • readonly 使变量只读
  • return 退出函数并带有返回值
  • set 控制各种参数到标准输出的显示
  • shift 命令行参数向左偏移一个
  • test 评估条件表达式
  • times 显示shell运行过程的用户和系统时间
  • trap 当捕获信号时运行指定命令
  • ulimit 显示或设置shell资源
  • umask 显示或设置缺省文件创建模式
  • unset 从shell内存中删除变量或函数
  • wait 等待直到子进程运行完毕

下面再看下 shell 脚本各种执行方式(source ./.sh, . ./.sh, ./*.sh)的区别

结论一: ./.sh的执行方式等价于sh ./.sh或者bash ./*.sh,此三种执行脚本的方式都是重新启动一个子shell,在子shell中执行此脚本。

结论二: .source ./.sh和 . ./.sh的执行方式是等价的,即两种执行方式都是在当前shell进程中执行此脚本,而不是重新启动一个shell 而在子shell进程中执行此脚本。

验证依据:没有被export导出的变量(即非环境变量)是不能被子shell继承的

验证结果:

[root@localhost ~]#name=dangxu    //定义一般变量 
[root@localhost ~]# echo ${name} 
dangxu 
[root@localhost ~]# cat test.sh   //验证脚本,实例化标题中的./*.sh 
#!/bin/sh 
echo ${name} 
[root@localhost ~]# ls -l test.sh  //验证脚本可执行 
-rwxr-xr-x 1 root root 23 Feb 6 11:09 test.sh 
[root@localhost ~]# ./test.sh    //以下三个命令证明了结论一 
[root@localhost ~]# sh ./test.sh 
[root@localhost ~]# bash ./test.sh 
[root@localhost ~]# . ./test.sh   //以下两个命令证明了结论二 
dangxu 
[root@localhost ~]# source ./test.sh 
dangxu 
[root@localhost ~]# 

总结

以上所述是小编给大家介绍的shell中source、sh、bash、./执行脚本的区别,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对编程小技巧网站的支持!

zabbix 内置变量

文章参考:

zabbix邮件报警变量表:http://blog.csdn.net/apache0554/article/details/45843695
zabbix邮件报警设置方法:http://www.jb51.net/article/56973.htm
zabbix配置发送报警邮件:http://www.cnblogs.com/xkops/p/5457443.html

故障:{TRIGGER.STATUS},服务器:{HOSTNAME1}发生:{TRIGGER.NAME}故障!
告警主机:{HOSTNAME1},IP地址:{HOST.CONN}
告警时间:{EVENT.DATE}{EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
恢复:{TRIGGER.STATUS},服务器:{HOSTNAME1}已经恢复!:{TRIGGER.NAME}
告警主机:{HOSTNAME1} ,IP地址:{HOST.CONN}
告警时间:{EVENT.DATE}{EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

主机显示名:{HOST.NAME}

解决xtrabackup备份时出现的socket报错

今天为公司新建的uat数据库备份时,出现了报错,将解决方法整理、做一下备忘:

服务器系统:

[root@uat-mysql-master tmp]# cat /etc/redhat-release
 CentOS Linux release 7.3.1611 (Core) 
mysql版本号:
mysql> select version();
+----------------+
| version()      |
+----------------+
| 5.5.47-cll-lve |
+----------------+
1 row in set (0.00 sec)

报错如下:

[root@uat-mysql-master tmp]# innobackupex  --defaults-file=/etc/my.cnf --user=backup --password=****** --stream=tar /home/backup/ | gzip >/home/backup/`date +%F_%H-%M-%S`.tar.gz
171120 17:10:42 innobackupex: Starting the backup operation
IMPORTANT: Please check that the backup run completes successfully.
           At the end of a successful backup run innobackupex
           prints "completed OK!".
    171120 17:10:42  version_check Connecting to MySQL server with DSN 'dbi:mysql:;mysql_read_default_group=xtrabackup' as 'backup'  (using password: YES).
Failed to connect to MySQL server: DBI connect(';mysql_read_default_group=xtrabackup','backup',...) failed: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) at - line 1314.
171120 17:10:42 Connecting to MySQL server host: localhost, user: backup, password: set, port: not set, socket: not set
Failed to connect to MySQL server: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2).

解决办法:

在命令行中添加

--host=127.0.0.1

参数;

备注:网上有的说,通过

# find / -name "mysql.sock"

查到socket参数,然后在配置文件中修改,但测试后,不一定能解决问题。

xtrabackup恢复备份后,mysql无法启动,报Job failed to start

今天测试 mysql的备份与备份恢复,因为数据量比较大,所以选用的xtrabackup.之前打算用binlog2sql,后来看到不支持建表等其他操作,就选用xtrabackup.这里记录下使用过程中遇到的坑:

1. 要先停止数据库.

本来是直接运行:

innobackupex
--copy-back /extrabackup/2016-04-27_07-30-48/

结果报错,说是/var/lib/mysql(我设置的data文件夹,根据自己情况查看)不为空.好吧,先停止数据库服务,删除目录下的所有文件,在重新启动,结果启动不了.

2. mysql: Job failed to start.

查看出错日志(具体路径可看配置文件my.cnf),说是 mysql 目录下的ibdata1是只读权限.好吧,我干脆把整个mysql 给完全权限 : chmod a+x mysql,结果还是不行.
ll命令查看后,发现ibdata1的拥有者是当前用户,不是mysql用户,最后运行:

chown -R mysql:mysql /var/lib/mysql  (目录是data 的目录)

ok了.

wordpress如何更换域名、转移到本地?

wordpress是非常成功的开源博客系统,在使用过程中难免会碰到需要更换域名、将网站搬移到本地进行测试等情况的发生。那么,如何更换域名、如何转移到本地呢

未分类

wordpress是一个动态系统,更换转移其实很简单。基本思路其实就是将数据库的连接全部替换就行了。但是为了保险起见,下面提供包括备份的详细步骤

1、备份网站文件

如果是换域名,但是主机不变的话,这一步可以省略

2、备份数据库

这一步是为了以防万一。任何改动都备份一下比较好,以防止出错。

如果是更换了网站,或者转移到本地,这个时候则需要重新将网站安装好

3、替换数据库中的连接

选中该数据库之后,点击SQL,输入以下代码:

UPDATE wp_options SET option_value = replace(option_value, 'www.mydomain.com','www.newdomain.com') ;
UPDATE wp_posts SET post_content = replace(post_content, 'www.mydomain.com','www.newdomain.com') ;
UPDATE wp_comments SET comment_content = replace(comment_content, 'www.mydomain.com', 'www.newdomain.com') ;
UPDATE wp_comments SET comment_author_url = replace(comment_author_url, 'www.mydomain.com', 'www.newdomain.com') ;

以上代码中,www.mydomain.com 代表原来的域名,www.newdomain.com 代表新域名。

如果是搬运到本地,则新域名为 localhost。

如果有缓存插件,最后记得更新缓存。

【系统设置】CentOS 修改机器名

一、前言

本篇方法支持的系统版本?

  • CentOS 6
  • CentOS 7

二、具体操作

  • CentOS 6
    1、修改HostName
#修改/etc/sysconfig/network文件
vi /etc/sysconfig/network

#修改HOSTNAME
HOSTNAME=MyHost

#查看
hostname

2、修改Host文件(非必要操作)

#增加以下配置
127.0.0.1  MyHost
::1        MyHost

3、重启系统

#重启
reboot
  • CentOS 7
    1、修改HostName
#修改主机名
hostnamectl set-hostname MyHost

#查看主机名
hostname
hostnamectl --static
hostnamectl --transient
hostnamectl --pretty

2、修改Host文件(非必要操作)

#增加以下配置
127.0.0.1  MyHost
::1        MyHost

3、重启系统

#重启
reboot