本文正在参加「技术专题19期 漫谈数据库技术」活动
起初学习数据库的时候,总是单库单表,后来开始学习后端服务,依然是对一个数据库操作,但是在工作当中,尤其近几年数据量倍增的场景下,单库实际上已经没有意义了。所以今天来聊聊基于后端服务的MySQL的主从备份吧。
读写分离
最初项目小的时候,我们习惯性的把数据放到一个数据库里,但是随着数据量的增加,数据库的压力变大,所以响应的时间越来越长,于是就开始思考如何解决这个问题,那么基于web考虑就衍生处理一个概念,读写分离:
由于数据库单纯的做查询或者插入效率要比同时做查询和插入效率高,那么大家就开始考虑能不能两个数据库,一个数据库负责读,一个数据库写,这样压力就小很多了,效率就搞起来了。
那么这个概念就是读写分离。
主从备份
上面的概念妙啊,但是,如果数据不能同步,那上面的概念就无从谈起了,为啥,因为读写分离的大前提就是数据一致,读出和写入数据如果不一致,那么读写分离就没有意义了,而MySQL提供了一个技术栈就是主从备份,如图:
所谓的主从备份是基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。因此,要进行复制,必须在主服务器上启用二进制日志。每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,并在本机上执行相同的更新。然后封锁并等待主服务器通知新的更新。从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。
配置
环境介绍
两台安装好mariadb服务的虚拟机指定master(主)和slave(从)服务,本例中:
- 主:192.168.49.156 centos 7.4
- 从: 192.168.49.158 centos 7.4
安装Mariadb
centos7 默认yum源有mariadb是mysql数据库的姊妹版本(这里涉及到了一段梗,我们后面聊),我们练习可以使用mariadb。
两台服务器都按照mariadb
#安装mariadb
yum install mariadb mariadb-server.x86_64 mariadb-devel.i686 -y
#启动mariadb
system start mariadb
mariadb默认模式下不适用密码就可以使用,我们需要配置mariadb的生产模式,默认yum安装的mariadb是一种宽松的开发模式,任何账号,不通过密码都可以进入。如果在生产环境需要开启生产模式,主从服务器都需要执行,mysql安全配置向导。
同样是两台配置:
mysql_secure_installation
master配置
#创建要进行备份的数据库
create database OurBlog charset=utf8;
#配置权限
grant replication slave on *.* to "root"@"%" identified by "111111" with grant option;
#刷新授权
flush privileges;
#选择使用要数据同步的库
use OurBlog;
#建表
create table article(id int primary key auto_increment,title char(32));
#数据库导出
cd /opt
mysqldump -h localhost -u root -p111111 OurBlog > OurBlog.sql
#使用scp将文件传递到slave的opt下
scp /opt/OurBlog.sql root@192.168.49.158:/opt
slave 操作
#slave上创建OurBlog数据库
mysql -uroot -p111111
create database OurBlog charset=utf8;
#将master传过来的库导入
mysql -h localhost -u root -p111111 OurBlog < /opt/OurBlog.sql
确认slave将master表成功导入
关闭主从服务器的防火墙和selinux
systemctl stop firewalld
setenforce 0
修改配置文件
master
vi /etc/my.cnf
保存
重启
systemctl restart mariadb
slave
进入slave然后操作
change master to master_host="192.168.43.250",master_user='root',master_password='111111',master_log_file='mysql-bin?.000001',master_log_pos=245;
启动slave
进入slave数据库
启动slave
start slave;
查看slave状态
show slave status \G
停止slave
stop slave;
master写入数据,slave查看数据
slave第一次查看需要重启mariadb服务,然后可以查看效果
本文正在参加「技术专题19期 漫谈数据库技术」活动