马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在正式操作前,先说一下数据库架构的作用(纯个人理解,有不同理解的家人们可以把想法打在评论区):
在一些频繁调用数据库读取数据的场景下,单个数据库的负载有限,大概会扛不住奔溃,以是我们可以通过负载均衡和双主架构来分流,减轻服务器压力;又大概用主从来做读写分离,以增加读写速率;同时主从架构也可以在主数据库出问题后实时让从数据库顶替主数据库工作,从而淘汰对业务的影响,我的恩师之前常说的一句话就是,统统工作都是围绕业务开展的。
mysql5.7版本的安装及启动
#这个命令是到mysql官网下载MySQL 5.7社区版的rpm包
wget http://repo.mysql.com/mysql57-community-release-el7.rpm
#安装好后会生成相应的yum源(最好再备一个阿里源和阿里的epel源,能极大的加快下载速率)
rpm -ivh mysql57-community-release-el7.rpm
#下面的命令是禁用公钥检测地址(不禁用的话,需要安装公钥包,且8次只有1次能成功,别问我咋知道的)
sed -ri '/gpgcheck/s|1|0|g' /etc/yum.repos.d/mysql-community.repo
sed -ri '/gpgkey/d' /etc/yum.repos.d/mysql-community.repo
下载
yum install mysql-server
安装完成后,使用启动命令将其启动并通过查察端口验证
systemctl enable --now mysqld
netstat -nutlp | grep 3306
5.7版本的MySQL启动后默认的管理员密码在和日记里面,以是第一次登录要到日记里找密码
grep -i "password" /var/log/mysqld.log
由于第一次的登录密码是随机的,以是为方便以后再次登录,以是进去后先修改下密码,然退却出登录
mysql -u root -p
alter user 'root'@'localhost' identified by 'WWW.1.com';
到此,我们的第一台服务器上的mysql就安装好了,然后按同样的步骤到另一个服务器上同样安装mysql(我这里的俩个服务器ip分别是192.168.175.40和30)
主从(双主)复制原理
我认为主从复制就是“从库”把“主库”里的数据复制一份到本身身上,而且复制的速率越快
,效果越好,而这其中的三个关键要素分别是:
1.用户:众所周知,数据库是通过用户才能毗连的,以是“从库”想要到“主库”上拿数据复制,在“主库”上必须有一个可以让“从库”使用的用户才行
2.日记文件:有俩个日记文件很重要,一个叫二进制日记(Binary log),一个叫中继日记(relay log),二进制日记用来记录数据库里发生的所有写数据操作(增,删,改sql),而中继日记则是记录“从库”从“主库”的二进制日记里复制过来所有写数据操作(增,删,改sql)
3.线程:I/O thread线程和SQL thread线程,一个毗连“主库”,一个毗连“从库”
以上是大抵的原理,以下的解释更加具体一些;
在“主库”开启二进制日记的环境下,“从库”开启IO线程和SQL线程,由于二进制日记里记录了“主库”所有的写数据操作,以是“从库”上的IO线程通过“主库”提供的用户到“主库”的二进制文件里读取写数据操作,然跋文录到本身的中继日记中,同时,“从库”上的SQL线程会把中继日记里的这些写操作拿到本身身上再执行一次,以到达数据同步的目标
以上就是主从复制的根本原理 ,而双主和主从(一个主一个从)的区别就是俩个数据库互为主从。
主从(双主)架构的搭建
先以192.168.175.30为“主”库,192.168.175.40为“从”库
1.环境准备
网络互通,时间同步
setenforce 0
systemctl stop firewalld.service
iptables -F
以上命令执行完也不肯定可以通,因系统和环境而异
数据库版本要一致
mysql --version
配置文件添加配置项
#数据库配置文件
vim /etc/my.cnf
#此配置俩个数据库要不一样,是用来区分主从的ID
server_id=10
#此配置是开启二进制日记文件,名字可自定义,默认不加路径的话生成在数据目次下,现实中由于此文件较为重要,主从复制,备份恢复都要依靠它,以是发起把此文件创建在单独挂载的一块盘上
log_bin=master
“主”库上准备一个可以供“从库”使用的用户,名字自定义,不要冲突即可
#这是sql语句,不是shell命令,要进入到数据库里执行
create user 'slave'@'192.168.175.40' identified by 'WWW.1.com';
给用户分配权限
grant replication slave on *.* to 'slave'@'192.168.175.40';
留意 :为了方便截图,以是我用ssh命令远程执行查察的,大家现实中直接切换到另一服务器窗口执行命令即可,另有sql语句也是为了方便截图,才用的非交互式命令查察的,不相识的要到数据库里面再执行sql,否则会报错
做完以上操作,我们搭建主从的根本环境就已经准备好了
2.在“从库”开启线程,与“主库”形成主从关系
登录数据库(发起不要如许明文登录,不安全)
mysql -uroot -pWWW.1.com
“主库”的地址,“从库”使用哪个账号登录“主库”,IO线程到“主”库的哪个二进制日记里的哪个位置开始读取写操作
change master to
master_host="192.168.175.30",
master_user="slave",
master_password="WWW.1.com",
master_log_file="master.000003",
master_log_pos=5249;
开启IO线程和Sql线程
start slave;
查察主从状态信息
show slave status\G;
当IO线程和SQL线程都成功开启则说明主从关系建立成功,“从”库可以实时的到“主”库里拿数据到本身身上了
3.验证测试
留意:1、如果“从”库同步数据时选择“主”库的二进制日记中的节点是最新的,就不要做相悖的测试操作,尽量先手动将“主”库的备份数据导入到“从”库,否则会导致架构崩塌,好比不导入备份数据的话,删除“主”库中的一张表,而“从”库中没有这个表,就会报错影响SQL线程;2、如果是旧节点,则要等一会,查察数据是否同步至最新,再进行测试;3、如果是新库,忽略此条信息
我们在“主”库上创建一个库,然后查察是否可以同步到“从”库
可以看到在“主”库上创建的库,表都可以在“从”库上直接查察到
4.双主的建立
双主实在就是在主从架构的基础上建立的,主从数据库建立好后可以在代码里大概通过一些中央件实现读写分离,大概就单独把“从”库当作备用数据库,主库挂了可以临期间替一下,毕竟大抵的数据是一样的,但是替换使用需要配置故障转移大概手动替换,比较贫苦,以是基于省事儿和高可用的思想,可以用做负载均衡的调度器(F5,Nginx,Haproxy等)配合双主数据库解决单点故障和服务器负载问题
双主的建立很简单,按上面的操作反着来一遍就行
#数据库配置文件(此项上面应该修改过了)
vim /etc/my.cnf
server_id=10
log_bin=slave
在原“从”库上准备一个可以供原“主”库使用的用户,名字自定义,不要冲突即可
create user 'master'@'192.168.175.30' identified by 'WWW.1.com';
grant replication slave on *.* to 'master'@'192.168.175.30';
在原“主库”开启线程,与原“从库”形成主从关系
留意:在建立原“从”库和原“主”库的双主关系时,选择原“从”库的最新的二进制日记中的最新节点开始数据复制
登录数据库(发起不要如许明文登录,不安全)
mysql -uroot -pWWW.1.com
原“从库”的地址,原“主库”使用哪个账号登录“主库”,IO线程到原“从”库的哪个二进制日记里的哪个位置开始读取写操作
change master to
master_host="192.168.175.40",
master_user="master",
master_password="WWW.1.com",
master_log_file="slave.000003",
master_log_pos=5249;
开启IO线程和Sql线程
start slave;
做完以上操作,我们搭建双主的根本环境就已经准备好了
查察主从状态信息
show slave status\G;
测试一下,在原“从”库上创建库,表看是否能够同步至原“主”库
至此,我们的双主数据库搭建完成
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |