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 status\G;
从库设置

 

 

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

 

posted @ 2019-08-15 09:01  不可思议的猪  阅读(273)  评论(0编辑  收藏  举报