mysql如何设置主从(读写分离),redis发布功能,以及redis的持久化存储(rdb,aof)
1 mysql基本命令
1.启动mysql
systemctl start mariadb
2.linux客户端连接自己
mysql -uroot -p -h 127.0.0.1
3.远程链接mysql服务端
mysql -uroot -p -h 192.168.1.197
远程授权:
grant all privileges on *.* to root@"192.168.1.100" identified by "redhat";
flush privileges
4.修改mysql密码
MariaDB [(none)]> set password = PASSWORD('redhat123');
5.创建mysql用户
create user xiaochun@'%' identified by 'xc666';
6.查询mysql库中的用户信息
use mysql;
select host,user,password from user;
7.授权语句
给李俊这个用户,授予创建数据库的权限
mysql使用grant命令对账户进行授权,grant命令常见格式如下
grant 权限 on 数据库.表名 to 账户@主机名 对特定数据库中的特定表授权
grant 权限 on 数据库.* to 账户@主机名 对特定数据库中的所有表给与授权
grant 权限1,权限2,权限3 on *.* to 账户@主机名 对所有库中的所有表给与多个授权
grant all privileges on *.* to 账户@主机名 对所有库和所有表授权所有权限
#授予小春创建的权限,对于所有的库表生效
grant create on *.* to xiaochun@"%" identified by 'xc666';
#授予小春用户,只有创建mymysql数据库的权限
grant create on mymysql.* to xiaochun@"%" identified by 'xc666';
#授予用户最大的权限,所有的权限
grant all privileges on *.* to username@'%' identified by 'password';
8.移除权限
MariaDB [(none)]> revoke all privileges on *.* from xiaochun@"%" identified by 'xc666';
9.数据库的备份与恢复
#备份
mysqldump -u root -p --all-databases > /tmp/db.sql
#数据导入,方式有2种
source /tmp/db.sql;
第二种
mysql -uroot -p < /tmp/db.sql
第三种
navicat
第四种,如果你数据量特别大的话,使用第三方工具
xtrabackup
2 mariadb主从复制
主从复制7步曲:
1. 主数据库写入数据之后, 会有data changes(数据变化)记录
2. 有变化记录之后,将增删改的一些sql语句记录到本地的Binary log(二进制日志)中
3. 从库会一直开启着一个线程
4. 通过线程去读取这个二进制日志的内容
5. 从库会将数据写入到自己的Relay log(中继日志)中
6. 从库会将中继日志中的操作转化为SQL thread(SQL语句)
7. 通过转化的SQL语句写入到自己的数据库, 两边的数据就一致了
3 mariadb主从复制实验
3.1 需求:
准备两台数据库服务器
主服务器: 192.168.12.249
从服务器: 192.168.12.200
3.2 在主服务器上操作
3.2.1 停止主服务器mariadb数据库服务
systemctl stop mariadb
3.2.2 修改主服务器配置文件
[mysqld]
server-id=1 #服务器的代号,可随意改,尽量按1到10
log-bin=qishi-logbin #设置日志文件名
3.2.3 启动mariadb
systemctl start mariadb
3.2.4新建用于主从同步的用户lijun,用来从库连接主库'192.168.12.249'
create user 'lijun'@'%' identified by 'lj666';
3.2.5.给从库账号授权,说明给lijun从库复制的权限,在192.168.12.249机器上复制
grant replication slave on *.* to 'lijun'@'%';
3.2.6 检查主库创建的复制账号
select user,host from mysql.user;
3.2.7 检查授权账号的权限
show grants for xiaochun@'%';
3.2.8 实现对主数据库锁表只读,防止数据写入,数据复制失败
flush table with read lock;
3.2.9 检查主库的状态, 并记录下日志文件的名字,和位置
MariaDB [(none)]> show master status;
记录下主数据库的写入状态和日志文件的名字,因为从库连接主库要用到
3.2.10 锁表后,一定要单独再打开一个SSH窗口,导出数据库的所有数据,
**注意,一定要单独再打开一个SSH窗口,否则写入状态码会发生变化,导致无法同步。
3.2.11 在主库上导出数据
mysqldump -u root -p --all-databases > /opt/qishimaster.sql
3.3 在从库上配置
3.3.1 关闭数据库服务
systemctl stop mariadb
3.3.2 在从库192.168.12.200上打开/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
server-id=3
read-only=true
3.3.3 重启数据库
systemctl restart mariadb
3.3.4 将主库导出的数据库文件拷贝到从库中
scp 192.168.12.249:/opt/qishimaster.sql /opt/
3.3.5 导入主库传过来的数据库文件,保持从库的数据与主库一致
mysql -u root -p
source /opt/qishimaster.sql
3.3.6 配置复制的参数,Slave从库连接Master主库的配置
mysql > change master to master_host='192.168.12.240',
master_user='caiwenjun',
master_password='123456',
master_log_file='qishi-logbin.000002',
master_log_pos=245;
3.3.7 启动从库的同步开关,测试主从复制的情况
start slave;
3.3.8 查看复制状态
show slave status\G;
注意: 如果看到Slave_IO_Running和Slave_SQL_Running这两个参数都为yes, 说明主从同步配置成功,否则需要检查并重新配置
如果发现有问题的话,建议推倒重来(最好是恢复快照)
3.4 最后在主库上操作
3.4.1 解锁主库的写入
unlock tables;
3.4.2 如果从库上面的普通用户无法在从库上登录,就重新创建一个用户
create user 'lijie'@'%' identified by 'lj666';
grant replication slave on *.* to 'lijie'@'%';
或者在主库上给zhengge授权, 只能授于查看的权限
grant select on *.* to lijie@"%" identified by "lj666";
3.4.3 验证主从读写分离的效果如图显示

4. 发布订阅

4.1 发布者 PUBLISH 发送消息
publish channel 消息
4.2订阅者 SUBSCRIBE 订阅消息
等待发送者,向管道发送消息
subscribe channel channel2 channel3
4.3 频道 channel
自定义频道的名字


4.4 支持正则的频道订阅
psubscribe 支持正则的频道
publish channel 消息
5. redis持久化
5.1 redis特性
redis是内存型的数据库
redis数据放在内存中
重启服务器丢失数据
重启redis服务丢失数据
断电丢失数据
为了防止redis数据丢失,进行持久化,所以将数据写入到一个文件中来实现
5.2 RDB持久化
5.2.1.在配置文件中,添加rdb持久化参数
redis-6379.conf
写入如下配置
port 6379
daemonize yes
pidfile /data/6379/redis.pid
loglevel notice
logfile "/data/6379/redis.log"
dir /data/6379
protected-mode yes
dbfilename dbmp.rdb
save 900 1 # rdb机制 每900秒 有1个修改记录
save 300 10 # 每300秒 10个修改记录
save 60 10000 # 每60秒内 10000修改记录
注意: 修改完配置之后,需要重启redis服务, 不准玩游戏
5.2.2.触发rdb持久化,可以手动save命令即可,生成 dump.rdb持久化文件

5.2.3.重启redis,数据不再丢失

5.2.4.rdb数据文件是二进制文件,人为的看不懂

5.3 AOF持久化
5.3.1.在配置文件中,添加aof参数
在redis-6379.conf中添加参数,开启aof功能
appendonly yes
appendfsync everysec
5.3.2.重启redis数据库,加载aof功能

5.4 redis持久化RDB转化AOF
5.4.1 删除现有的aof文件,备份RDB文件
cd /data/6379
rm -rf appendonly.aof
cp qishi5.rdb qishi5.rdb.bak
5.4.2 配置RDB切换到AOF
# 先进入redis客户端
redis-cli
# 配置开启AOF
127.0.0.1:6379> config set appendonly yes
# 关闭RDB
127.0.0.1:6379> config set save ""
5.4.3 以上配置重启后会失效,如果需要永久将RDB切换到AOF, 还是需要修改配置文件才可以
mysql如何设置主从(读写分离),redis发布功能,以及redis的持久化存储(rdb,aof)的更多相关文章
- Redis持久化存储——>RDB & AOF
Redis中两种持久化存储机制RDB和AOF redis是一个内存数据库,数据保存在内存中,但是我们都知道内存的数据变化是很快的,也容易发生丢失.幸好Redis还为我们提供了持久化的机制,分别是RDB ...
- 基于 EntityFramework 的数据库主从读写分离架构 - 目录
基于 EntityFramework 的数据库主从读写分离架构 回到目录,完整代码请查看(https://github.com/cjw0511/NDF.Infrastructure)中的目 ...
- redis 作为 mysql的缓存服务器(读写分离)
redis 作为 mysql的缓存服务器(读写分离) 一.redis简介 Redis是一个key-value存储系统.和Memcached类似,为了保证效率,数据都是缓存在内存中.区别的是redis会 ...
- Amoeba搞定mysql主从读写分离
前言:一直想找一个工具,能很好的实现mysql主从的读写分离架构,曾经试用过mysql-proxy发现lua用起来很不爽,尤其是不懂lua脚本,突然发现了Amoeba这个项目,试用了下,感觉还不错,写 ...
- Amoeba实现mysql主从读写分离
Amoeba实现mysql主从读写分离 这段在网上看了下关于amoeba的文章,总体感觉好像要比mysql-proxy好的多,也参考了不少的资料,此文章可能与其他文章作者会有雷同的地方,请谅解,但是此 ...
- 基于Amoba实现mysql主从读写分离
一.Amoeba简介 Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy.它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特 ...
- windows下Redis 主从读写分离部署
原文:windows下Redis 主从读写分离部署 1.可直接下载window下的运行文件(下面这个链接) 也可以浏览github 查看相应的版本说明文档 https://github.com/Ser ...
- linux中MySQL主从配置(Django实现主从读写分离)
一 linux中MySQL主从配置原理(主从分离,主从同步) mysql主从配置的流程大体如图: 1)master会将变动记录到二进制日志里面: 2)master有一个I/O线程将二进制日志发送到sl ...
- CRL快速开发框架4.4版发布,支持主从读写分离
经过一些调整和优化,4.3已经运行在生产环境,对于不久将会遇到的查询性能,读写分离需求列上日程 读写分离需求 对于一个数据库作了主从发布/订阅,主库为DB1,从库为DB2 所有写入通过DB1,所有查询 ...
随机推荐
- iOS 应用签名原理&重签名
在苹果的日常开发中,真机测试与打包等很多流程都会牵扯到各种证书,CertificateSigningRequest,p12等.但是很多相应的开发者并不理解iOS App应用签名的原理和流程.今天着重讲 ...
- Java多线程(十五):CountDownLatch,Semaphore,Exchanger,CyclicBarrier,Callable和Future
CountDownLatch CountDownLatch用来使一个线程或多个线程等待到其他线程完成.CountDownLatch有个初始值count,await方法会阻塞线程,直到通过countDo ...
- SpringBoot整合MybatisPlus3.X之逻辑删除(三)
pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId& ...
- 【Windows系统】win10系统假死,窗口不能动,鼠标能动或不能动,最后蓝屏显示错误码: VIDEO_DXGKRNL_FATAL_ERROR 的解决办法
1. 问题的出现过程 最近博主自己用的 windows10 系统就碰到了这个问题. 一开始出现这个问题的征兆是鼠标会时不时地卡顿,一出现卡顿就会等个 1-3秒才能动.然后频繁卡顿(注意,这里根据经验就 ...
- ORM之多表操作
一.创建模型 from django.db import models # Create your models here. class Book(models.Model): nid = model ...
- MacOS 系统 文件夹解析
Mac OS X,基于UNIX核心的系统,增强了系统的稳定性.性能以及响应能力. 通过对称多处理技术充分发挥双处理器的优势,提供无与伦比的2D.3D和多媒体图形性能以及广泛的字体支持和集成的PDA功能 ...
- Bash 内置高效特性
变量(字符串)变换 定义一个变量t,内容为framE [root@vm1 tmp]# t=framE 查看变量t的内容:echo $t或者是echo ${t} [root@vm1 tmp]# echo ...
- 学习笔记22_AspMvc简介
*Mvc和webForm区别 1. Mvc模式下,前台和后台的交流,是后台提供数据,使用对象包裹的形式,前台来使用,类似于webForm定义一个属性那样. 2.Mvc模式下,再也不是使用this.la ...
- MYSQL5.7修改密码强度策略
---恢复内容开始--- 在MySQL5.6.6之后,ORACLE更新了mysql密码强度必须要使用大小写数字符号来设置密码,但是有时候这样还是很不方便的.所以记录一篇如何修改mysql密码强度的博文 ...
- 说说Java中你不知道switch关键字
Switch语法 switch作为Java内置关键字,却在项目中真正使用的比较少.关于switch,还是有那么一些奥秘的. 要什么switch,我有if-else 确实,项目中使用switch比较少的 ...