zoukankan      html  css  js  c++  java
  • Linux 5 MySQL、redis相关

    一、mariadb

    mariadb就是mysql,只是mysql被oracle收购后即将闭源,所以产生了一个分支mariadb,仍然可以开源使用,完全兼容mysql。

    1、安装mariadb

    可以通过阿里云yum源下载,但是可能软件不全,版本可能也不新,所以可以去官网的yum源下载。

    1、首先在 RHEL/CentOS 和 Fedora 操作系统中添加 MariaDB 的 YUM 配置文件 MariaDB.repo 文件。
    
    #编辑创建mariadb.repo仓库文件
    vi /etc/yum.repos.d/MariaDB.repo
    2、添加repo仓库配置
    [mariadb]
    name = MariaDB
    baseurl = http://yum.mariadb.org/10.1/centos7-amd64
    gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
    gpgcheck=1
    yum install MariaDB-server MariaDB-client -y  # 官网在国外,网速很慢

    2、启动并初始化mariadb

    systemctl start mariadb  # 启动
    在确认 MariaDB 数据库软件程序安装完毕并成功启动后请不要立即使用。为了确保数据 库的安全性和正常运转,需要先对数据库程序进行初始化操作。这个初始化操作涉及下面 5 个 步骤。
    ➢ 设置 root 管理员在数据库中的密码值(注意,该密码并非 root 管理员在系统中的密 码,这里的密码值默认应该为空,可直接按回车键)。
    ➢ 设置 root 管理员在数据库中的专有密码。
    ➢ 随后删除匿名账户,并使用 root 管理员从远程登录数据库,以确保数据库上运行的业
    务的安全性。
    ➢ 删除默认的测试数据库,取消测试数据库的一系列访问权限。
    ➢ 刷新授权列表,让初始化的设定立即生效。

    确保mariadb服务器启动后,执行命令初始化

    mysql_secure_installation
    配置myariadb远程登录,可以通过windows,pycharm等客户端进行连接,在远端登录的话,就必须得输入redhat这个密码
    
    grant all privileges on *.* to root@'%' identified by '密码';
    
    授予 所有的 权限 在 所有的库.所有的表 用户名@"所有的地址" identified by "密码";
    
    刷新授权表,使得权限立即生效
    flush privileges;

    3、基本命令

    #修改mysql密码
    MariaDB [(none)]> set password = PASSWORD('redhat123');
    创建普通用户s14,但是没有什么权限
    create user s14@'%' identified by 's14666';
    grant 权限 on 数据库.表名 to 账户@主机名            对特定数据库中的特定表授权
    grant 权限 on 数据库.* to 账户@主机名              对特定数据库中的所有表给与授权
    grant 权限1,权限2,权限3 on *.* to 账户@主机名      对所有库中的所有表给与多个授权
    grant all privileges on *.* to 账户@主机名      对所有库和所有表授权所有权限
    revoke all privileges on *.* from yuchao@127.0.0.1;      移除权限
    #数据库中文设置
    查看数据库编码 s
    中文编码设置,编辑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

    数据库备份:

    mysqldump -uroot -p --all-databases > /tmp/db.dump   # 导出所有库
    mysqldump -uroot -p --databases db1 db2 >/tmp/user.sql   # 导出某些库
    
    mysql -uroot -p < /tmp/db.dump   # 恢复备份
    或者在mysql中:
    source /opt/db.dump

    4、Mysql主从复制

    主从复制就是一个主服务器负责读写,多台从服务器负责读取,这样实现多台服务器同时工作,并能同步更新数据,保证在某台服务器宕机时其他服务器正常运行。

    其实现原理是在主服务器中有一个binlog文件,记录了所有的数据更新记录,从服务器会实时读取这个文件,并同步更新自己的数据。

    环境准备:
    准备两台服务器,安装两个mariadb
    
    主库是:192.168.12.96    mater
    从库是:192.168.12.87    slave  
    主库的操作如下:
    1.开启binlog功能,修改/etc/my.cnf 
    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; 
    
    4.创建一个用户,用于进行主从同步
    create user 'kangchen'@'%' identified by 'kangchen666';
    
    5.授予账号权限,授予一个从库的身份权限
    grant replication slave on *.* to 'kangchen'@'%';
    
    6.锁定mysql的表,防止数据写入
    flush table with read lock;
    
    7.主从同步,将从库与主库的数据,保持一致后,它俩都在同一个起跑线,然后解除锁表,一同写入数据,保证数据一致性
        1.导出当前的数据,用于slave机器导入数据,保证在一个起始点
        mysqldump -u root -p --all-databases > /data/db.dump
        2.将此db.dump文件远程传输给 slave机器,用于导入
        scp /data/db.dump  root@192.168.12.87:/tmp/
        3.登录slave从库,导入主库的数据信息
        mysql >  source /tmp/db.dump 
        4.查看主库和从库的信息,是否一致
    
    
    8.查看主库的状态信息,binlog信息
    show master status; 
    
    9.解锁表,开始主从同步
    unlock tables;
    主库设置
    1.设置server-id值并关闭binlog功能参数
    数据库的server-id在主从复制体系内是唯一的,Slave的server-id要与主库和其他从库不同,并且注释掉Slave的binlog参数。
    2.因此修改Slave的/etc/my.cnf,写入
    [mysqld]
    server-id=3
    3.重启数据库
    systemctl restart mariadb
    4.检查Slava从数据库的各项参数
    show variables like 'log_bin';
    show variables like 'server_id';
    5.恢复主库Master的数据导入到Slave库
    导入数据(注意sql文件的路径)
    mysql>source /data/all.sql;
    方法二:
    #mysql -uroot -p  < abc.sql 
    6.配置复制的参数,Slave从库连接Master主库的配置
    mysql > change master to master_host='192.168.178.129',
    master_user='chaoge',
    master_password='redhat',
    master_log_file='mysql-bin.000001',
    master_log_pos=575;
    7.启动从库的同步开关,测试主从复制的情况
    start slave;
    8.查看复制状态
    show slave statusG;
    从库设置

    二、redis

    1、redis源码安装

    1.在线下载redis源码包
    wget http://download.redis.io/releases/redis-4.0.10.tar.gz
    2.解压缩redis源码包,如果源码包带有.gz结尾,需要通过gzip指令扩展,也就是-z的参数
    tar -zxvf redis-4.0.10.tar.gz  #解压缩这个文件,且显示解压缩过程
    3.切换目录到redis源码包
    cd redis-4.0.10
    4.由于redis没有configure脚本,直接就有了makefile,因此可以直接编译且安装
    make #编译
    make install #安装
    #此两条命令可以缩写为一条,  make && make install 
    5.编译安装完成后,redis默认会将redis命令添加到环境变量中/usr/local/bin底下
    6.启动redis服务端,将原来的redis.conf改名为redis.conf.bak并自定义一个redis.conf 
    vim redis.conf ,写入以下内容(不要加上注释)
        port 6379
        daemonize no  #后台运行redis
        pidfile /data/6379/redis.pid #将redis进程的id写入到redis.pid这个文件
        loglevel notice  #日志级别
        logfile "/data/6379/redis.log"
        dir /data/6379  #配置redis数据存放点
        protected-mode yes  #redis3.0之后的安全模式
        requirepass qiangdademima  #给redis添加密码
        
        redis的安全模式,可能会阻挡你远程连接,为了解决这个安全模式,给redis设置一个密码
    7.redis-server redis.conf
    redis-cli
    >> auth 密码

    redis可能会被人攻击,可以通过修改端口和设置密码的方式保护redis安全。

    2、redis多实例

    就是开启多个redis,方法就是复制一份redis,conf文件并改名,将其中的端口号更改,这样通过这个复制的配置文件启动的就是一个全新的独立的redis。

    3、redis发布订阅

    发布订阅就是多个redis之间发送和接受消息

    PSUBSCRIBE channelxx  # 订阅,监听数据
    PUBLISH channelxx messages  # 发布消息,订阅的都能接收到。

    4、redis持久化

    (1)RDB模式

    RDB可以手动执行持久化,也可以配置定期进行自动持久化,产生的文件是一个压缩过的二进制文件,人不可读。

    是在指定的时间间隔内生成时间快照,速度快、适合做备份、主从复制就是基于RDB持久化实现的。

    # 在redis.conf配置文件中加上:
    dbfilename  dbmp.rdb  # 数据保存在哪里,是配置的dir目录下
    save  900 1             #  自定义的保存时间,表示900秒内如果有1个操作就保存
    save 300 10            # 表示300秒内如果有10个操作就保存
    save 60  10000
    
    # 也可以在redis中通过save命令手动保存

    (2)AOF模式

    AOF模式是在log文件中记录所有的变更命令(set、del),重新启动时重新执行这些命令,日志文件时人可读的。

    特点:可以最大程度保证数据不丢失,但是日志文件大。

    # 配置文件中配置:
    appendonly yes  # 启动AOF持久化模式
    appendfsync always  # 每次修改都记录
    appendfsync everysec  # 每秒记录一次

    5、redis主从同步

    (1)手动进行主从设置

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

    当主redis宕机时,手动切换主库:

    #手动切换主从身份
    1.将主节点挂掉
    kill -9 主节点 6380
    
    2.将6382去掉slave的身份
    redis-cli -p 6382 slaveof no one 
    
    3.将6381设置新的主人,设置为6382
    redis-cli -p 6381 slaveof 127.0.0.1 6382 

    (2)通过配置文件决定主从身份

    # 在配置文件中,添加一条参数即可(主节点不做配置,从节点指明主人的ip端口信息即可)
    port 6380
    daemonize yes
    pidfile /data/6380/redis.pid
    loglevel notice
    logfile "/data/6380/redis.log"
    dbfilename dump.rdb
    dir /data/6380
    protected-mode no
    slaveof 127.0.0.1 6381

    6、redis-sentinel哨兵

    哨兵的作用就是,当主从同步架构中,主服务器宕机时,可以自动切换一个主服务器,保证整个项目不会崩,他通过发布订阅的方式,监听每个redis,如果没有收到消息,则会自动切换。

    首先配置三个redis.conf文件,并设置好主从身份。

    接着配置三个redis-sentinel-26380.conf文件,开启后自动监听,三个文件只是端口不同:

    // Sentinel节点的端口
    port 26379  
    dir /var/redis/data/
    logfile "26379.log"
    daemonize yes
    // 当前Sentinel节点监控 192.168.119.10:6379 这个主节点 // 2代表判断主节点失败至少需要2个Sentinel节点节点同意 // mymaster是主节点的别名 sentinel monitor mymaster 192.168.119.10 6379 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
    redis-sentinel /etc/redis-sentinel-26379.conf
    redis-sentinel /etc/redis-sentinel-26380.conf
    redis-sentinel /etc/redis-sentinel-26381.conf

    这样就配好了哨兵,当主库挂掉后,sentinel会自动找到一个合适的从库变成主库身份,后面这个挂掉的主库重新启动后也会变成从库。

  • 相关阅读:
    redis-client和redis-template存储的key的格式不一样
    dubbo+zookeeper基础
    java面试题1
    Spring线程池(异步、同步)
    Java并发多线程
    Java并发-并发工具类JUC
    Java并发面试题
    ActiveMQ
    一键部署springboot到Docker
    Quartz任务调度学习
  • 原文地址:https://www.cnblogs.com/yinwenjie/p/11355869.html
Copyright © 2011-2022 走看看