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

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
简介: 深入浅出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;

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
关系型数据库 MySQL Java
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
【YashanDB知识库】原生mysql驱动配置连接崖山数据库
|
7月前
|
Ubuntu 安全 关系型数据库
安装与配置MySQL 8 on Ubuntu,包括权限授予、数据库备份及远程连接指南
以上步骤提供了在Ubuntu上从头开始设置、配置、授权、备份及恢复一个基础但完整的MySQL环境所需知识点。
862 7
|
7月前
|
SQL 监控 关系型数据库
查寻MySQL或SQL Server的连接数,并配置超时时间和最大连接量
以上步骤提供了直观、实用且易于理解且执行的指导方针来监管和优化数据库服务器配置。务必记得,在做任何重要变更前备份相关配置文件,并确保理解每个参数对系统性能可能产生影响后再做出调节。
755 11
|
SQL 关系型数据库 MySQL
mysql主从复制概述和配置
【10月更文挑战第22天】MySQL 主从复制是一种将主服务器的数据复制到一个或多个从服务器的技术,实现读写分离,提高系统性能和可用性。主服务器记录变更日志,从服务器通过 I/O 和 SQL 线程读取并应用这些变更。适用于读写分离、数据备份和恢复、数据分析等场景。配置步骤包括修改配置文件、创建复制用户、配置从服务器连接主服务器并启动复制进程。
473 1
|
Ubuntu 关系型数据库 MySQL
在Ubuntu 22.04上配置和安装MySQL
以上就是在Ubuntu 22.04上配置和安装MySQL的步骤。这个过程可能看起来有点复杂,但只要按照步骤一步步来,你会发现其实并不难。记住,任何时候都不要急于求成,耐心是解决问题的关键。
1428 31
|
11月前
|
关系型数据库 MySQL Java
安装和配置JDK、Tomcat、MySQL环境,以及如何在Linux下更改后端端口。
遵循这些步骤,你可以顺利完成JDK、Tomcat、MySQL环境的安装和配置,并在Linux下更改后端端口。祝你顺利!
624 11
|
关系型数据库 MySQL Linux
CentOS 7系统下详细安装MySQL 5.7的步骤:包括密码配置、字符集配置、远程连接配置
以上就是在CentOS 7系统下安装MySQL 5.7的详细步骤。希望这个指南能帮助你顺利完成安装。
3064 26
|
SQL 关系型数据库 MySQL
seatunnel配置mysql2hive
本文介绍了SeaTunnel的安装与使用教程,涵盖从安装、配置到数据同步的全过程。主要内容包括: 1. **SeaTunnel安装**:详细描述了下载、解压及配置连接器等步骤。 2. **模拟数据到Hive (fake2hive)**:通过编辑测试脚本,将模拟数据写入Hive表。 3. **MySQL到控制台 (mysql2console)**:创建配置文件并执行命令,将MySQL数据输出到控制台。 4. **MySQL到Hive (mysql2hive)**:创建Hive表,配置并启动同步任务,支持单表和多表同步。
|
存储 Oracle 关系型数据库
MySQL 8.4 配置SSL组复制(八个步骤)
MySQL 8.4 配置SSL组复制(八个步骤)
920 0
|
关系型数据库 MySQL 数据安全/隐私保护
docker应用部署---MySQL的部署配置
这篇文章介绍了如何使用Docker部署MySQL数据库,包括搜索和拉取MySQL镜像、创建容器并设置端口映射和目录映射、进入容器操作MySQL,以及如何使用外部机器连接容器中的MySQL。
docker应用部署---MySQL的部署配置

推荐镜像

更多