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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 深入浅出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;

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
存储 SQL 关系型数据库
创建并配置RDS实例
在阿里云上创建RDS实例涉及登录控制台、进入RDS管理页面、创建实例、选择数据库引擎和版本、配置实例规格与存储、设定网络与安全组、设置实例信息、确认订单并支付,最后初始化数据库。操作步骤可能因界面更新或数据库引擎不同略有差异。
19 1
|
1月前
|
关系型数据库 MySQL 开发工具
MySQL5.7主从配置(Docker)
MySQL5.7主从配置(Docker)
730 0
|
1月前
|
SQL 关系型数据库 MySQL
解决MySQL主从慢同步问题的常见的解决方案:
解决MySQL主从慢同步问题的方法有很多,以下是一些常见的解决方案: 1. 检查网络连接:确保主从服务器之间的网络连接稳定,避免网络延迟或丢包导致数据同步缓慢。 2. 优化数据库配置:调整MySQL的配置参数,如增大binlog文件大小、调整innodb_flush_log_at_trx_commit等参数,以提高主从同步性能。 3. 检查IO线程和SQL线程状态:通过SHOW SLAVE STATUS命令检查IO线程和SQL线程的状态,确保它们正常运行并没有出现错误。 4. 检查主从日志位置:确认主从服务器的binlog文件和位置是否正确,避免由于错误的日志位置导致同步延迟。 5.
129 1
|
2月前
|
存储 监控 关系型数据库
rds迁移前准备资源评估与配置
rds迁移前准备资源评估与配置
37 5
|
3月前
|
SQL 关系型数据库 MySQL
Mycat【Mycat部署安装(核心配置及目录结构、安装以及管理命令详解)Mycat高级特性(读写分离概述、搭建读写分离、MySQL双主双从原理)】(三)-全面详解(学习总结---从入门到深化)
Mycat【Mycat部署安装(核心配置及目录结构、安装以及管理命令详解)Mycat高级特性(读写分离概述、搭建读写分离、MySQL双主双从原理)】(三)-全面详解(学习总结---从入门到深化)
79 0
|
17天前
|
SQL 缓存 关系型数据库
mysql性能优化-慢查询分析、优化索引和配置
mysql性能优化-慢查询分析、优化索引和配置
83 1
|
23天前
|
缓存 关系型数据库 MySQL
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
MySQL查询优化:提速查询效率的13大秘籍(合理使用索引合并、优化配置参数、使用分区优化性能、避免不必要的排序和group by操作)(下)
|
17天前
|
SQL 关系型数据库 MySQL
mysql主从同步出错解决办法
mysql主从同步出错解决办法
12 0
|
1月前
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
15 1
|
1月前
|
弹性计算 关系型数据库 MySQL
rds子网配置
在阿里云中配置RDS子网涉及五个关键步骤:1) 创建或选择VPC作为私有网络环境;2) 在VPC内创建子网并确保IP地址不重叠;3) 关联路由表和安全组以控制流量及访问权限;4) 创建RDS实例时指定VPC和子网;5) 确保ECS实例与RDS在同一VPC或配置相应跨VPC访问,并调整安全组规则。这样可保障RDS与其他资源的通信及网络性能。
19 6