专栏首页Python 学习day107&day109部分&day111部分-Linux安装MariaDB&Redis
原创

day107&day109部分&day111部分-Linux安装MariaDB&Redis

1.MariaDB

1.1简介

# mariadb其实就是mysql
# mysql已经被oracle收购,它即将闭源,马上要开始收费了
# 因此还想免费试用开源的数据库mysql,就在centos7上,将mysql分支为mariadb

1.2安装

yum install mariadb-server

1.3初始化 MariaDB

mysql_secure_installation 
# 直接输入 y、n 一步一步走,设置root密码,删除匿名用户等等操作

1.4配置可远程登录MariaDB

# 主机 mysql 下执行改 sql,root用户远程只可以使用 123 作登录密码
grant all privileges on *.* to root@'%' identified by '123';

1.4.1权限

# 刷新授权表,使得权限立即生效
flush privileges;

1.4.2连接

# 远程 cmd 下执行 mysql -u root -p -h 192.168.1.xxx
# 前提远程主机已经安装了 mysql 服务
# 输入密码后即可

1.5更改 root 密码

set password = PASSWORD('xxx');

1.6创建新用户zhangsan,密码123

create user zhangsan@'%' identified by '123';

1.7数据库中文设置

# 修改mysql的配置文件 /etc/my.cnf ,复制以下信息
#
    [mysqld]
    character-set-server=utf8
    collation-server=utf8_general_ci
    log-error=/var/log/mysqld.log
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8

# 修改了配置文件,重启服务
	systemctl restart mariadb 

1.8数据备份

1.8.1备份数据库

# 在Linux下输入命令
# 将数据库数据备份到 /data/db/dump 文件里面
mysqldump -u root -p --all-databases > /data/db.dump

1.8.2恢复数据库文件

# 可以删除一些不重要的库或者表做实验
# 在Linux下输入命令
mysql -uroot -p <  /opt/db.dump

# 或者在 MariaDB 命令行下执行
source /opt/db.dump

1.9数据从库备份主库数据

# 两台服务器
# 每一台服务器都有 MariaDB

1.9.1主库的操作如下

1.vim /etc/my.cnf 
# 写入如下,去掉注释
    [mysqld]
    server-id=1            # 指明主库的身份id为1
    log-bin=mysqls14-bin   # 指明binlog的日志名
2.修改了配置文件,重启mariadb,使得binlog生效
    systemctl restart mariadb  
3.登录mysql,检查主库的状态
    show master status;
    MariaDB [(none)]> show master status;
    +---------------------+----------+--------------+------------------+
    | File                | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +---------------------+----------+--------------+------------------+
    | mysqls14-bin.000001 |      245 |              |                  |
    +---------------------+----------+--------------+------------------+
    注意这个 file 的名字和 POoition 的值
4.创建一个用户,用于进行主从同步
    create user 'leon'@'%' identified by 'leon123';
5.授予账号权限,授予一个从库的身份权限
    grant replication slave on *.* to 'leon'@'%';
6.锁定mysql的表,防止数据写入
# 为什么要锁住:因为先锁住防止数据进入,从库就可以完全复制主库数据。
# 不能从库一边复制,主库同时又在写入
    flush table with read lock;

# 注意,此时进入 从库 的设置!

1.9.2从库的设置

1.vim /etc/my.cnf,去掉注释
    server-id=10    # 只要和主机的 server-id 不一样就可以 
2.重启myariadb
    systemctl restart mariadb
3.查看slave机器的身份信息
    show variables like 'server_id';     # vim /etc/my.cnf 里面的 server_id
    show variables like 'log_bin';       # 要为 OFF 状态,主库是 ON 状态
4.通过命令,开启主从同步技术,直接复制到从库的 MariaDB下执行即可
    change master to master_host='192.168.12.xx',   # 主库的ip
    master_user='leon',                             # 被赋权的用户
    master_password='leon123',                      # 被赋权的用户的密码
    master_log_file='mysqls14-bin.000001',          # 主库 show master status; 查看得到的 file 名
    master_log_pos=245;                             # 主库 show master status; 查看得到的 Position 值
5.刷新数据
    flush privileges;
6.开启slave,Mariadb下执行
    start slave;
7.检查slave状态,检查两条参数,如果都是yes,即主从ok
# Mariadb下执行:show slave status
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

# 注意,此时再次进入 主库 的设置!

7.主从同步,将从库与主库的数据,保持一致后,它俩都在同一个起跑线,然后解除锁表,一同写入数据,保证数据一致性
	1.导出当前的数据,用于slave机器导入数据,保证在一个起始点
	    mysqldump -u root -p --all-databases > /data/db.dump
	
	2.将此db.dump文件远程传输给从机服务器,用于导入
	    scp /data/db.dump  root@192.168.12.xx:/tmp/
	
	3.登录slave从库,导入主库的数据信息
	    source /tmp/db.dump 
	
	4.此时可以查看主库和从库的信息,是否一致
8.查看主库的状态信息,binlog信息
    show master status; 
9.解锁表,开始主从同步
    unlock tables;
10.此时可以在主库中写入数据,查看从库中是否生成了记录

2.redis

2.1redis 安装

2.1.1redis 下载

wget http://download.redis.io/releases/redis-4.0.10.tar.gz  
# 可指定版本

2.1.1解压安装

1.tar -zxvf redis-4.0.10.tar.gz  # 解压缩
2.cd redis-4.0.10                # 切换目录
3.make && make install           # 在目录下执行编译和安装

# 编译安装完成后,redis默认会将redis命令添加到环境变量中/usr/local/bin底下

2.2启动 redis

2.2.1配置 redis.conf

# 可直接清除原先的 conf 文件
vim redis.conf ,写入以下内容(不要加上注释)
	port 6379                        # 指定端口
	bind 0.0.0.0                     # 绑定本地 ip
	daemonize yes                    # 后台运行redis
	pidfile /data/6379/redis.pid     # 将redis进程的id写入到redis.pid这个文件
	loglevel notice                  # 日志级别
	dir /data/6379                   # 配置redis数据存放点  touch/data/6379
	logfile "/data/6379/redis.log"   # 指定日志文件         touch/data/6379/redis.log
	protected-mode yes               # redis3.0之后的安全模式
	requirepass leon123              # 给redis添加密码,登录Redis使用 auth+密码

2.2.2启动 redis 服务

redis-server redis.onf

2.3redis 的多实例功能

# 只要配饰多个 conf 文件即可
# 本质上只是端口不同
# 现在重新配置一个 redis-6366.conf 的配置文件,(文件名自定义)
vim redis-6366.conf ,写入以下内容(不要加上注释)
	port 6366                        # 指定端口
	bind 0.0.0.0                     # 绑定本地 ip
	daemonize yes                    # 后台运行redis
	pidfile /data/6379/redis.pid     # 将redis进程的id写入到redis.pid这个文件
	loglevel notice                  # 日志级别
	dir /data/6366                   # 配置redis数据存放点  touch/data/6366
	logfile "/data/6379/redis.log"   # 指定日志文件         touch/data/6366/redis.log
	protected-mode yes               # redis3.0之后的安全模式
	requirepass leon123              # 给redis添加密码,登录Redis使用 auth+密码

2.3.1启动多 redis 个服务

redis-server redis.onf
redis-server redis-6366.onf
# 即是指定不同的 conf 配置文件实现多个 redis 的启动

2.3.2多个终端登录 redis

# 终端1
redis-cli -p 6376
# 终端2
redis-cli -p 6399

# 通过指定不同的端口来登录不同的 redis 服务
# 多个服务之间彼此不干涉

# 进入 redis 完成之后输入
  auth + 密码   密码就是 conf 文件的 requirepass 的值
  完成登录

2.4redis 的消息发布与监听

# 现有 若干个终端 连接同一个 redis 服务

2.4.1订阅单个频道

# 终端X(订阅者)
    SUBSCRIBE  CCAV    # 代表监听该  CCAV 这个频道的信息
# 终端y(订阅者)
    SUBSCRIBE  CCAV    # 代表也监听该  CCAV 这个频道的信息
# 终端y(发布者)
    PUBLISH   CCAV  'Hello!'  
    # y 在 CCAV 这个频道里发布了一个 'Hello' 信息,此时 x 和 y 均可以收到 'Hello' 
    # 每个终端都可以在这个频道发消息,监听这个频道的人都能收到

2.4.2正则订阅多个频道

# 终端X(订阅者)
    PSUBSCRIBE  CC*              # 代表订阅该  CC* (CC开头的频道)
# 终端y(发布者)
    PUBLISH   CCTV  'Hello!'    # 在 CCTV 频道里面发布一个 'Hello'
# 终端y(发布者)
    PUBLISH   CCAV  '666'        # 在 CCAV 频道里面发布一个 '666'
  
# 此时 x 即可收到 CCTV 的 'Hello' 和 CCAV 的 '666'    

2.5redis持久化之rdb与aof,保存 redis 数据到文件

2.5.1rdb模式

# 启动redis服务端,此时可以设置redis的key,通过save命令触发rdb持久化
1.在配置文件中写入参数,支持rdb模式
vim redis.conf 
	port 6366                        # 指定端口
	bind 0.0.0.0                     # 绑定本地 ip
	daemonize yes                    # 后台运行redis
	pidfile /data/6366/redis.pid     # 将redis进程的id写入到redis.pid这个文件
	loglevel notice                  # 日志级别
	dir /data/6366                   # 配置redis数据存放点  touch/data/6366
	logfile "/data/6379/redis.log"   # 指定日志文件         touch/data/6366/redis.log
	protected-mode yes               # redis3.0之后的安全模式
	requirepass leon123              # 给redis添加密码,登录Redis使用 auth+密码
	
    dbfilename  dbmp.rdb             # 文件目录  /data/6379 
    save  900 1                      # 每 900 秒 1     次修改就保存,自定制
    save  300 10                     # 每 300 秒 10    次修改就保存,自定制
    save  60  10000                  # 每 60  秒 10000 次修改就保存,自定制

2.5.2aof模式

vim redis.conf 
	port 6366                        # 指定端口
	bind 0.0.0.0                     # 绑定本地 ip
	daemonize yes                    # 后台运行redis
	pidfile /data/6379/redis.pid     # 将redis进程的id写入到redis.pid这个文件
	loglevel notice                  # 日志级别
	dir /data/6366                   # 配置redis数据存放点  touch/data/6366
	logfile "/data/6379/redis.log"   # 指定日志文件         touch/data/6366/redis.log
	protected-mode yes               # redis3.0之后的安全模式
	requirepass leon123              # 给redis添加密码,登录Redis使用 auth+密码
	
    dbfilename  dbmp.rdb             # 文件目录  /data/6379 
    save  900 1                      # 每 900 秒 1     次修改就保存,自定制
    save  300 10                     # 每 300 秒 10    次修改就保存,自定制
    save  60  10000                  # 每 60  秒 10000 次修改就保存,自定制

	appendonly yes
    appendfsync everysec             # 文件目录  /data/6379 
2.启动redis-server服务端,默认就会生成appendonly.aof持久化文件
  此时进入redis-cli的操作,都会被记录,且追加到appendonly.aof文件中,以达到持久化的操作
3.redis 持久化方式有哪些?有什么区别?

  rdb:基于快照的持久化,速度更快,一般用作备份,主从复制也是依赖于rdb持久化功能

  aof:以追加的方式记录redis操作日志的文件。可以最大程度的保证redis数据安全,类似于mysql的binlog

2.6RDB数据切换AOF数据的操作

1.准备redis.conf配置文件,确保开启rdb功能,配置参数如下
    port 6379
	daemonize yes
	pidfile /data/redis.pid 
	loglevel notice 
	logfile "/data/redis.log"
	dir /data/  # 规定问价存放目录
	dbfilename  dbmp.rdb  # 规定文件名字
	save  900 1
	save  300 10
	save  60  10000
2.启动redis服务端
	redis-server redis.conf 
3.插入redis数据,通过save命令,强制写入持久化rdb文件(此时还是使用rdb持久化)
    set name leon 
    set age 11
    set hobby girl
    save 
4.通过命令,切换到aof持久化,(注意此步只是临时生效,必须将AOF的配置,写入redis.conf)
    127.0.0.1:6379> CONFIG set appendonly yes   #开启AOF功能
    OK
    127.0.0.1:6379> CONFIG SET save ""  #关闭RDB功能
    OK
5.修改配置文件,添加aof参数,(此步重启后,rdb持久化完全切换aof持久化,且数据保持一致)
	port 6379
	daemonize yes
	pidfile /data/redis.pid 
	loglevel notice 
	logfile "/data/redis.log"
	dir /data/
	appendonly yes
	appendfsync  everysec 
6.重启redis服务

2.7redis主从复制(从机同步备份主机 redis 数据)与主从身份切换(主机从机功能对调)

2.7.1主从复制

1.环境准备3个redis实例,<6381为主,6382,6383为从>
	redis-6381.conf
	redis-6382.conf
	redis-6383.conf
2.三个配置文件的区别,仅仅是端口的不同修改即可
	port 6381/6382/6383...
	daemonize yes
	pidfile /data/6381/redis.pid
	loglevel notice
	logfile "/data/6380/redis.log"
	dbfilename dump.rdb
	dir /data/6381
	protected-mode no
2.启动三个redis实例
	redis-server 6381.conf 
	redis-server 6382.conf 
	redis-server 6383.conf
3.此时可以查看redis身份信息,通过info参数。此时还未配置主从,因此都是master身份
	redis-cli -p 6381 info Replication
	redis-cli -p 6382 info Replication
	redis-cli -p 6383 info Replication
4.配置从节点的身份<6381为主,6382,6383为从>,通过命令指明master节点信息即可

# 设置 6382 为从 6381 的从机	
	127.0.0.1:6382> SLAVEOF 127.0.0.1 6381 

# 设置 6383 为从 6381 的从机
	127.0.0.1:6383> SLAVEOF 127.0.0.1 6381  
5.查看各个各个节点的身份信息
    redis-cli -p 6381 info Replication    主节点  (role:master)
	redis-cli -p 6382 info Replication	  从节点  (role:slave)
	redis-cli -p 6383 info Replication    从节点  (role:slave)

2.7.2主从身份切换

1.将主机的 redis 服务挂掉
	ps -ef | grep redis 
	kill -9 主节点 6381
2.将6382去掉slave从机的身份
	redis-cli -p 6382 slaveof no one
3.将6382设置新的主人,此时从机是6383
	redis-cli -p 6383 slaveof 127.0.0.1 6382 
# 通过配置 6383.conf 文件,给 6383 换主人
4.在配置文件中,添加一条参数即可(主节点不做配置,从节点指明主人的ip端口信息即可)
    port 6383
    daemonize yes
    pidfile /data/6383/redis.pid
    loglevel notice
    logfile "/data/6380/redis.log"
    dbfilename dump.rdb
    dir /data/6383
    protected-mode no
    slaveof 127.0.0.1 6382
5.此时状态
    6381.conf     服务已被手动挂掉(可以启动服务,指定主机,配置与 6383.conf 一样)
    6382.conf     现在为主机
    6383.conf     是 6382 的从机

2.8redis哨兵

2.8.1准备三个 redis 配置文件

# vim
    redis-6381.conf 
    redis-6382.conf
    redis-6383.conf
# 仅仅端口不同
    port 6381
    bind 0.0.0.0
    daemonize yes
    pidfile /data/6381/redis.pid
    loglevel notice
    logfile "/data/6381/redis.log"
    dir /data/6381  
    
    # 其中6383、6383配置文件,端口确保不同,且配置上主从参数
	slaveof 127.0.0.1 6379        

2.8.2启动三个 redis 实例

[root@localhost /opt/redis-4.0.10]#redis-server redis-6381.conf 
[root@localhost /opt/redis-4.0.10]#redis-server redis-6382.conf 
[root@localhost /opt/redis-4.0.10]#redis-server redis-6383.conf 

2.8.3检查身份信息

redis-cli -p 6381 info replication  (master)
redis-cli -p 6382 info replication  (slave)
redis-cli -p 6383 info replication  (slave)

2.8.4准备三个 redis 哨兵配置文件

# vim     
    redis-sentinel-26381.conf
    redis-sentinel-26382.conf
    redis-sentinel-26383.conf      
# 哨兵配置文件,一致,仅有端口区别

	#  Sentinel节点的端口
	port 26381 
	dir /data/26381
	logfile "26381.log"
	daemonize  yes

	#  当前Sentinel节点监控 127.0.0.1:6381 这个主节点
	# 2代表判断主节点失败至少需要2个Sentinel节点节点同意
	# mymaster是主节点的别名
	sentinel monitor mymaster 127.0.0.1 6381 2

	# 每个Sentinel节点都要定期PING命令来判断Redis数据节点和其余Sentinel节点是否可达
	# 如果超过30000毫秒30s且没有回复,则判定不可达
	sentinel down-after-milliseconds mymaster 30000

	# 当Sentinel节点集合对主节点故障判定达成一致时,Sentinel领导者节点会做故障转移操作,选出新的主节点
	# 原来的从节点会向新的主节点发起复制操作,限制每次向新的主节点发起复制操作的从节点个数为1
	sentinel parallel-syncs mymaster 1

	# 故障转移超时时间为180000毫秒
	sentinel failover-timeout mymaster 180000

2.8.5启动三个 redis 哨兵

redis-sentinel redis-sentinel-26381.conf 
redis-sentinel redis-sentinel-26382.conf 
redis-sentinel redis-sentinel-26383.conf
ps -ef | grep redis
    # 三个 redis 实例
    root       2295      1  0 15:02 ?        00:00:00 redis-server 0.0.0.0:6381
    root       2300      1  0 15:02 ?        00:00:00 redis-server 0.0.0.0:6382
    root       2305      1  0 15:02 ?        00:00:00 redis-server 0.0.0.0:6383
    # 三个 redis 哨兵
    root       2314      1  3 15:02 ?        00:00:00 redis-sentinel *:26381 [sentinel]
    root       2319      1  0 15:02 ?        00:00:00 redis-sentinel *:26382 [sentinel]
    root       2324      1  2 15:02 ?        00:00:00 redis-sentinel *:26383 [sentinel]

2.8.6概况

# 如果我们此时结束掉 6381
# 那么 6382 或者 6383 中的一个将自动变成 master
# 如果 6383 变成 master,6382 自动 salveof 6383,conf文件也被自动修改
# 如果再次启动 6381,6381 也将自动 slaveod 6383,conf文件也被自动修改

2.9redis-cluste(redis集群)

2.9.1准备六个配置文件

# 每个配置文件仅仅端口不一样
    -rw-r--r--.  1 root root    135 Apr 14 15:50 redis-7001.conf
    -rw-r--r--.  1 root root    135 Apr 14 15:54 redis-7002.conf
    -rw-r--r--.  1 root root    135 Apr 14 15:54 redis-7003.conf
    -rw-r--r--.  1 root root    135 Apr 14 15:55 redis-7004.conf
    -rw-r--r--.  1 root root    135 Apr 14 15:55 redis-7005.conf
    -rw-r--r--.  1 root root    135 Apr 14 15:55 redis-7006.conf

2.9.2配置文件内容如下

# 每个配置文件仅仅端口不一样
	port 7001
	bind 0.0.0.0
	daemonize yes
	pidfile /data/7001/redis.pid
	loglevel notice
	logfile "/data/7001/redis.log"
	dir /data/7001
	cluster-enabled yes
	cluster-config-file nodes-7000.conf
	cluster-require-full-coverage no

2.9.3启动六个redis实例

# redis-server redis-700x.conf
	root       2776      1  0 16:09 ?        00:00:00 redis-server 0.0.0.0:7001 [cluster]
	root       2781      1  0 16:09 ?        00:00:00 redis-server 0.0.0.0:7002 [cluster]
	root       2786      1  0 16:09 ?        00:00:00 redis-server 0.0.0.0:7003 [cluster]
	root       2791      1  0 16:10 ?        00:00:00 redis-server 0.0.0.0:7004 [cluster]
	root       2802      1  0 16:10 ?        00:00:00 redis-server 0.0.0.0:7005 [cluster]
	root       2807      1  0 16:10 ?        00:00:00 redis-server 0.0.0.0:7006 [cluster]

2.9.4安装配置ruby环境,用于一键搭建redis集群

1.下载源码
	wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
2.解压缩ruby
	tar -xvf ruby-2.3.1.tar.gz
3.编译安装ruby
    ./configure --prefix=/opt/ruby/
    make && make install
4.准备ruby的环境变量
    cp ./bin/ruby   /usr/local/bin
    cp ./bin/gem    /usr/local/bin
5.下载ruby的软件包管理工具
    wget http://rubygems.org/downloads/redis-3.3.0.gem
6.安装ruby操作redis的模块
    gem install -l redis-3.3.0.gem  # 安装ruby操作redis的模块
7.查看ruby语言的包邮哪些
    gem list -- check redis gem
8.配置环境变量redis-trib.rb,用于创建redis-cluster 
    find /opt  -name redis-trib.rb
9.配置环境变量,用于快速执行redis-trib.rb这个命令 
    cp /opt/redis-4.0.10/src/redis-trib.rb    /usr/local/bin
10.启动六个redis实例之后,通过redis-trib.rb命令,一键创建redis-cluster集群功能
    # 其实就是分配槽位,分配主从关系
    # 通过这个命令,创建集群功能
    # 1 代表每个主只有一个从
    # 自动给后面6个节点,分配主从关系,7001、7002、7003是主节点,7004、7005、7006是从节点
    redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006
11.完成之后可以查看主从身份信息
    edis-cli -p 7001 info replication     (master)  
    edis-cli -p 7002 info replication     (master)
    edis-cli -p 7003 info replication     (master)
    edis-cli -p 7004 info replication     (slave)
    edis-cli -p 7005 info replication     (slave)
    edis-cli -p 7006 info replication     (slave)
12.redis-cli -p 7001 -c 登录到指定 redis 
    # -c 代表集群方式登录 redis,必须加,不加报错
    # 设置 key 
    # 自动根据哈希规则将 key 对应的值分发到不同的 redis实例 里面
13.在任意节点都可以通过 get 取到 set 的值,即使 key 在不同的 redis实例 里面

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 前端-part3

    少年包青菜
  • SALalchemy增删改查

    少年包青菜
  • 前端-part9-jQuery操作样式二

    少年包青菜
  • CentOS 6上的redis搭建实战记录

    redis 是一个基于内存的高性能key-value数据库,数据都保存在内存中定期刷新到磁盘,以极高的读写效率而备受关注。他的特点是支持各种数据结构,stirn...

    张善友
  • redis安装配置

    Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。

    老雷PHP全栈开发
  • window环境下安装Redis及可视化工具Redis Desktop Manager

    地址:https://github.com/MSOpenTech/redis/releases

    w候人兮猗
  • CentOS7 linux下yum安装redis以及使用

    w候人兮猗
  • django自带cache结合redis创建永久缓存

    https://www.runoob.com/redis/redis-install.html

    小小咸鱼YwY
  • redis数据库的使用

    redis载地址:https://github.com/MSOpenTech/redis/releases。

    小小咸鱼YwY
  • Redis系列---安装redis单机版02

      redis3.+版本(自行下载,redis 的版本:副版本号奇数版本号是测试版,不建议在生产环境中使用。偶数版本时稳定版建议在生产环境中使用。3.0 版本更...

    Arebirth

扫码关注云+社区

领取腾讯云代金券