Centos7+Mariadb集群-主从配置介绍
近期一直在恶补Linux相关的知识,主要是就是学Linux下的基本日常应用服务器的配置及优化,今天我们主要介绍一下在Centos7下安装及配置MysqL 集群,说到集群,其实就是为了提高服务的高可用性。对于高可用的相关服务今天不是主要介绍内容,今天主要介绍MysqL的主从配置。对在Linux下的其他服务的介绍及服务高可用负载均衡我们将会在后期的文章中介绍。开始今天的介绍:Centos7+MysqL主从配置。
环境介绍:
Hostname:A-S
IP:192.168.5.21
Role:MysqL 主
Hostname:B-S
IP:192.168.5.22
Role:MysqL 从
其实从Centos7下MysqL已经被遗弃了,变为Mariadb了,当然功能及配置是一样的。比如我们在低版本下安装MysqL都需要执行以下命令:

yum install -y MysqL MysqL-server

我们通过查看安装信息,MysqL-server不可用的包
![clip_image001[4] clip_image001[4]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
我们最后看见安装陈公公给你了Mariadb的相关包信息
![clip_image001[6] clip_image001[6]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
Centos7中用MariaDB代替了MysqL数据库。好吧!那我们来安装MariaDB数据库吧!
运行yum install MariaDB-server MariaDB-client命令安装 MariaDB
yuminstallmariadb-servermariadb-client
![clip_image001[8] clip_image001[8]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
![clip_image001[10] clip_image001[10]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
安装完成
![clip_image001[12] clip_image001[12]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
我们通过rpm查看安装的相关信息
![clip_image001[14] clip_image001[14]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
启动mariadb数据库
systemctlstartmariadb
![clip_image001[16] clip_image001[16]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
接着运行MysqL_secure_installation配置MariaDB
我们可以根据自己的需求进行配置定义
![clip_image001[18] clip_image001[18]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
配置完成
![clip_image001[20] clip_image001[20]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
配置完成后,我们开始进入数据库
MysqL�Curoot�Cp
![clip_image001[22] clip_image001[22]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
查看数据库
showdatabases;
![clip_image001[24] clip_image001[24]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
我们创建一个测试数据库
createdatabaseDB1;
![clip_image001[26] clip_image001[26]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
![clip_image001[28] clip_image001[28]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
最后我们使用工具进行连接MysqL ,提示不允许该主机进行连接,因为MysqL默认是不让任何主机进行连接
![clip_image001[30] clip_image001[30]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
我们可以根据自己的配置设置运行那些主机及用户进行MysqL的连接;
如果我们需要配置任何主机都可以连接的话,可以使用一下命令
GRANTALLPRIVILEGESON*.*TO'root'@'%'IDENTIFIEDBY'youpassword'WITHGRANTOPTION; flushprivileges;
如果任何主机连接不需要密码的话可以下面
GRANTALLPRIVILEGESON*.*TO'root'@'%'IDENTIFIEDBY''WITHGRANTOPTION; flushprivileges;
我们下面简单的说几个日常的配置命令
许root用户在一个特定的IP进行远程登录,并具有所有库任何操作权限,具体操作如下: 在本机先使用root用户登录MysqL: MysqL -u root -p"youpassword" 进行授权操作: GRANT ALL PRIVILEGES ON *.* TO root@"192.168.x.x" IDENTIFIED BY "youpassword" WITH GRANT OPTION; 重载授权表: FLUSH PRIVILEGES; 退出MysqL数据库: exit
允许root用户在一个特定的IP进行远程登录,并具有所有库特定操作权限,具体操作如下: 在本机先使用root用户登录MysqL: MysqL -u root -p"youpassword" 进行授权操作: GRANT select,insert,update,delete ON *.* TO root@"192.168.x.x" IDENTIFIED BY "youpassword"; 重载授权表: FLUSH PRIVILEGES; 退出MysqL数据库: exit
具体就不多介绍了,继续下面的配置介绍
我们前面创建了一个数据库
createdatabasesDB1; showdatabases; useDB1; showtables;
![clip_image001[32] clip_image001[32]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
我们接下来创建一个表
CREATETABLEinfo(idint(30)NOTNULL,namevarchar(30)NOTNULL,sexvarchar(30)NOTNULL,mailVARCHAR(255)NOTNULL,PRIMARYKEY(id));
![clip_image001[34] clip_image001[34]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
showtables;
![clip_image001[36] clip_image001[36]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
插入几条数据
insertintoinfo(name,sex,mail)values('lisi','boy','lisi@abc.com');
insertintoinfo(name,mail)values('xiaoli','girl','xiaoli@abc.com');
![clip_image001[38] clip_image001[38]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
select*frominfo;
![clip_image001[40] clip_image001[40]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
我们也可以通过工具进行查看
![clip_image001[42] clip_image001[42]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
MysqL的安装及配置再次就介绍完了,最后我们简单的说一下,MysqL数据库数据文件位置/var/lib/MysqL/
![clip_image001[44] clip_image001[44]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
第一台数据库创建完后,我们就按照同样的方法安装及配置第二台MysqL服务器。再次就跳过了;方法同上完全一样;


注意:我们为了做主从,做第二台机器不需要创建表,只需要创建一个数据库即可(DB1),为了将Server1上的MysqL还原到Server2上。
到目前为止,Server1和Server2的数据库均安装完成;
所以现在我们需要将数据库进行备份及还原到从服务器上。MysqL的备份有很多方式,比如直接备份成一个.sql文件,或者备份成压缩文件,甚至我们也可以通过脚本进行备份。我们在此都说一下
我们首先查看数据库数据
![clip_image001[46] clip_image001[46]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
首先是备份
MysqLdump-hlocalhost-uroot-pdbname>dbname.sql MysqLdump-hlocalhost-uroot-pDB1>DB1.sql
![clip_image001[48] clip_image001[48]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
接下来我们在通过压缩的方式备份一下
MysqLdump-hlocalhost-uroot-pdbname|gzip>dbname.sql.gz MysqLdump-hlocalhost-uroot-pDB1|gzip>DB1.sql.gz
![clip_image001[50] clip_image001[50]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
接下来我们通过语句删除数据库中的所有数据
deletefromdbo.info;
![clip_image001[52] clip_image001[52]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
接下来我们进行还原一下;
我们首先通过默认备份进行还原,其实还原和备份的命令就有两个字符的区别
1.符号方向是反的,备份是大于号,还原是小于号。2.备份使用的是MysqLdump,还原使用的是MysqL
MysqL-hlocalhost-uroot-pDB1<DB1.sql
![clip_image001[54] clip_image001[54]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
还原后,我们查询数据库
![clip_image001[56] clip_image001[56]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
我们继续清空数据,然后使用压缩的格式进行还原;
![clip_image001[58] clip_image001[58]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
我们继续使用压缩的进行还原;
gunzip<DB12016-08-23.sql.gz|MysqL-uroot-pDB1
![clip_image001[60] clip_image001[60]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
还原完成
![clip_image001[62] clip_image001[62]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
备份还原介绍完后,我们就需要将Server1的MysqL备份数据给Server2拷贝一份及还原一份
scpDB1.sql root@192.168.5.22:/
![clip_image001[64] clip_image001[64]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
接下来我们需要还原命令将数据库还原到Server2上即可
![clip_image001[66] clip_image001[66]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
前期工作准备好后,接下来就进入重点,MysqL主从配置;
我们首先登陆到MysqL主服务器上,然后编辑MysqL的配置文件
vim/etc/my.cnf
![clip_image001[68] clip_image001[68]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
我们要添加以下内容;
注:一定要加入到加到MysqLd下面,如果加入的位置或者信息不对的话,执行show master status;结果为空;
#设置服务器ID,为1的表示为主服务器;如果服务器没有以下配置,添加,如果有就跳过。 server-id=1 #启动MySQ二进制日志系统,注意:如果原来的配置文件中已经有这一行,就不用再添加了。 log_bin=MysqL-bin? #需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行\ binlog-do-db=DB1 #不同步MysqL系统数据库 binlog-ignore-db=MysqL
![clip_image001[70] clip_image001[70]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
重启MysqL服务
sysmtectlrestartmariadb
![clip_image001[72] clip_image001[72]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
进入MysqL控制台
MysqL-uroot-p123456
查看数据库主机的配置文件状态
showmasterstatus;
查看主服务器,出现以下类似信息;如果看不见以下结果或者为空的话,说明my.cnf配置文件配置的有问题,请检查即可。
注意:这里记住File的值:MysqL-bin.000001和Position的值:245,后面会用到。
![clip_image001[74] clip_image001[74]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
有了主服务器的MysqL主机配置后,我需要在从服务器上进行配置了
配置MysqL从服务器的my.cnf文件;区别就是server-id不一样
vi/etc/my.cnf#编辑配置文件,在[MysqLd]部分添加下面内容 #设置服务器ID,为1的表示为主服务器,为2的表示为从服务器;如果服务器没有以下配置,添加,如果有就跳过。 server-id=2 #启动MySQ二进制日志系统,注意:如果原来的配置文件中已经有这一行,就不用再添加了。 log_bin=MysqL-bin? #需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行\ binlog-do-db=DB1 #不同步MysqL系统数据库 binlog-ignore-db=MysqL
![clip_image001[76] clip_image001[76]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
接下来配置slave,进入从服务器的MysqL控制台配置下:
MysqL-uroot-p#进入MysqL控制台 slavestop;#停止slave同步进程
![clip_image001[78] clip_image001[78]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
接下来通过以下命令来配置主从关系了;以下命令是在从服务器上操作的。
![clip_image001[80] clip_image001[80]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
changemastertomaster_host='主服务器',master_user='MysqL用户名',master_password='MysqL服务密码',master_log_file='File值',master_log_pos=Postion值; changemastertomaster_host='192.168.5.21',master_user='root',master_password='123456',master_log_file='MysqL-bin.000001',master_log_pos=254; 里面填写的信息是是在主服务器上执行showmasterstatus;的信息
![clip_image001[82] clip_image001[82]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
启动slave slavestart;
![clip_image001[85] clip_image001[85]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
最后我们查看主从同步是否正常
showslavestatus;
![clip_image001[87] clip_image001[87]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
最后我们测试数据,给主服务器数据表添加数据
![clip_image001[89] clip_image001[89]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)
然后在从服务器上进行查看
![clip_image001[91] clip_image001[91]](https://resources.devmax.cn/uploads/20230727/56fb61d239180047ad761436dff79454.png)