知识点回顾:
1、安装mysql时,可根据自己总结文档安装,用echo $?可验证上步操作是否正确;
2、用户分三种:①超户:大企业基本不用②普户:每个员工都有自己负责部分的权限③程序用户:专门启动和停止程序用的。
3、chown -R mysql:root /usr/local/mysql 将root权限给此整个目录
4、验证mysql是否启动的二种方法:
方法一,看进程:ps -ef | grep -v grep | grep mysql
方法二,netstat -antup | grep 3306
思考题:用户投诉访问网站太慢,客服反馈给运维,应该怎么做?
①自己以用户身份用不同方式登录(本地/外地网,电脑/手机),查问题(排查,甩锅)
②查看自身硬件,有没有宕机(电源线/网线有无松动,服务器是否开启)
③top查负载均衡,cpu,内存,硬盘占用(磁盘满了是真满了还是inode号用尽)
④查网络(内网连接有无中断)
⑤查系统日志(有无报错,或什么操作导致报错)
⑥查服务运行情况
一、数据库的主从分离与主从复制
正课:用户访问网站的流程
负载均衡作用:将用户请求合理分配给反向代理
反向代理作用:代替用户发起请求,得到用户请求的数据并传递给用户
1、主从分离:
用户的操作分为读操作和写操作:
读操作:不改变数据的操作,如下载,浏览,播放等。占互联网操作的大部分约80%
写操作:改变数据的操作:注册,购买等,只占20%
公司规模小时,访问量少,只有一个数据库,读和写都靠这一台;
公司日渐壮大,访问量/流量压力增大,要增加数据库,重新分配架构,将读和写分离,主库负责写,从库负责读,但受各种因素影响,物理上最多只能做到1主5从。
当然,主库最少需要二台,一台主库,一台放在从库上的备份库。服务器访问主库时主库若宕机,备份库可恢复。
问题1:公司备份数据库时备份的是主库还是从库?
因为备份时要锁库锁表,此时不能写入影响用户使用,所以一般公司备份的都是从库,(垄断行业如12306除外)
2、主从复制原理:重点,必须会背,面试必考
①需在主库开启binlog日志(即二进制日志,记录能对数据库产生变化的sql语句)
开启方式:在mysql配置文件my.cnf修改
②此时主库有个I/O线程,I/O线程将对数据库产生变化的sql语句记入binlog日志中
③从库开启主从复制后,也有一个I/O线程,这个I/O监控到主库的binlog日志发生改变,会和他发请求,请求数据同步,将主库binlog日志同步到本地的中题日志从库开启主从复制后
④从库还有一个sql线程,sql线程执行中继日志内记录的sql语句,实现数据一致
问题2、既然从库可以备份,整个数据库还需要备份吗?
需要。主从复制只能抵御系统风险(主库坏掉,只需把从库重新分配为主库即可),但不能抵御程序风险(例如主库执行删库,主从复制会将删库sql语句同步到从库,从库也会将删库语句同步执行,那从库也会删库),所以必须进行主库备份,最好是rsync+inotify实时备份
3、问题3:如目前主从复制已开启,且已达到最大值1主5从,无法再通硬件升级数据库,但访问/浏览压力依然很大,要怎样解决?这里就要用到缓存服务器
缓存服务器:这个服务器里的存储介质由内存代替了硬盘,所以I/O速度很快,但容量比数据库小很多,更适用于存储热点数据,且无缓存服务器需备份
真实数据都存在数据库里,存储热点数据一般有个预先设定的期限,预定期限内此热点数据被访问将会被存到缓存服务器里,若预定期限到期后还没有被频繁访问此热点数据将被从缓存服务器中清掉;预定期限内此热点数再被频繁访问,则预定期限会继续刷新延长。
原理:读数据存放在从库里,用户访问热点数据属于读操作,而从库会返回2份数据,一份给用户,一份给缓存服务器。
二、mysql主从复制 实操
准备二台装好数据库的虚拟机:
主库marker(ip为192.168.71.143),从库slave(ip为192.168.71.144)
①关闭主库和从库的防火墙,在企业中即关闭企业内网防火墙
②ntpdate ntp1.aliyun.com同步主库和从库的时间
③配置[主库master]:
vim /etc/my.cnf 打开主库marker配置文件[mysqld]模块下修改
50行,log-bin=mysql-bin 原本就存在,无需修改
51行,log-slave-updates=true 开启从日志binlog
57行,server-id =1 主库原本是1,暂不修改,(从库改成不同数值即可)
/etc/init.d/mysqld restart 重启数据库
mysql -uroot -p0 登录mysql主库,开始给服务器授权
grant replication slave on *.* to 'myslave'@'192.168.71.%' identified by '123123'; 创建从库账户myslave,密码123123
flush privileges;
show master status;
④配置[从库slave]:
vim /etc/my.cnf 打开从库slave配置文件[mysqld]模块下修改
50行,relay-log=relay-log-bin
51行,relay-log-index=slave-relay-bin.index
57行,server-id =2 从库数值改为2(主库值1,从库与主库不同数值即可)
/etc/init.d/mysqld restart 重启数据库
mysql -uroot -p0 登录mysql从库
change master to master_host='192.168.71.143',master_user='myslave',master_passwordd='123123',master_log_file='mysql-bin.000012',master_log_pos=338;
start slave; 授权从库进行主从复制,此处ip为192.168.71.143是主库master的ip
show slave status \G; 检验从库状态,\G竖向显示,方便观察用;(结果第12和13行显示I/O线程和SQL均执行中即正确,如下图示)
⑤检验:
[主库master]:
create database yun; 创建名为yun的库
show databases; 查到名为yun的库创建成功
[从库slave]:
show databases; 查到主库的sql语句已同步到从库并执行了,即主从复制可以成功运行。
注意:①此时主库同步到从库的都是主库logbin记录的能改变数据的操作,此日志也叫二进制日志②一旦主库执行删库操作,也将同步到从库并执行删库,非常危险,所以整个数据库仍需做好备份工作,最好是rsync+inotify实时备份)