mysql--主从复制

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: mysql--主从复制

前戏


当我们的网站部署到生产环境之后,如果只有一个数据库,当这个数据库宕机之后,用户就访问不了我们的网站了,这会给公司带来很大的损失。那我们想,可不可以有两个或多个数据库,里面的数据都是一样的,当一个数据库宕机之后,人工切换到备份数据库,这样就不会大大的减少公司的损失。

MySQL数据库的主从复制方案,是其自带的功能,并且主从复制并不是复制磁盘上的数据库文件,而是通过binlog日志复制到需要同步的从服务器上。

MySQL数据库支持单向、双向、链式级联等不同业务场景的复制。在复制的过程中,一台服务器充当主服务器(master),接收来自用户的内容更新,而一个或多个其他的服务器充当从服务器(slave),当接收来自master上binlog文件的日志内容,解析出SQL语句。重新更新到slave,使得主从服务器数据达到一致。

主从复制的逻辑有以下几种

一主一从,单向主从同步模式,只能在master端写入数据。

一主多从

双主主复制逻辑架构,此架构可以在Master1或Master2进行数据写入,或者两端同事写入(特殊设置)

在生产环境中,MySQL主从复制都是异步的复制方式,既不是严格的实时复制,但是给用户的体验都是实时的。MySQL主从复制集群功能使得MySQL数据库支持大规模高并发读写成为可能,且有效的保护了服务器宕机的数据备份。

利用复制功能当Master服务器出现问题时,我们可以人工的切换到从服务器继续提供服务,此时服务器的数据和宕机时的数据几乎完全一致。

复制功能也可用做数据备份,但是如果人为的执行drop,delete等语句删除,那么从库的备份功能也就失效了。


主从复制实现原理


上图可以分为以下步骤

  • master是主库,用户可以往这里读写数据。
  • master将变动的数据,写入到一个binlog中,记录数据库的sql变化
  • slave服务器,指定和谁同步,然后slave开启一个线程,去读主库的binlog中的sql变动记录
  • 从服务器将那些sql变动写入到自己的中继日志中,然后在将这些sql在slave本机在执行一次


master主库配置


环境准备:

准备两台服务器,安装两个mariadb

1.开启binlog功能,修改/etc/my.cnf

vim /etc/my.cnf #写入

[mysqld]
server-id=1   #指明主库的身份id为1
log-bin=mysqls14-bin   #指明binlog的日志名

server-id服务的唯一标识(主从之间都必须不同);log-bin启动二进制日志名称为mysql-bin,可以自己定义

2.修改了配置文件,重启mariadb,使得binlog生效

systemctl restart mariadb

3.登录mysql,检查主库的状态

show master status;

4.创建一个用户,用于进行主从同步

create user 'kangchen'@'%' identified by 'kangchen666';

5.授予账号权限,授予一个从库的身份权限

grant replication slave on *.* to 'kangchen'@'%';

6.锁定mysql的表,防止数据写入

flush table with read lock;

7.主从同步,将从库与主库的数据,保持一致后,它俩都在同一个起跑线,然后解除锁表,一同写入数据,保证数据一致性

# 1.导出当前的数据,用于slave机器导入数据,保证在一个起始点
mysqldump -u root -p --all-databases > /data/db.dump
# 2.将此db.dump文件远程传输给 slave机器,用于导入
scp /data/db.dump  root@192.168.12.87:/tmp/
# 3.登录slave从库,导入主库的数据信息
mysql >  source /tmp/db.dump 
# 4.查看主库和从库的信息,是否一致
show databases;

8.查看主库的状态信息,binlog信息

show master status;

File是二进制日志文件名,Position 是日志开始的位置。后面从库会用到 后面从库会用到 后面从库会用到!!!!!!

9.解锁表,开始主从同步

unlock tables;

到此为止,主库已经设置完成了,接下来我们设置从库


slave从库配置


数据库的server-id在主从复制体系内是唯一的,Slave的server-id要与主库和其他从库不同,并且注释掉Slave的binlog参数。

1.在/etc/my.cnf当中写入server-id ,并注释掉binlog参数

vim /etc/my.cnf

[mysqld]
server-id=3

2.重启myariadb

systemctl restart mariadb

3.查看slave机器的身份信息

show variables like 'server_id';
show variables like 'log_bin';

4.通过命令,开启主从同步技术

change master to master_host='192.168.12.96',
master_user='kangchen',
master_password='kangchen666',
master_log_file='mysqls14-bin.000001',
master_log_pos=671;

5.开启slave

start slave;

6.检查slave状态,检查两条参数,如果都是yes,即主从ok

show slave status\G;   # 执行这行代码查看下面两行信息
Slave_IO_Running: Yes
 Slave_SQL_Running: Yes

此时可以在主库中写入数据,查看从库中是否生成了记录

注意此处还未配置从库的只读模式,只需在slave服务器上配置/etc/my.cnf,加上以下配置,并且在slave上创建普通用户,使用普通用户主从同步即可达到只读的效果

[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
log-error=/var/log/mysqld.log
server-id=3
read-only=true
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

如果用root用户,无法达到readonly。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
28天前
|
SQL 关系型数据库 MySQL
mysql主从复制概述和配置
【10月更文挑战第22天】MySQL 主从复制是一种将主服务器的数据复制到一个或多个从服务器的技术,实现读写分离,提高系统性能和可用性。主服务器记录变更日志,从服务器通过 I/O 和 SQL 线程读取并应用这些变更。适用于读写分离、数据备份和恢复、数据分析等场景。配置步骤包括修改配置文件、创建复制用户、配置从服务器连接主服务器并启动复制进程。
|
1月前
|
监控 关系型数据库 MySQL
深入了解MySQL主从复制:构建高效稳定的数据同步架构
深入了解MySQL主从复制:构建高效稳定的数据同步架构
120 1
|
22天前
|
存储 关系型数据库 MySQL
MySQL主从复制原理和使用
本文介绍了MySQL主从复制的基本概念、原理及其实现方法,详细讲解了一主两从的架构设计,以及三种常见的复制模式(全同步、异步、半同步)的特点与适用场景。此外,文章还提供了Spring Boot环境下配置主从复制的具体代码示例,包括数据源配置、上下文切换、路由实现及切面编程等内容,帮助读者理解如何在实际项目中实现数据库的读写分离。
MySQL主从复制原理和使用
|
22天前
|
SQL 关系型数据库 MySQL
Mysql中搭建主从复制原理和配置
主从复制在数据库管理中广泛应用,主要优点包括提高性能、实现高可用性、数据备份及灾难恢复。通过读写分离、从服务器接管、实时备份和地理分布等机制,有效增强系统的稳定性和数据安全性。主从复制涉及I/O线程和SQL线程,前者负责日志传输,后者负责日志应用,确保数据同步。配置过程中需开启二进制日志、设置唯一服务器ID,并创建复制用户,通过CHANGE MASTER TO命令配置从服务器连接主服务器,实现数据同步。实验部分展示了如何在两台CentOS 7服务器上配置MySQL 5.7主从复制,包括关闭防火墙、配置静态IP、设置域名解析、配置主从服务器、启动复制及验证同步效果。
Mysql中搭建主从复制原理和配置
|
2月前
|
存储 关系型数据库 MySQL
分析MySQL主从复制中AUTO_INCREMENT值不一致的问题
通过对 `AUTO_INCREMENT`不一致问题的深入分析和合理应对措施的实施,可以有效地维护MySQL主从复制环境中数据的一致性和完整性,确保数据库系统的稳定性和可靠性。
99 6
|
2月前
|
存储 关系型数据库 MySQL
分析MySQL主从复制中AUTO_INCREMENT值不一致的问题
通过对 `AUTO_INCREMENT`不一致问题的深入分析和合理应对措施的实施,可以有效地维护MySQL主从复制环境中数据的一致性和完整性,确保数据库系统的稳定性和可靠性。
65 1
|
2月前
|
关系型数据库 MySQL Java
MySQL主从复制实现读写分离
MySQL主从复制(二进制日志)、 Sharding-JDBC实现读写分离
MySQL主从复制实现读写分离
|
3月前
|
SQL 关系型数据库 MySQL
说一下MySQL主从复制的原理?
【8月更文挑战第24天】说一下MySQL主从复制的原理?
62 0
|
3月前
|
存储 关系型数据库 MySQL
实战!MySQL主从复制一键搭建脚本分享
实战!MySQL主从复制一键搭建脚本分享
68 2
|
3月前
|
SQL 关系型数据库 MySQL
在Linux中,mysql 如何减少主从复制延迟?
在Linux中,mysql 如何减少主从复制延迟?