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