MySql主从复制的部署实现

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 🍅程序员小王的博客:程序员小王的博客🍅 欢迎点赞 👍 收藏 ⭐留言 📝🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕🍅java自学的学习路线:java自学的学习路线🍅参考文献:mysql官网

一、Mysql主从复制


1、什么是主从复制

简单来说就是保证主SQL(Master)和从SQL(Slave)的数据是一致性的,向Master插入数据后,Slave会自动从Master把修改的数据同步过来(有一定的延迟),通过这种方式来保证数据的一致性,就是主从复制

2、主从复制解决的问题

(1)高可用

因为数据都是相同的,所以当Master挂掉后,可以指定一台Slave充当Master继续保证服务运行

(2)负载均衡

(3)数据备份

主从就能很好的解决数据备份问题

(4)业务模块化

(5)高扩展


二、在两台机器上安装MySql

1、环境准备(本地还是在线都需要准备)

# 1.卸载mariadb,否则安装mysql会出现冲突
# 2.执行命令rpm -qa |grep mariadb
# 3.列出所有被安装的mariadb rpm 包;
# 4.执行命令rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

2、本地安装(5.6版本默认root没有密码)

# 0.上传下载好的软件包到系统中

# 0.执行本地安装包之前必须先安装vim
  yum install -y vim
# 1.安装步骤
  rpm -ivh perl-*
  rpm -ivh net-tools-2.0-0.22.20131004git.el7.x86_64.rpm
  rpm -ivh mysql-community-common-5.6.42-2.el7.x86_64.rpm
  rpm -ivh mysql-community-libs-5.6.42-2.el7.x86_64.rpm
  rpm -ivh mysql-community-client-5.6.42-2.el7.x86_64.rpm
  rpm -ivh mysql-community-server-5.6.42-2.el7.x86_64.rpm

3、在线安装

# 1.添加官方的yum源创建并编辑mysql-community.repo文件
  vi /etc/yum.repos.d/mysql-community.repo
# 2.粘贴以下内容到源文件中
  [mysql56-community]
    name=MySQL 5.6 Community Server
    baseurl=http://repo.mysql.com/yum/mysql-5.6-community/el/7/$basearch/
    enabled=1
    gpgcheck=0
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
    注意:如果需要安装mysql5.7只需要将baseurl修改即可 
      baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
# 3.安装mysql
  sudo yum install -y mysql-community-server   

4、设置root用户密码

# 1.启动mysql数据库
  [root@localhost mysql]# systemctl start mysqld
# 2.修改mysql数据库密码
  mysqladmin -u root -p password 回车 输入原始密码 在输入新的密码
  注意:5.7之前版本安装完成之后没有密码,mysql5.7之后的版本的初始密码是随机生成的,放在了 /var/log/mysqld.log
      使用命令 grep ‘temporary password’ /var/log/mysqld.log 读出来即可
      ROOT!Q2w
# 3.登录mysql
  [root@localhost mysql]# mysql -u root -p  

5、开启远程访问

# 1.安装完成mysql时,发现mysql数据库,不允许我们远程连接需要修改设置
# 2.登录mysql,并选择使用mysql数据库
# 3.查看mysql库中的所有表
# 4.查询user表
# 5.执行如下命令
  grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
# 6.刷新权限
  flush privileges;
# 7.重启服务
  systemctl restart mysqld
# 8.测试连接

三、Mysql主从部署

1、架构规划

  • 两个linux上都安装了mysql 5.6.51版本
  • 192.168.5.128 master 主节点
  • 192.168.5.129 slave 从节点

 

2、修改mysql的配置文件

注意:MySQL安装完成后不象SQL Server默认安装在一个目录,它的数据库文件、配置文件和命令文件分别在不同的目录

  • 数据库目录 :/var/lib/mysql/
  • 配置文件 :/usr/share/mysql(mysql.server命令及my.cnf配置文件)
[root@localhost mysql]#  vim /etc/my.cnf

3、分别在配置文件中加入如下配置

 

  mysql(master):
    server-id=1
    log-bin=mysql-bin
    log-slave-updates
    slave-skip-errors=all
  msyql(slave):
    server-id=2
    log-bin=mysql-bin
    log-slave-updates
    slave-skip-errors=all
    #注意:两个机器的server-id不能一致

主配置

[mysqld]
server-id=1
log-bin=mysql-bin
log-slave-updates
slave-skip-errors=all

从配置

[mysqld]
server-id=1
log-bin=mysql-bin
log-slave-updates
slave-skip-errors=all

4、重启mysql服务器

systemctl restart mysqld

5、登录mysql执行如下命令检测配置是否生效

  • 两个系统操作步骤一致
SHOW VARIABLES like 'server_id';

6、登录master节点执行如下命令

show master status;

7、 登录从节点执行如下命令:

change master to 
    master_host='192.168.5.128',
    master_user='root',
    master_password='root',
    master_log_file='mysql-bin.000001',
    master_log_pos=120;

8、开启从节点

1. start slave; 
2. stop  slave;

9、查看从节点状态

(1)查看从节点状态

mysql>   show slave status\G

  • 注意:
 1.出现 Slave_IO_Running: Connecting 和 Slave_SQL_Running: Yes 说明成功,
 2.如果在搭建过程出现错误,可以查看查看错误日志文件 cat /var/log/mysqld.log
 (我是因为克隆了虚拟机,所以他们的uuid一样了,
 解决办法参考:https://blog.csdn.net/lxypeter521/article/details/81866115)

(2)出错解决方案(不出错不管)

find / -name auto.cnf
  • 备份一份
mv /var/lib/mysql/auto.cnf  /var/lib/mysql/auto.cnf.bk
  • 重新启动mysql
service mysql restart
  • 重复上面步骤,启动成功

10、通过客户端工具进行测试

(1)测试内容:master节点建表,从节点查看

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for admin
-- ----------------------------
DROP TABLE IF EXISTS `admin`;
CREATE TABLE `admin`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `password` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
SET FOREIGN_KEY_CHECKS = 1;

(2)master建的表

(3)从表中自动创建admin表了

11、关闭主从复制(在从节点执行)

stop slave;
  • 注意:如果出现
#Slave I/O: 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. 
#Error_code: 1593错误
请执行如下命令,rm -rf /var/lib/mysql/auto.cnf删除这个文件,
之所以出现会出现这样的问题,是因为我的从库主机是克隆的主库所在的主机,
所以auto.cnf文件中保存的UUID会出现重复.


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