深入浅出MySQL(八) 超详细的MySQL主从配置

随着系统应用访问量逐渐增大,单台数据库读写访问压力也随之增大,当读写访问达到一定瓶颈时, 将数据库的读写效率骤然下降,甚至不可用;为了解决此类问题,通常会采用mysql集群,当主库宕机后,集群会自动将一个从库升级为主库,继续对外提供服务;那么主库和从库之间的数据是如何同步的呢?

在这里插入图片描述

结合上边的这张图来进行讲解。首先我们称呼主节点为Master,从节点为Slave。
首先Slave 上面的IO线程发起请求,连接上 Master,并从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容。然后Master 接收到来自 Slave 的 IO 线程的请求后,通过负责复制的 IO 线程根据请求信息读取指定日志指定位置之后的日志信息,返回给 Slave 端的 IO 线程。Slave 的 IO 线程接收到信息后,将接收到的日志内容依次写入到 Slave 端的Relay Log文件(mysql-relay-bin.xxxxxx)的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master- info文件中。

当IO线程处理完毕之后,Slave 的 SQL 线程检测到 Relay Log 中新增加了内容后,会马上解析该 Log 文件中的内容成为在 Master 端真实执行时候的那些可执行的SQL语句,并在自身执行这些 SQL。这样,实际上就是在 Master 端和 Slave 端执行了同样的SQL,所以两端的数据就达成了数据的一致性。

关于mysql的主从配置超详细笔记:

实验环境:两台centos7虚拟机之间进行主从配置

主机:192.168.43.138
从机:192.168.43.135

首先是需要在主机上边安装mysql数据库。

[root@localhost ~]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

使用上面的命令就直接下载了安装用的Yum Repository。

[root@localhost ~]# yum -y install mysql57-community-release-el7-10.noarch.rpm

接着就可以开始安装MySQL服务器。

[root@localhost ~]# yum -y install mysql-community-server

这些基本的安装步骤都比较简单,按着命令巧就好了。装好之后大概如下图所示:
在这里插入图片描述

到这里,主机的mysql就已经安装完成了。

安装完毕数据库之后,通过服务命令来进行启动:

[root@localhost ~]# systemctl start mysqld.service

然后查看一下状态:

[root@localhost ~]# systemctl status mysqld.service

在这里插入图片描述

此时的mysql已经启动了,但是初始化的密码值需要通过日志来查看:

[root@localhost ~]# grep "password" /var/log/mysqld.log yourpassword

在这里插入图片描述
输入密码,登录mysql:

重置一次密码,方便后边使用。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';

(注意过于简单的密码可能会有提示)
原因是因为MySQL有密码设置的规范,具体是与validate_password_policy的值有关:
在这里插入图片描述

最后是刷新一遍配置文件:

mysql> flush privileges;

移除原来的yum文件:

[root@localhost ~]# yum -y remove mysql57-community-release-el7-10.noarch

同样在从机上边也进行一次相同的操作,保证主机和从机的mysql版本属性完全一致。

为了方便后边的操作,小编使用navicat来进行客户端的操作:
为了能让外部机器进行连接,因此需要开通mysql的连接访问权限:

mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION;

记得刷新一遍配置文件:

mysql> flush privileges;

这样我们的基本环境就已经搭建完毕了:
在这里插入图片描述

接下来就是主从配置的核心部分了:

主节点的配置

vi /etc/my.cnf
log-bin = mysql-bin
server-id =1
innodb-file-per-table =ON
skip_name_resolve=ON

然后重启mysql:

[root@idea-centos /]# service mysqld restart

然后登录mysql,查看二进制日志的开启情况:

mysql> show global variables like '%log_bin%';

在这里插入图片描述
查看主节点的二进制日志信息:
mysql> show master logs;
在这里插入图片描述

查看主节点的server id

mysql> SHOW GLOBAL VARIABLES LIKE '%server%';

在这里插入图片描述

接着,需要在主mysql上创建一个拥有复制权限的用户:
这里的ip是指从节点的ip

mysql> GRANT REPLICATION SLAVE,REPLICATION 
CLIENT ON *.* TO 'repluser'@'192.168.43.135' 
IDENTIFIED BY 'yourpassword';

记得刷新一遍配置文件:

mysql> flush privileges;

然后就是从节点的配置信息了:

[root@idea-centos mysql]# vi /etc/my.cnf

从节点的配置

relay-log=relay-log
relay-log-index=relay-log.index
server-id=2
innodb_file_per_table=ON
skip_name_resolve=ON

重启mysql

[root@idea-centos /]# service mysqld restart

同样登录从节点的mysql之后,查看相应的server信息和日志信息:

mysql> show global variables like "%relay_log%";

在这里插入图片描述

mysql> show global variables like "%log_bin%";

在这里插入图片描述

mysql> show global variables like "%server%";

在这里插入图片描述
然后需要在从节点上配置访问主节点的参数信息:
在这里插入图片描述

注意这里的master logs信息需要在主机上边进行访问,然后MASTER_LOG_FILE和MASTER_LOG_POS要和最新的日志信息做匹配

mysql> CHANGE MASTER TO MASTER_HOST='192.168.43.138',MASTER_USER='repluser',MASTER_PASSWORD='yourpassword', MASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=626;

在这里插入图片描述

这个时候,我们可以查看从节点的状态信息。

mysql> show slave status\G

在这里插入图片描述

这个时候,从节点上边的IO线程和SQL线程都是出于no状态,并未开启。
启动从节点的io和sql线程:

mysql> start slave;

在这里插入图片描述
再次查看状态,io,sql线程均启动成功。

mysql> show slave status\G

在这里插入图片描述

接下来就可以进行测试来验证是否同步了:
首先是在主节点上创建数据库:
在这里插入图片描述
再去从节点那边查看数据库信息:
在这里插入图片描述
这个时候会发现,主从之间的数据进行了同步化操作。

再去查看一下相应的主从日志信息:
在这里插入图片描述
在这里插入图片描述

会发现两者之间的log_pos数值一致。

主从复制架构虽然能够保证从节点自动复制主节点的数据,能够自动保证两者之间的数据一致性。为了防止让从节点的数据库被外界进行写操作,从而导致篡改了主数据库的数据,我们需要对从节点的数据库进行权限控制。
mysql> flush tables with read lock;

以上是小编自己在虚拟机环境中搭建主从同步配置的记录过程,希望各位读者喜欢。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值