zoukankan      html  css  js  c++  java
  • Linux之数据库操作

      一、mysql基本操作

    1,连接数据库
    mysql -u root -p -h 127.0.0.1
    mysql -u root -p -h 192.168.12.56
    2,授予远程连接的权限
    grant all privileges on *.* to root@"%" identified by "nihao123"
    3,修改root用户的密码
    先进入mysql的交互式模式
    set password = PASSWORD('redhat123');
    4,创建mysql用户
    create user zijin@"%" identified by "zijin"
    5,给予zijin用户查询所有库和所有表的权限
    grant select on *.* to zijin@"%" identified by "zijin"
    6,查询mysql库中的用户信息
    use mysql;
    select host,user,password from  user;
    7,给予zijin用户创建所有库和表的权限,再给修改权限,再给删除权限
    grant create on *.* to zijin@"%" identified by "zijin"
    grant update on *.* to zijin@"%" identified by "zijin"
    grant delete on *.* to zijin@"%" identified by "zijin"
    8,授予mysql权限的语法
    mysql使用grant命令对账户进行授权,grant命令常见格式如下
    grant 权限 on 数据库.表名 to 账户@主机名            对特定数据库中的特定表授权
    grant 权限 on 数据库.* to 账户@主机名              对特定数据库中的所有表给与授权
    grant 权限1,权限2,权限3 on *.* to 账户@主机名      对所有库中的所有表给与多个授权
    grant all privileges on *.* to 账户@主机名      对所有库和所有表授权所有权限
    9,移出zijin的创建权限
    revoke create on *.* from zijin@"%" identified by 'zijin';
    revoke delete on *.* from zijin@"%" identified by 'zijin;
    10,数据库备份与恢复
    mysqldump -u root -p --all-databases > /tmp/db.sql      #这不是在数据库环境下
    可以备份单个数据库
    mysqldump -u root -p luffycity > /tmp/luffycity.sql
    11,导入数据
    第一种:
    进入mysql交互模式
    source /tmp/luffycity.sql;
    第二种:
    mysql -u root -p < /tmp/luffycity.sql
    第三种:
    navicat

     二,mariadb主从复制部署

      1, 准备两台机器

    192.168.12.56      #主服务器master(可读可写)
    mariadb数据库用户名:root
    密码:root1
    192.168.12.81      #从服务器slave(可读)
    mariadb数据库用户名:root
    密码:root2

      2, 配置主数据库

      2.1 修改主数据库配置文件

    1,进入配置文件
    vim /etc/my.cnf
    2,添加配置信息
    [mysqld]   # 如果配置文件里面有这一行,就只需要加以下两行配置就可以了
    server-id=1
    log-bin=qishi2-logbin

      2.2 进入数据库

    systemctl start mariadb

      2.3 创建主从复制用户

    1,进入数据库
    mysql -uroot -p
    2,创建用户
    create user zijin@'%' identified by 'zijin';

      2.4 给从库账号授权

    grant replication slave on *.* to 'zijin'@'%';

      2.5 把主库数据导入从库

    1,实现对主数据库锁表只读,防止数据写入,数据复制失败
    flush table with read lock;
    2,查看并记录主数据库的状态
    show master status;
    3,导出主数据库的数据为alldb.sql
    mysqldump -u root -p --all-databases > /opt/alldb.sql    #这个是在数据库环境外
    4,scp /opt/alldb.sql 192.168.12.81:/opt/

      3,配置从数据库

      3.1 修改从数据库的配置文件

    1,进入配置文件
    vim /etc/my.cnf
    2,添加信息
    [mysqld]
    server-id=5
    read-only=true

      3.2 启动数据库

    systemctl start mariadb

      3.3 导入主库的数据

    1,连接数据库
    mysql -u root -p 
    2,导入数据
    source /opt/alldb.sql

      3.4 配置复制的参数,slave从库连接master主库的配置(最重要的)

    在数据库的环境下输入:
    change master to master_host='192.168.12.64',
    master_user='zijin',
    master_password='zijin',
    master_log_file='qishi2-logbin.000004',
    master_log_pos=467;

      3.5 启动从库的同步开关

    start slave    #开启
    stop slave #停止

      3.6 查看从库的状态

    show slave status;
    还可以输show slave status /G;

      3,主库再设置

      3.1 从库数据导入完毕和开启主从同步后,解锁主库

    unlock tables;     #在主库下

      3.2验证主从复制情况

    在主库上创建数据,查看从库数据同步状态

      3.3 在主库上给zijin用户select权限,并刷新权限表

    grant select on *.* to zijin@"%" identified by "zijin";
    flush privileges;

      3.4 在从库上登录zijin用户,并试图创建一个库

    create database aaaa;
    
    ERROR 1290 (HY000): The MariaDB server is running with the --read-only option so 
    it cannot execute this statement #说明从库没有新建的权限

      三、redis发布订阅和持久化

      1,redis发布订阅

      1.1基本命令

    PUBLISH channel msg
        将信息 message 发送到指定的频道 channel
    
    SUBSCRIBE channel [channel ...]
        订阅频道,可以同时订阅多个频道
    
    UNSUBSCRIBE [channel ...]
        取消订阅指定的频道, 如果不指定频道,则会取消订阅所有频道
    PSUBSCRIBE pattern [pattern ...]
        订阅一个或多个符合给定模式的频道,每个模式以 * 作为匹配符,比如 it* 匹配所    有以 it 开头的频道
    ( it.news 、 it.blog 、 it.tweets 等等), news.* 匹配所有 以 news. 开头的频道
    ( news.it 、 news.global.today 等等),诸如此类 PUNSUBSCRIBE [pattern [pattern ...]] 退订指定的规则, 如果没有参数则会退订所有规则 PUBSUB subcommand [argument [argument ...]] 查看订阅与发布系统状态 注意:使用发布订阅模式实现的消息队列,当有客户端订阅channel后只能收到后续发布到该频道的消息,之前发送的不会缓存,
    必须Provider和Consumer同时在线。

      1.2发布订阅案例

    发布者
    [root@web02 ~]# redis-cli
    127.0.0.1:6379> PUBLISH diantai 'jinyewugenglaiwojia'
    (integer) 2
    
    订阅者1
    [root@web02 ~]# redis-cli
    127.0.0.1:6380> SUBSCRIBE diantai 
    Reading messages... (press Ctrl-C to quit)
    1) 'jinyewugenglaiwojia'
    2) (integer) 1
    
    订阅者2
    [root@web02 ~]# redis-cli
    127.0.0.1:6381> SUBSCRIBE diantai 
    Reading messages... (press Ctrl-C to quit)
    1) 'jinyewugenglaiwojia'
    2) (integer) 1

      1.3 订阅模糊匹配的频道案例

    发布者
    [root@web02 ~]# redis-cli
    127.0.0.1:6379> PUBLISH wangbaoqiang "jintian zhennanshou "
    (integer) 2
    
    订阅者1
    127.0.0.1:6380> PSUBSCRIBE wang*
    Reading messages... (press Ctrl-C to quit)
    1) "jintian zhennanshou "
    2) (integer) 1
    
    订阅者2
    127.0.0.1:6381> PSUBSCRIBE wa*
    Reading messages... (press Ctrl-C to quit)
    1) "jintian zhennanshou "
    2) (integer) 1

      2,redis持久化之RDB

      2.1 创建redis配置文件

    vim /opt/redis_conf/reids-6379.conf

      2.2 写入信息

    port 6379
    daemonize yes
    dir /data/6379
    pidfile /data/6379/redis.pid
    loglevel notice
    logfile "/data/6379/redis.log"
    protected-mode yes
    dbfilename  dbmp.rdb
    save 900 1
    save 300 10
    save 60 10000

      2.3 进入redis数据库,写入数据,并使用save命令开启rdb持久化

    redis-cli
    
    set name liujie
    set age 18
    set sex nam
    
    save   # 开启rdb持久化, 也可以不用

      3,redis之AOF持久化

      3.1 修改redis配置文件

    1,进入配置文件
    vim /opt/redis_conf/redis-6379.con
    2,写入配置信息
    appendonly yes
    appendfsync everysec

      3.2 重启redis服务

    pkill reids
    redis-server /opt/redis_conf/redis-6379.conf

      3.3 不用重启redis,直接从RDB切换到AOF(因为生产环境中是不允许停止redis)

    1,修改redis配置文件
    daemonize yes
    port 6379
    logfile /data/6379/redis.log
    dir /data/6379
    dbfilename  dbmp.rdb
    save 900 1                    #rdb机制 每900秒 有1个修改记录
    save 300 10                    #每300秒        10个修改记录
    save 60  10000                #每60秒内        10000修改记录
    
    2,启动redis服务端
    redis-server redis.conf
    
    3,写入数据
    127.0.0.1:6379> set name tiger
    OK
    127.0.0.1:6379> set age 18
    OK
    127.0.0.1:6379> set addr daxuecheng
    OK
    127.0.0.1:6379> save
    OK
    
    4,检查rdb文件是否存在,然后备份rdb文件(这是生成环境中需要做的,以免切换不成功导致数据丢失)
    
    5,开启AOF持久化
    CONFIG set appendonly yes   # 开启AOF功能
    CONFIG SET save ""          # 关闭RDB功能

      四、redis主从同步

      1,准备三个redis配置文件

    cd /opt/redis_conf
    
    redis-6380.conf   # 主数据库master
    redis-6381.conf   # 从库slave
    redis-6382.conf   # 从库slave

      2,在配置文件写入配置信息,是哪个内容一样,只是端口不一样而已

    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
    
    
    可以使用这一条命令通过redis-6380.conf生成6381和6382的配置文件
    sed "s/6380/6381/g" redis-6380.conf > redis-6381.conf
    sed "s/6380/6382/g" redis-6380.conf > redis-6382.conf

      3,在6381和6382文件中加入以下配置,使其成为从数据库

    slaveof 127.0.0.1 6380

      4,开启这三个redis服务,确保启动正常,并查看状态

    1,首先开启是三个redis服务
    redis-server /opt/redis_conf/redis-6380.conf
    redis-server /opt/redis_conf/redis-6381.conf
    redis-server /opt/redis_conf/redis-6382.conf
    2,用三个客户端连接
    redis-cli -p 6380 info replication redis-cli -p 6381 info replication redis-cli -p 6382 info replication

      5,验证redis主从复制功能

    1,6380写入数据,在6381和6382中查看数据是否同步
    2,看是否能在6381和6382中写入数据(正常情况下是不能的)

      6,手动切换主从复制

      也就是当6380进程死掉后,相当于主库没了,此时就需要从6381和6382中选择一个作为主库,完成主从复制切换

      6.1 把最开始的主库6380进程给杀死

    kill -9 进程id

      6.2 在6382的redis下执行这条命令(此时我们选择6382为主库)

    slaveof no one

      6.2 此时6381为从库,把原来的主库指向改为6382

    slaveof no one
    slaveof 127.0.0.1 6382

      6.3 可以验证此时的主从复制功能

    1,在6382上写入数据,在6381上查看数据(正常情况下是数据同步的)
    2,在6381上写数据(正常情况下为报错)

      7,哨兵sentinel

      对于第6步来说,必须要我们手动切换主从配置,其实是不科学的,所以,大佬开发了哨兵sentinel,用哨兵去监控主库,当主库挂掉的时候,哨兵从从库中决策出一个新的主库,剩余的从库就作为新的主库的从库。

      7.1准备三个哨兵配置文件

    touch  /opt/redis_conf/redis-26380.conf
    touch  /opt/redis_conf/redis-26381.conf
    touch  /opt/redis_conf/redis-26382.conf

      7.2修改redis-26380.conf配置文件

    port 26380
    dir /var/redis/data/
    logfile "26380.log"
    sentinel monitor qishi2master 127.0.0.1 6380 2
    sentinel down-after-milliseconds qishi2master 30000
    sentinel parallel-syncs qishi2master 1
    sentinel failover-timeout qishi2master 180000
    daemonize yes

      7.3再配置另外两个哨兵

    sed "s/26380/26381/g" redis-26380.conf > redis-26381.conf
    sed "s/26380/26382/g" redis-26380.conf > redis-26382.conf

      7.4启动是三个哨兵

    redis-sentinel /opt/redis_conf/redis-26380.conf
    redis-sentinel /opt/redis_conf/redis-26381.conf
    redis-sentinel /opt/redis_conf/redis-26382.conf

      7.5查看进程

    ps -ef | grep redis-sentinel

      7.6可以查看三个哨兵的状态

    redis-cli -p 26380 info sentinel
    redis-cli -p 26381 info sentinel
    redis-cli -p 26382 info sentinel

      7.7测试,把主库干掉

    1,查看主库进程id
    ps -ef | grep redis
    2,杀死主库进程
    kill -9 主库进程ID
    3,查看6381和6382的状态
    redis-cli -p 6381 info replication
    redis-cli -p 6381 info replication

       五、redis集群

      1,准备6个配置文件

    1,我们把集群的配置文件放在/opt/redis_conf/redis_cluster目录
    mkdir /opt/redis_conf/redis_cluster
    2,创建配置文件
    cd redis_cluster
    touch redis-6000.conf redis-6001.conf  redis-6002.conf  redis-6003.conf  redis-6004.conf  redis-6005.conf 

      2,往配置文件中添加配置信息

    1,进入redis-6000.conf
    vim redis-6000.conf
    2,写入如下配置信息
    port 6000
    daemonize yes
    dir "/opt/redis/data"
    logfile "/opt/redis/logs/6000.log"
    dbfilename "dump-6000.rdb"
    cluster-enabled yes   # 开启集群模式
    cluster-config-file nodes-6000.conf  # 集群内部的配置文件
    cluster-require-full-coverage no  # redis cluster需要16384个slot都正常的时候才能对外提供服务,
    换句话说,只要任何一个slot异常那么整个cluster不对外提供服务。 因此生产环境一般为no
    3,配置其他5个配置文件 sed "s/6000/6001/g" redis-6000.conf > redis-6001.conf sed "s/6000/6002/g" redis-6000.conf > redis-6002.conf sed "s/6000/6003/g" redis-6000.conf > redis-6003.conf sed "s/6000/6004/g" redis-6000.conf > redis-6004.conf sed "s/6000/6005/g" redis-6000.conf > redis-6005.conf

      3,启动这6个redis集群节点

    redis-server redis-6000.conf
    redis-server redis-6001.conf
    redis-server redis-6002.conf
    redis-server redis-6003.conf
    redis-server redis-6004.conf
    redis-server redis-6005.conf

    2,查看进程
    ps -ef | grep redis
    现在是无法往节点上添加数据的,因为哈希槽还没分配

      我们需要使用redis-trib.rb去分配集群的哈希槽,但这个脚本需要使用ruby环境去执行,所以我们需要安装ruby解释器

      4,安装ruby解释器

    1 下载ruby
    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
    cd ruby-2.3.1/
    ./configure --prefix=/opt/ruby/
    make && make install
    
    3 配置ruby的环境变量
    vim /etc/profile
    写入如下配置
    PATH=$PATH:/opt/ruby/bin
    4,读取
    source /etc/profile

      5,安装ruby gem包管理工具

    1 下载gem包管理工具
    wget http://rubygems.org/downloads/redis-3.3.0.gem
    
    2 安装
    gem install -l redis-3.3.0.gem

      6,开启集群

    /opt/redis-4.0.10/src/redis-trib.rb create --replicas 1 127.0.0.1:6000 127.0.0.1:6001 127.0.0.1:6002 
    127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 命令说明: --replicas # 表示进行身份授权 1 # 表示每个主节点,只有一个从节点 # 集群会自动分配主从关系 60006001、6002为主服务器master 60036004、6005为从服务器slave

      7,可以查看集群状态与槽位

    redis-cli -p 6000 cluster info
    redis-cli -p 6001 cluster info
    redis-cli -p 6002 cluster info
    redis-cli -p 6003 cluster info
    redis-cli -p 6004 cluster info
    redis-cli -p 6005 cluster info

      8,使用命令连接redis集群

    redis-cli -p 6000 -c
      -c 参数表示连接集群
  • 相关阅读:
    iframe引入网页
    input同名
    混合框架
    <header><footer>引用
    <dl>
    凸包性质——cf1044C
    几何求叉积+最短路——cf1032D
    fresco 设置资源路径时的一个坑
    马拉车+贪心——cf1326D
    【模板变形】凸壳二分+斜率优化dp——cf1083E
  • 原文地址:https://www.cnblogs.com/12345huangchun/p/10738570.html
Copyright © 2011-2022 走看看