数据库系列课程(01)-MySQL主从复制与数据备份

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 数据库系列课程(01)-MySQL主从复制与数据备份

1.MySQL数据库

MySQL作为世界上使用最为广泛的数据库之一,免费是其原因之一。但不可忽略的是它本身的功能的确很强大。随着技术的发展,在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求。此时数据库集群就很好的解决了这个问题了。

采用MySQL分布式集群,能够搭建一个高并发、负载均衡的集群服务器。在此之前我们必须要保证每台MySQL服务器里的数据同步。数据同步我们可以通过MySQL内部配置就可以轻松完成,主要有 主从(master slave )复制和主主复制

1.1 主从复制

在MySQL集群环境中,可以分为主节点与从节点,通过主从复制可以实现数据备份、故障转移、MySQL集群、高可用、读写分离等。

MySQL的主从复制是MySQL本身自带的一个功能,不需要额外的第三方软件就可以实现,其复制功能并不是copy文件来实现的,而是借助binlog日志文件里面的SQL命令实现的主从复制,可以理解为我再Master端执行了一条SQL命令,那么在Salve端同样会执行一遍,从而达到主从复制的效果

原理如下:

  1. 从库生成两个线程,一个I/O线程,一个SQL线程;
  2. I/O线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
  3. 主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
  4. SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;

2.主从复制环境配置

首先准备两台服务器:

服务器 ip
主数据库服务器 192.168.162.132
从数据库服务器 192.168.162.133

2.1 安装MySQL

在「192.168.162.132」和「192.168.162.133」上安装MySQL,此处不再详述,参考了文章:

安装完成,均可访问:

2.2 主MySQL服务器配置

1.配置my.cnf

vi /etc/my.cnf

新增以下内容:

server_id=132  ###服务器id
log-bin=mysql-bin   ###开启日志文件

2. 重启mysql服务

service mysqld restart
mysql -u root -p

3. 验证是否已经配置成功

能够查询对应配置文件中的server_id 说明已经配置成功:

show variables like '%server_id%';

4.能够看到同步的文件,和行数说明已经配置成功

show master status;

2.3 从MySQL服务器配置

1.配置my.cnf

vi /etc/my.cnf

配置内容如下:

server_id=133  ###从服务器server_id
log-bin=mysql-bin  ###日志文件同步方式
binlog_do_db=test   ###同步数据库

2.重启mysql服务

service mysqld restart
mysql -u root -p

3.验证是否已经配置成功

能够查询对应配置文件中的server_id 说明已经配置成功

show variables like '%server_id%';

2.4 主从复制测试

1.从服务器同步主服务器配置

先查看主服务器状态:

show master status;

从服务器配置主服务器:

CHANGE MASTER TO master_host = '192.168.162.132',
master_user = 'root',
master_password = '123456',
master_log_file = 'mysql-bin.000001',
master_log_pos = 1148;

开始同步:

start slave;

4.查询同步状态

SHOW SLAVE STATUS

显示正在等待主节点发送:

2. 主服务器创建test数据库,新建表并插入数据:

create database test;
use test;
CREATE TABLE `t_user` (
  `uuid` VARCHAR ( 200 ) NOT NULL,
  `name` VARCHAR ( 50 ) DEFAULT NULL,
  `age` INT ( 11 ) DEFAULT NULL,
  `sex` VARCHAR ( 10 ) DEFAULT NULL,
PRIMARY KEY ( `uuid` ) 
);
INSERT INTO `test`.`t_user`(`uuid`, `name`, `age`, `sex`) VALUES ('0000-0000-0000-0001', 'zhangsan', 18, '0');
INSERT INTO `test`.`t_user`(`uuid`, `name`, `age`, `sex`) VALUES ('0000-0000-0000-0002', 'lisi', 20, '0');

3.验证

可以看到从服务器192.168.162.133已经从主服务器192.168.162.132里同步内容过来了:

现在我在主服务器添加一条数据:

INSERT INTO `test`.`t_user`(`uuid`, `name`, `age`, `sex`) VALUES ('0000-0000-0000-0003', 'wangwu', 30, '0');

可以看到从服务器133马上从132同步数据过去了。

2.4 注意事项

1. UUID冲突问题

检查从服务器复制功能状态

SHOW SLAVE STATUS

如果在查询的日志中,出现错误:

Fatal error: The slave I/O thread stops because

master and slave have equal MySQL server UUIDs; these UUIDs must be

different for replication to work.

这是因为服务器克隆的时候交UUID产生了重复

解决办法(删除auto.cnf文件):

cd /var/lib/mysql
rm -rf auto.cnf

然后重启服务器即可:

service mysqld restart

2. 停止同步

另外停止从服务器同步的命令:

stop slave;

总结

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
8天前
|
关系型数据库 MySQL 分布式数据库
《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)
《MySQL 简易速速上手小册》第6章:MySQL 复制和分布式数据库(2024 最新版)
45 2
|
5天前
|
SQL 存储 关系型数据库
数据库开发之mysql前言以及详细解析
数据库开发之mysql前言以及详细解析
14 0
|
2天前
|
缓存 NoSQL 关系型数据库
在Python Web开发过程中:数据库与缓存,MySQL和NoSQL数据库的主要差异是什么?
MySQL与NoSQL的主要区别在于数据结构、查询语言和可扩展性。MySQL是关系型数据库,依赖预定义的数据表结构,使用SQL进行复杂查询,适合垂直扩展。而NoSQL提供灵活的存储方式(如JSON、哈希表),无统一查询语言,支持横向扩展,适用于处理大规模、非结构化数据和高并发场景。选择哪种取决于应用需求、数据模型及扩展策略。
10 0
|
10天前
|
SQL 关系型数据库 MySQL
MySQL环境搭建——“MySQL数据库”
MySQL环境搭建——“MySQL数据库”
|
10天前
|
SQL NoSQL 关系型数据库
初识MySQL数据库——“MySQL数据库”
初识MySQL数据库——“MySQL数据库”
|
12天前
|
关系型数据库 MySQL 数据库
数据库基础(mysql)
数据库基础(mysql)
|
12天前
|
SQL 关系型数据库 数据库
【后端面经】【数据库与MySQL】SQL优化:如何发现SQL中的问题?
【4月更文挑战第12天】数据库优化涉及硬件升级、操作系统调整、服务器/引擎优化和SQL优化。SQL优化目标是减少磁盘IO和内存/CPU消耗。`EXPLAIN`命令用于检查SQL执行计划,关注`type`、`possible_keys`、`key`、`rows`和`filtered`字段。设计索引时考虑外键、频繁出现在`where`、`order by`和关联查询中的列,以及区分度高的列。大数据表改结构需谨慎,可能需要停机、低峰期变更或新建表。面试中应准备SQL优化案例,如覆盖索引、优化`order by`、`count`和索引提示。优化分页查询时避免大偏移量,可利用上一批的最大ID进行限制。
39 3
|
13天前
|
存储 关系型数据库 MySQL
【后端面经】【数据库与MySQL】为什么MySQL用B+树而不用B树?-02
【4月更文挑战第11天】数据库索引使用规则:`AND`用`OR`不用,正用反不用,范围中断。索引带来空间和内存代价,包括额外磁盘空间、内存占用和数据修改时的维护成本。面试中可能涉及B+树、聚簇索引、覆盖索引等知识点。MySQL采用B+树,因其利于范围查询和内存效率。数据库不使用索引可能因`!=`、`LIKE`、字段区分度低、特殊表达式或全表扫描更快。索引与NULL值处理在不同数据库中有差异,MySQL允许NULL在索引中的使用。
18 3
|
24天前
|
SQL 数据可视化 关系型数据库
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
轻松入门MySQL:深入探究MySQL的ER模型,数据库设计的利器与挑战(22)
105 0
|
24天前
|
存储 关系型数据库 MySQL
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)
轻松入门MySQL:数据库设计之范式规范,优化企业管理系统效率(21)