MariaDB主从复制,redis发布订阅,持久化,以及主从同步
一. MariaDB主从复制
mysql基本操作
1 连接数据库
- mysql -u root -p -h 127.0.0.1
- mysql -u root -p -h 192.168.12.60
2 授予远程连接的权限
- grant all privileges on *.* to root@"%" identified by "centos"
3 修改root用户的密码
- 先进入mysql的交互式模式
- set password = PASSWORD('centos');
4 创建mysql用户
- create user liulaoshi@"%" identified by "lls666"
5 给予刘老师查询所有库和所有表的权限
- grant select on *.* to liulaoshi@"%" identified by "lls666"
6.查询mysql库中的用户信息
- use mysql;
- select host,user,password from user;
7.再给刘老师创建所有库和所有表的权限, 再给修改权限,再加上删除权限
- grant create on *.* to liulaoshi@"%" identified by "lls666"
- grant update on *.* to liulaoshi@"%" identified by "lls666"
- grant delete on *.* to liulaoshi@"%" identified by "lls666"
8 授予mysql权限的语法
- mysql使用grant命令对账户进行授权,grant命令常见格式如下
-
- grant 权限 on 数据库.表名 to 账户@主机名 对特定数据库中的特定表授权
- grant 权限 on 数据库.* to 账户@主机名 对特定数据库中的所有表给与授权
- grant 权限1,权限2,权限3 on *.* to 账户@主机名 对所有库中的所有表给与多个授权
- grant all privileges on *.* to 账户@主机名 对所有库和所有表授权所有权限
9 移除刘老师的创建权限
- revoke create on *.* from xiaochun@"%" identified by 'lls666';
- revoke delete on *.* from xiaochun@"%" identified by 'lls666';
10.数据库的备份与恢复 #备份
- mysqldump -u root -p --all-databases > /tmp/db.sql
备份单个数据库
- mysqldump -u root -p luffycity > /tmp/luffycity.sql
#数据导入,方式有3种
第一种方法:
- 进入mysql交互模式
- source /tmp/luffycity.sql;
第二种方法
- mysql -u root -p < /tmp/luffycity.sql
第三种方法
- navicat 第三方工具
mariadb主从复制
步骤详解:
- 1. 主数据库写入数据之后, 会有data changes(数据变化)记录
- 2. 有变化记录之后,将增删改的一些sql语句记录到本地的Binary log(二进制日志)中
- 3. 从库会一直开启着一个线程
- 4. 通过线程去读取这个二进制日志的内容
- 5. 从库会将数据写入到自己的Relay log(中继日志)中
- 6. 从库会将中继日志中的操作转化为SQL thread(SQL语句)
- 7. 通过转化的SQL语句写入到自己的数据库, 两边的数据就一致了
mysql主从复制部署
1 准备两台机器
- 192.168.12.60 # 主服务器master(可读可写)
- 192.168.12.71 # 从服务器slave(可读)
- 实际工作中数据库读取操作比较多,由于从服务器是读,所以从服务器的配置要强悍一些
2 两台机器上分别安装mariadb数据库
- 192.168.12.60
- 用户名: root
- 密码: centos
-
- 192.168.12.71
- 用户名: root
- 密码: centos
配置主数据库
3 在主数据库(192.168.12.56)上操作
- 停mariadb
- systemctl stop mariadb
4 修改主数据库的配置文件
- vim /etc/my.cnf
- 添加以下内容
- [mysqld] # 如果配置文件里面有这一行,就只需要加以下两行配置就可以了
- server-id=1
- log-bin=qishi2-logbin
5 重启主数据库
- systemctl restart mariadb
6 创建主从复制用户账号
- create user 'pig'@'%' identified by 'centos';
7 给从库账号授权,说明给tiger从库复制的权限,在10.0.0.8机器上复制
- grant replication slave on *.* to 'pig'@'%';
8 实现对主数据库锁表只读,防止数据写入,数据复制失败
- flush table with read lock;
9 查看并记录主数据库的状态
- show master status;
10 确认主数据库是否已经成功锁表
11 导出主数据库的数据为alldb.sql
- mysqldump -u root -p --all-databases > /opt/alldb.sql
12 把这个数据库文件拷贝到从数据库的/opt目录下
- scp /opt/alldb.sql 192.168.12.71:/opt/
配置从数据库
13 停止从数据库服务
- systemctl stop mariadb
14 修改从数据库的配置文件
- vim /etc/my.cnf
- 添加以下配置
- [mysqld]
- server-id=5
- read-only=true
15 启动从数据库服务
- systmectl start mariadb
16 在从 库上导入主数据库数据
- mysql -u root -p
- source /opt/alldb.sql
17 现在,主从两台数据库的数据就完全一致
18 配置复制的参数,Slave从库连接Master主库的配置(最重要的一步)
- change master to master_host='192.168.12.60',
- master_user='pig',
- master_password='centos',
- master_log_file='qishi2-logbin.000001',
- master_log_pos=466;
19 启动从库的同步开关,测试主从复制的情况
- start slave
20 查看从库的状态
在主库上操作
21 导出数据完毕,并配置好从库开启主从同步后,再解锁主库,恢复可写;
- unlock tables;
22 验证主从复制情况
- 在主库上创建数据,查看从库数据同步状态
23 在主库上给予qihang用户select的权限, 并刷新授权表
- grant select on *.* to pig@"%" identified by "centos";
- flush privileges;
24 在从库上登录qihang用户, 并尝试创建一个库
- create database aaaa;
-
- ERROR 1290 (HY000): The MariaDB server is running with the --read-only option so it cannot execute this statement
25 验证主从读写分离状态
26 从库上提示read-only表示主从同步读写分离已经成功完成
二. redis发布订阅和持久化
redis发布订阅
发布者
- publish xinwen 66nouyou
订阅者
- sub
redis 持久化
redis是一个内存型的数据库
断电数据会消失
重启服务数据会消失
重启服务器数据会消失
mysql的数据存在硬盘中,但是数据是存在哪个路径下呢?
- /var/lib/mysql
redis持久化之 RDB
RDB持久化配置:
1 创建redis配置文件
- vim /opt/redis_conf/reids-6379.conf
写入以下配置
- port 6379
- daemonize yes
- dir /opt/data/6379
- pidfile /opt/data/6379/redis.pid
- loglevel notice
- logfile "/opt/data/6379/redis.log"
- protected-mode yes
- dbfilename dbmp.rdb
- save 900 1
- save 300 10
- save 60 10000
2 进入redis 数据库,创建几条数据,并使用save命令开启rdb持久化
- redis-cli
-
- set name liujie
- set age 18
- set sex nam
-
- save # 开启rdb持久化, 也可以不用
redis AOF持久化
1 修改reids配置文件
- vim /opt/redis_conf/redis-6379.con
- 加入以下两行配置
- appendonly yes
- appendfsync everysec
保存退出
2 重启redis服务
- pkill reids
- redis-server /opt/redis_conf/redis-6379.conf
3 验证appendonly.aof文件里面的数据和redis里面的数据是否健在
redis不重启,从RDB切换到AOF
1 配置RDB持久化,确保没有AOF的配置
- 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 登录redis-cli插入数据,手动持久化
- 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文件
5 备份RDB文件
6 执行命令,开启AOF持久化
- CONFIG set appendonly yes # 开启AOF功能
-
- CONFIG SET save "" # 关闭RDB功能
7 验证旧的RDB数据库数据是否转入AOF, 以及AOF持久化文件是否正常写入
三. 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 /opt/data/6380/redis.pid
- loglevel notice
- logfile "/opt/data/6380/redis.log"
- dbfilename dump.rdb
- dir /opt/data/6380
- protected-mode no
3 目前这三个配置文件配置一样,只是端口的不同
- 可以使用这一条命令通过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
4 在6381和6382下添加以下配置,使之成为从数据库
- slaveof 127.0.0.1 6380
可以使用以下一行命令直接追加写入到配置文件中
- echo "slaveof 127.0.0.1 6380" >> redis-6381.conf
5 确认三个配置文件无误
6 开启这三个redis服务,确保三个服务启动正常
7 查看redis主从数据库的状态
- redis-cli -p 6380 info replication
- redis-cli -p 6381 info replication
- redis-cli -p 6382 info replication
8 验证redis主从复制情况
(1)先验证三个数据库是否能正常连接
(2) 在6380上面写入数据,查看6381和6382是否能够正常同步
9 手动进行主从复制故障切换
(1) 杀掉6380的进程,模拟主库故障
- kill -9 进程ID
(2)在6381和6382上手动指定一个主库(我现在指定6382为主库)
(3) 在6382的redis上执行这一行命令
- slaveof no one
(4) 在6381上执行以下命令,将原来的指向6380改为指向6382
原来的配置指向:
执行命令:
- slaveof no one
- slaveof 127.0.0.1 6382
(5) 验证新的主从架构状态
- 查看主从信息
- info replication
在6382上查看主从信息
再到6381上面查看主从信息
(6) 验证新的主从架构是否可以正常写入数据,同步数据
如果可以,说明主从正常
详细可参考: mariadb:主从复制:https://www.cnblogs.com/tiger666/articles/10259269.html
持久化rdb以及AOF:https://www.cnblogs.com/tiger666/articles/10351619.html
MariaDB主从复制,redis发布订阅,持久化,以及主从同步的更多相关文章
- Linux(6)- redis发布订阅/持久化/主从复制/redis-sentinel/redis-cluster、nginx入门
一.redis发布订阅 Redis 通过 PUBLISH .SUBSCRIBE 等命令实现了订阅与发布模式. 其实从Pub/Sub的机制来看,它更像是一个广播系统,多个Subscriber可以订阅多个 ...
- Linux 安装redis,redis发布订阅,持久化
安装redis 1.安装redis的方式 -yum (删除这个yum安装的redis,我们只用源码编译安装的) -rpm -源码编译 2.删除原本的redis yum remove redis -y ...
- MSSqlServer 发布/订阅配置(主从同步)
背景: 1.单个独立数据库的吞吐量是有瓶颈的,那么如何解决这个瓶颈? 2.服务器直接数据如何复制.并具备一致性.可扩展性? 资源: 官方资源:https://technet.microsoft.com ...
- 利用Redis发布订阅完成tomcat集群下的消息通知
以下为个人想法,如果有说的不对的地方请各位大佬见谅! 这是博主的第一篇博客,可能排版以及一些描述有不合理的地方还请勿喷,希望大家尽可能的多给我这样的新人一些鼓励让我能在写博客的道路上走下去. 进入正题 ...
- Redis发布订阅机制
1. 什么是Redis Redis是一个开源的内存数据库,它以键值对的形式存储数据.由于数据存储在内存中,因此Redis的速度很快,但是每次重启Redis服务时,其中的数据也会丢失,因此,Redis也 ...
- Redis 发布订阅,小功能大用处,真没那么废材!
今天小黑哥来跟大家介绍一下 Redis 发布/订阅功能. 也许有的小伙伴对这个功能比较陌生,不太清楚这个功能是干什么的,没关系小黑哥先来举个例子. 假设我们有这么一个业务场景,在网站下单支付以后,需要 ...
- redis发布订阅客户端报错
转自简书[https://www.jianshu.com/p/a85ec38245da] 最近遇到一个问题,springBoot程序中有一个监听器,监听redis中发来的消息(其实是监听一个key的消 ...
- Redis发布订阅使用方法
Redis发布订阅 发布订阅模式中发布消息的为publisher即发布者,接收消息的为subscriber即订阅者.在Redis中,所有的消息通过channel即频道进行发布,一个发布者可以向多个ch ...
- SpringBoot Redis 发布订阅模式 Pub/Sub
SpringBoot Redis 发布订阅模式 Pub/Sub 注意:redis的发布订阅模式不可以将消息进行持久化,订阅者发生网络断开.宕机等可能导致错过消息. Redis命令行下使用发布订阅 pu ...
随机推荐
- Java IO和Java NIO 和通道 在文件拷贝上的性能差异分析
1. 在JAVA传统的IO系统中,读取磁盘文件数据的过程如下: 以FileInputStream类为例,该类有一个read(byte b[])方法,byte b[]是我们要存储读取到用户空间的缓冲区 ...
- 如何在centos6.5中安装MySQL数据库
huidaoli 东华理工大学信工IT网-项目1+1学习基地(www.ecit-it.com)
- python习题一
1.26个字母大小写成对打印,例如:Aa,Bb...... 方法1: for i in range(26): print(chr(65+i)+chr(97+i)) 方法2: for i in rang ...
- [Offer收割] 编程练习赛1
A HihoCoder 1268 九宫 思路: 一般类似于数独的题目都是使用回溯解决,这里由于题目数据较小同样可以直接DFS得出结果.这里我用了一个偷懒的方法(next_permutation),直接 ...
- 【题解】Luogu P2347 砝码称重
正经·DP题解 一道非常好的背包练手题( sto(注:原思路来源 SLYZ_0120 的题解)orz 开始这道题 1.输入六个数,存进数组中 2.初始化 f 数组为0. f [ i ] 表示重量为 i ...
- 996.ICU与死亡因素
昨天,我为996.ICU这场国际运动贡献了一颗星. 关于这件事,第一想到的就是我们工作的初心是为了更好的生活,工作扼杀生活的不良风气应该坚决抵制. 查了一下,近些年人类正常死亡原因中排名前三的原因为: ...
- oracle SQL性能分析之10053事件
优化器生成正确执行计划的前提条件是要有正确的统计信息,不准确的统计信息往往会导致错误的执行计划.当通过SQL和基数推断出的执行计划和实际执行计划不同时,就可以借助10053事件.10053事件是用来诊 ...
- mysql批量导出单结构与结构数据表脚本
由于一个库里面不需要导出全部, 只需要导出一部分指定的数据表结构与数据 那么就写了一个比较简单而且为了能偷懒的小shell #!/bin/bash #************************* ...
- MySQL触发器在建立时,报语法错的问题
delimiter $$ create trigger trg_delete_on_users before DELETE on users for each row begin delete fro ...
- Hive性能优化上的一些总结
https://blog.csdn.net/mrlevo520/article/details/76339075 1.介绍 首先,我们来看看Hadoop的计算框架特性,在此特性下会衍生哪些问题? 数据 ...