• 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会自动找到一个合适的从库变成主库身份,后面这个挂掉的主库重新启动后也会变成从库。

  • 相关阅读:
    python note 30 断点续传
    python note 29 线程创建
    python note 28 socketserver
    python note 27 粘包
    python note 26 socket
    python note 25 约束
    Sed 用法
    python note 24 反射
    python note 23 组合
    python note 22 面向对象成员
  • 原文地址:https://www.cnblogs.com/yinwenjie/p/11355869.html
Copyright © 2020-2023  润新知