mariadb的主从复制,redis的主从复制

1 mysql基本命令

1.启动mysqlsystemctl start mariadb?2.linux客户端连接自己 mysql -uroot -p -h 127.0.0.1?3.远程链接mysql服务端:    条件一:两台机器上都安装了mysql (mariadb)    条件二:远程授权    远程授权:    grant all privileges on *.* to "root"@‘10.0.3.191‘ indentified by ‘123456‘;    flush privileges远程连接的sql语句:    mysql -uroot -p123456 -h 10.0.3.189??4.修改mysql密码MariaDB [(none)]> set password = PASSWORD(‘redhat123‘);?5.创建mysql用户create user ‘%‘ 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 "%"  identified by ‘xc666‘;#授予小春用户,只有创建mymysql数据库的权限grant create  on mymysql.* to "%"  identified by ‘xc666‘;?#授予用户最大的权限,所有的权限grant all privileges on *.* to ‘%‘ identified by ‘password‘;??8.移除权限MariaDB [(none)]> revoke all privileges on *.* from "%" 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 需求:

准备两台数据库服务器

主服务器: 10.0.3.156从服务器:  10.0.3.212

3.2 在主服务器上操作

3.2.1 停止主服务器mariadb数据库服务
systemctl stop mariadb
3.2.2 修改主服务器配置文件
[mysqld]server-id=1log-bin=qishi-logbin
3.2.3 启动mariadb
systemctl start mariadb
3.2.4登录mariadb,新建用于主从同步的用户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 ‘%‘;

3.2.8 实现对主数据库锁表只读,防止数据写入,数据复制失败
flush table with read lock;
3.2.9 检查主库的状态, 并记录下日志文件的名字,和位置

MariaDB [(none)]> show master status;

记录下主数据库的写入状态和日志文件的名字

3.2.10 锁表后,一定要单独再打开一个SSH窗口,导出数据库的所有数据,

注意,一定要单独再打开一个SSH窗口!!!!!

注意,一定要单独再打开一个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 在从库10.0.3.212上打开/etc/my.cnf

如果从库是新安装的数据库的话,没有中文配置,还需要添加中文配置

[mysqld]character-set-server=utf8collation-server=utf8_general_cilog-error=/var/log/mysqld.log?server-id=3read-only=true?[client]default-character-set=utf8[mysql]default-character-set=utf8
3.3.3 重启数据库
systemctl restart mariadb
3.3.4 将主库导出的数据库文件拷贝到从库中
scp 192.168.12.249:/opt/qishimaster.sql /opt/
3.3.5 导入主库传过来的数据库文件,保持从库的数据与主库一致
mysql -u root -psource /opt/qishimaster.sql
3.3.6 配置复制的参数,Slave从库连接Master主库的配置
MariaDB [oldboy] > change master to master_host=‘10.0.3.189‘,                -> master_user=‘ritian‘,                -> master_password=‘123456‘,                -> master_log_file=‘oldboy-logbin.000001‘,                -> master_log_pos=472;
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 ‘yatai‘@‘%‘ identified by ‘yt666‘;grant replication slave on *.* to ‘yatai‘@‘%‘;

或者在主库上给zhengge授权, 只能授于查看的权限

grant select on *.* to "%" 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.pidloglevel 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 yesappendfsync everysec
5.3.2.重启redis数据库,加载aof功能

5.4 redis持久化RDB转化AOF

5.4.1 删除现有的aof文件,备份RDB文件
cd /data/6379rm -rf appendonly.aofcp 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, 还是需要修改配置文件才可以

相关推荐