106 mysql 安装 主从复制 redis的安装, 支持多实例化, 持久化操作
主要内容:
mysql的博客地址: https://www.cnblogs.com/pyyu/p/9467289.html
redis的博客地址: https://www.cnblogs.com/pyyu/p/9843950.html
1 mysql 安装:
a : mariadb其实就是mysql; mysql已经被oracle收购,它即将闭源,马上要开始收费了,因此还想免费试用开源的数据库mysql,就在centos7上,将mysql分支为mariadb
b : 安装mariadb的两种方式:
通过yum安装: linux下yum的软件管理目录在/etc/yum.repos.d
在这个目录底下, 主要是*.repo这个文件, 就会被识别为yum源文件.
第一种方式:通过阿里云的yum源去下载(第三方的yum源,可能会版本较低,且软件不全,可能找不到)
安装语句: yum install mariadb-server #yum安装mariadb 因为这个阿里云特别快,咱们用他去学习,加速下载 300kb/s, 工作上用下一个
第二种方式: 通过mariadb官方的yum源去下载(一定是这个软件最正确的yum源,且包都是最新的).
1) #编辑创建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
3) 安装语句:yum install MariaDB-server MariaDB-client #区分大小写 ,这个方式是取国外下载mariadb速度太慢 30kb/s依赖关系解决
4) 重新启动mariadb: systemct1 start mariadb
2 mysql的使用:
1 初始化mariadb: mysql_secure_installation #直接输入这个命令,设置root密码,删除匿名用户等等操作.
2 配置mariadb远程登录, 可以通过windows, pycharm等客户端进行连接,在远程登录的时候, 必须输入'redhat'密码.
grant all privileges on *.* to root@'%' identified by 'redhat';
解释: 授予所有的权限在所有的库所有的表, 用户名@"所有的地址".
3 刷新授权表, 使得权限立即生效: flush privileges;
4 更改mysql的密码: set password = PASSWORD('redhat123');
5 创建普通用户: create user s14@'%' identified by 's14666';
6 查询用户信息: select host, user, password from user
7 授权语句:
grant 权限 on 数据库.表名 to 账户@主机名 对特定数据库中的特定表授权
grant 权限 on 数据库.* to 账户@主机名 对特定数据库中的所有表给与授权
grant 权限1,权限2,权限3 on *.* to 账户@主机名 对所有库中的所有表给与多个授权
grant all privileges on *.* to 账户@主机名 对所有库和所有表授权所有权限
grant create,select,insert on *.* to root@'%' identified by "密码"
8 数据库中的中文设置: 防止乱码
1 ) 查看数据库编码: \s
2 ) 修改mysql中的配置文件: vim /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
3) 修改了配置文件, 重启服务:systemctl restart mariadb
4 ) 查看数据库创建的编码, 只有在跟新了数据库编码之后, 创建的数据库, 才会使用这个编码 show create database s16
3 数据库的备份
1) 通过命令导出全部数据: mysqldump -u root -p --all-databases > /data/db.dump
2) 进入到mariadb数据库, 删除一个db
执行命令:
[root@master ~]# mysql -uroot -p MariaDB [(none)]> drop database s11;
3) 进行数据恢复, 把刚才重定向的备份的数据库文件导入到mysql中
[root@master ~]# mysql -uroot -p < /data/db.dump
4 mysql的主从复制:
1) 主从复制的原理:
a : 主库master, 用户可以在这里读写数据
b : 将变动的数据写入到二进制文件bin_log中, 记录数据库中的变化
c : 从服务器指名要和谁同步, 然后slave机器开启一个线程, 取读取主库中的二进制文件
d : 从服务器中将那些sql变动写入到自己的中继日志中, 然后将这些sql语句在自己的slave本机在执行一次.
2 ) 应用场景:
利用复制功能吧maser服务器出现问题时, 我们可以人工的切换到服务器继续提供服务, 此时服务器的数据和宕机时的数据几乎完全一致. 复制功能也可用作数据备份, 但是如果人为的执行drop, delete等语句, 那么从库的备份功能也就失效了.
3 ) 主库和从库的配置:
a : 主库的配置:
1) 开启binlog功能, 修改/etc/my.cnf
[mysqld] server-id=1 #指明主库的身份id为1 log-bin=mysqls14-bin #指明binlog的日志名
2) 修改配置文件, 重启mariadb, 使得binlog生效: systemct1 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) 主从同步, 将从库与主库的数据, 保持一致后, 他两在同一起跑线上, 然后解除锁表, 然后解除数据, 保证数据的一致性.
a : 导出当前数据, 用于slave机器导入数据, 保证在一个起始点.:mysqldump -u root -p --all-databases > /data/db.dump
b : 将此文件远程传输给slave机器, 用于导入: scp /data/db.dump root@192.168.12.87:/tmp/
c : 登录从库, 导入主库的数据信息:source /tmp/db.dump
8) .查看主库的状态信息,binlog信息 : show master status;
9) .解锁表,开始主从同步 : unlock tables;
b: 从库的设置:
1) .在/etc/my.cnf当中打开server-id : vim /etc/my.cnf
2) .重启myariadb
3) .查看slave机器的身份信息
show variables like 'server_id';
show variables like 'log_bin';
4) .通过命令,开启主从同步技术
change master to master_host='192.168.12.96', master_user='kangchen', master_password='kangchen666', master_log_file='mysqls14-bin.000001', master_log_pos=671;
5) .开启slave : start slave;
6) .检查slave状态,检查两条参数,如果都是yes,即主从ok
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
7) .此时可以在主库中写入数据,查看从库中是否生成了记录
5 redis的安装
1) 在线下载redis源码包: wget http://download.redis.io/releases/redis-4.0.10.tar.gz
2) 解压缩源码包, 如果源码包带有.gz结尾, 需要通过gzip指令扩展, 也就是-z的参数:tar -zxvf redis-4.0.10.tar.gz #解压缩这个文件,且显示解压缩过程
3) 切换目录到源码包:
4) 由于redis没有configure脚本, 直接就有了makefile, 因此可以直接编译且安装: make 编译 make install 安装
两条命令可以缩写成一条: make && make install
5) 编译安装完成后, redia默认将redis的命令添加到环境变量中/usr/local/bin下面
6 redis的使用:
1) 改名字: mv redis.conf redis.conf.bak
2) 对bak文件进行操作: 去掉所有的#开头的和空行, 将筛选的值写入到redis.conf中, 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添加密码
3) 此时执行redis-server redis.conf, 此时开启redis服务, 开启一个客户端来连接它.
4) redis的安全模式, 可能会阻挡你远程连接, 为了解决这个安全模式, 给redis设置一个密码:
使用密码登录的连接的方法:
[root@smile ~]#redis-cli -p 6379 127.0.0.1:6379> auth passwd1
检查redis是否设置了密码: CONFIG get requirepass
如果没有, 还可以给redis设置密码: CONFIG set requirepass "xxxxxx"
7 redis的多实例功能, 可以在一个机器上, 启动多个redis服务端
1)准备一个新的配置文件, redis默认支持多实例, 再准备一个新的配置文件redis-6380.conf,内容如下:
port 6380 bind 0.0.0.0 daemonize yes pidfile /data/6380/redis.pid loglevel notice logfile "/data/6380/redis.log" dir /data/6380 protected-mode yes requirepass zeiqiangdademima
2) 可以启动第二个实例(第二个数据库): redis-server redis-6380.conf
8 redis的发布订阅:
1 一个发布者, 多个订阅者
2 支持正则的匹配订阅者
1) 执行步骤, 开启三个redis-cli: 两个为订阅者, 一个为发布者
2) 执行流程如下:
-a 参数意思是指定redis的密码登录 一般不用这种方法登录, 不安全, 使用下面的方法进行登录 redis-cli -p 端口号 auth 密码 redis-cli -a qiangdademima #启动1个redis客户端 (订阅者1) SUBSCRIBE 频道名字 PSUBSCRIBE 频道名* redis-cli -a qiangdademima #启动2个redis客户端(订阅者2) SUBSCRIBE 频道名字 PSUBSCRIBE 频道名* redis-cli -a qiangdademima #启动3个redis客户端(发布者) PUBLISH 频道名字 想发送的消息 PUBLISH 频道名字* 发送的消息
9 redis的持久化值RDB和AOF
持久化
定义: redis是一种内存型数据库, 一旦服务器进程退出, 数据库中的数据就会丢失, 为了解决这个问题, redis提供了两种持续化的方案, 将内存的数据保存到磁盘中, 避免数据的丢失.
RDB模式配置:
定义: redis
提供了RDB持久化
的功能,这个功能可以将redis
在内存中的的状态保存到硬盘中,它可以手动执行。也可以再redis.conf
中配置,定期执行。
RDB持久化产生的RDB文件是一个经过压缩的二进制文件,这个文件被保存在硬盘中,redis可以通过这个文件还原数据库当时的状态。
1) 在配置文件中写入参数, 支持rdb模式, vim redis.conf
port 6379 bind 0.0.0.0 daemonize yes pidfile /data/6379/redis.pid loglevel notice logfile "/data/6379/redis.log" dir /data/6379 protected-mode yes requirepass qiangdademima
加入下面四句 dbfilename dbmp.rdb save 900 1 save 300 10 save 60 10000
2) 启动redis服务, 此时可以设置redis的key, 通过save命令触发rdb持久化
3) 此时/data/6379/会出现dbmp.rdb文件
4) 此时关闭redis服务, 客户端的数据会保存, 不会丢失
AOF 模式设置:
定义: 记录服务器执行的所有变更操作命令(例如set del等),并在服务器启动时,通过重新执行这些命令来还原数据集.
AOF 文件中的命令全部以redis协议的格式保存,新命令追加到文件末尾。
优缺点: 最大程度保证数据不丢失, 日志记录非常大.
1) 编辑vim redis.conf 写入以下:
daemonize yes port 6379 logfile /data/6379/redis.log dir /data/6379 dbfilename dbmp.rdb requirepass redhat save 900 1 save 300 10 save 60 10000
加入下面两句代码: appendonly yes appendfsync everysec
2) 启动reids-sever服务端, 默认就会生成appendonly.aof持久化文件, 此时进入到redis-cli的操作都会记录到持久化文件中, 如果关闭redis服务, 在重新开启会重新执行持久化文件, 将数据保存.
redis持久化的方式, 不同之处
1) 持久化的方式: RDB 和AOF
2) 不同点: rbd: 基于快照的持久化, 速度更快, 一般用作备份, 主从复制也是依赖于rdb持久化功能; aof: 已追加的方式记录redis操作日志的文件. 可以最大程度的保证redis数据安全, 类似于mysqld的binlog.