zoukankan      html  css  js  c++  java
  • linux下主从同步和redis的用法

    前言

    mariadb其实就是mysql

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

    操作步骤前

    安装mariadb,在centos7底下:
    linux软件包的格式 mysql.rpm

    1.通过yum去安装

    1.linux的yum软件管理目录在 /etc/yum.repos.d
    2.在这个目录底下,主要是*.repo这个文件,就会被识别为yum源文件

    第一种方式是,通过阿里云的yum源去下载(第三方的yum源,可能会版本较低,且软件不全,可能找不到)
    CentOS-Base.repo epel.repo

    yum install mariadb-server #yum安装mariadb 因为这个阿里云特别快,咱们用他去学习,加速下载 300kb/s

    mariadb-server x86_64 1:5.5.60-1.el7_5 base 11 M
    为依赖而安装:
    mariadb x86_64 1:5.5.60-1.el7_5 base 8.9 M
    perl-DBD-MySQL x86_64 4.023-6.el7 base 140 k
    为依赖而更新:
    mariadb-libs x86_64 1:5.5.60-1.el7_5 base 758 k


    第二种方式是,通过mariadb官方的yum源去下载(一定是这个软件最正确的yum源,且包都是最新的)
    1.下载一个第三方的软件,顺序就是去官网找到这个软件的下载方式


    yum install MariaDB-server MariaDB-client #区分大小写 ,这个方式是取国外下载mariadb,速度太慢 30kb/s

    依赖关系解决

    =====================================================================================================================================
    Package 架构 版本 源 大小
    =====================================================================================================================================
    正在安装:
    MariaDB-client x86_64 10.1.37-1.el7.centos mariadb 40 M
    MariaDB-server x86_64 10.1.37-1.el7.centos mariadb 104 M
    MariaDB-shared x86_64 10.1.37-1.el7.centos mariadb 1.3 M
    替换 mariadb-libs.x86_64 1:5.5.56-2.el7
    为依赖而安装:
    MariaDB-common x86_64 10.1.37-1.el7.centos mariadb 123 k
    boost-program-options x86_64 1.53.0-27.el7 base 156 k
    galera x86_64 25.3.24-1.rhel7.el7.centos mariadb 8.1 M

    正式的操作(注意执行的代码在哪个目录下

    1.下载mariadb,通过阿里云的源

    yum install mariadb-server

    2.mariadb启动停止重启查看状态

    systemctl start/stop/restart/status mariadb
    systemctl start mariadb #启动mariadb数据库

    3.初始化mariadb

    mysql_secure_installation #直接输入这个命令,设置root密码,删除匿名用户等等操作,当时问是否禁止远程连接时选择no

    4.配置myariadb远程登录,

    可以通过windows,pycharm等客户端进行连接,在远端登录的话,就必须得输入redhat这个密码

    grant all privileges on *.* to root@'%' identified by 'redhat';  进行授权

    授予 所有的 权限 在 所有的库.所有的表 用户名@"所有的地址" identified by "密码";

    5.刷新授权表,(必须执行)

    使得权限立即生效
    flush privileges;

    6.更改mysql的密码

    set password = PASSWORD('redhat123');

    7.创建普通用户s14

    create user s14@'%' identified by 's14666';  创建普通用户,主从同步时用到

    8.查询用户信息

    select host,user,password from user;

    9.授权语句

    grant 权限 on 数据库.表名 to 账户@主机名 对特定数据库中的特定表授权
    grant 权限 on 数据库.* to 账户@主机名   对特定数据库中的所有表给与授权
    grant 权限1,权限2,权限3 on *.* to 账户@主机名    对所有库中的所有表给与多个授权
    grant all privileges on *.* to 账户@主机名    对所有库和所有表授权所有权限
    grant create,select,insert on *.* to root@'%' identified by "密码"

    10.数据库的中文设置

    1.查看数据库编码
    s    查看数据库的编码格式

    2.修改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
    3.修改了配置文件,重启服务
    systemctl restart mariadb

    4.查看数据库创建的编码,只有在更新了数据库编码之后,创建的数据库,才会使用这个编码
    show create database s16;
    5.可以测试创建table,写入中文数据
    create table wjs;

    11.mysql的数据备份

    1.通过命令导出全部数据
    mysqldump -u root -p --all-databases > /data/db.dump

    2.可以测试删除一些无关紧要的db

    例如s14,test这样的数据
    3.导入数据库的db文件,在mysql命令行中输入这个命令
    mysql > source /opt/db.dump #这一步是输入的sql语句,在mysql中输入,导入数据
    4.第二种方式导入数据,通过mysql命令
    mysql -uroot -p < /opt/db.dump

    mysql主从复制的步骤:

    环境准备:
    准备两台服务器,安装两个mariadb可以开启两个虚拟机来做

    主库是:192.168.12.98 mater
    从库是:192.168.12.138 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 'wjs521'@'%' identified by 'wjs521';  by后面的为用户密码

    5.授予账号权限,授予一个从库的身份权限
    grant replication slave on *.* to 'wjs521'@'%';

    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.138:/tmp/
    3.登录slave从库,导入主库的数据信息
    mysql > source /tmp/db.dump
    4.查看主库和从库的信息,是否一致

    show databases;
    8.查看主库的状态信息,binlog信息
    show master status;

    9.解锁表,开始主从同步
    unlock tables;

    从库的设置:

    1.在/etc/my.cnf当中打开server-id
    vim /etc/my.cnf

    2.重启myariadb

    systemctl restart mariadb

    3.查看slave机器的身份信息
    show variables like 'server_id';
    show variables like 'log_bin';

    4.通过命令,开启主从同步技术
    change master to master_host='192.168.12.96',
    master_user='kangchen',
    master_password='kangchen666',
    master_log_file='mysqls14-bin.000001',
    master_log_pos=671;

    5.开启slave 
    start slave;

    6.检查slave状态,检查两条参数,如果都是yes,即主从ok

    通过此命令来查看:show slave statusG

    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes


    7.此时可以在主库中写入数据,查看从库中是否生成了记录

    主库:插入数据

    从库:检查数据

    Mariadb 的sql:


    create database s14;
    create table s14tb(id int,name char);
    insert into s14tb (id ,name) values(1,"s14")



    drop database s14;
    drop table s14tb; #删除整张表
    delete from s14tb;


    update



    select id,name,addr from table;

    redis相关配置

    1.yum 源码 rpm
    yum 快速,间接,高效,解决依赖关系,(自动安装到某个路径,不可控),通过yum安装的软件查询命令
    rpm -ql nginx
    yum源的软件包可能版本非常低

    源码安装,可扩展第三方的功能(可以指定目录安装, configure --prefix=/opt/python36/)
    可以通过官网的最新代码,进行编译安装

    通过源码安装

    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
    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的多实例功能,可以在一个机器上,启动多个redis服务端
    1.准备一个新的配置文件,redis默认支持多实例,再准备一个新的配置文件redis-6380.conf,内容如下:
    port 6380
    bind 0.0.0.0
    daemonize yes
    pidfile /data/6380/redis.pid
    loglevel notice
    logfile "/data/6380/redis.log"
    dir /data/6380
    protected-mode yes
    requirepass zeiqiangdademima
    2.启动第二个redis实例(第二个数据库)
    redis-server redis-6380.conf

    8.通过命令查询redis的密码参数
    CONFIG get requirepass

    redis发布订阅

    1.一个发布者,多个订阅者
    2.支持正则的匹配订阅者


    -a 参数意思是指定redis的密码登录
    redis-cli -a qiangdademima  # 启动1个redis客户端 (订阅者1)
    SUBSCRIBE 频道名字
    PSUBSCRIBE 频道名*

    redis-cli -a qiangdademima    # 启动2个redis客户端(订阅者2)
    SUBSCRIBE 频道名字
    PSUBSCRIBE 频道名*

    redis-cli -a qiangdademima    # 启动3个redis客户端(发布者)
    PUBLISH 频道名字 想发送的消息
    PUBLISH 频道名字* 发送的消息

    redis持久化之rdb与aof

    rdb模式

    1.在配置文件中写入参数,支持rdb模式
    vim redis.conf

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

    2.启动redis服务端,此时可以设置redis的key,通过save命令触发rdb持久化

    save 900 1
    save 300 10
    save 60 10000

    aof模式

    1.vim redis.conf #写入以下

    daemonize yes  守护进程
    port 6379
    logfile /data/6379/redis.log
    dir /data/6379
    dbfilename dbmp.rdb
    requirepass redhat
    save 900 1
    save 300 10
    save 60 10000
    appendonly yes
    appendfsync everysec

    2.启动redis-server服务端,默认就会生成appendonly.aof持久化文件

    启动redis-server:redis-server /etc/redis.conf

    此时进入redis-cli的操作,都会被记录,且追加到appendonly.aof文件中,以达到持久化的操作


    redis 持久化方式有哪些?有什么区别?

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

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

  • 相关阅读:
    C++ 将对象写入文件 并读取
    IronPython fail to add reference to WebDriver.dll
    How to Capture and Decrypt Lync Server 2010 TLS Traffic Using Microsoft Tools
    .net code injection
    数学系学生应该知道的十个学术网站
    Difference Between Currency Swap and FX Swap
    Swift开源parser
    谈谈我对证券公司一些部门的理解(前、中、后台)[z]
    JDK8记FullGC时候Metaspace内存不会被垃圾回收
    JVM源码分析之JDK8下的僵尸(无法回收)类加载器[z]
  • 原文地址:https://www.cnblogs.com/wjs521/p/10073304.html
Copyright © 2011-2022 走看看