MySQL5.7x 主从复制
原文链接:https://blog.liuzijian.com/post/9f8ede8e-26de-75d6-6347.html
在MySQL中,主从复制(Master-Slave Replication)是一种常用的数据库复制技术,用于将主服务器(Master)的数据实时复制到一个或多个从服务器(Slave)。这有助于负载均衡、备份和高可用性。
前提条件
- 主服务器和从服务器的MySQL版本应兼容(最好相同版本)。
- 所有服务器时钟应该同步,可以使用
NTP确保时间一致性。 - 从服务器初始时的数据要与主服务器一致(可以通过备份恢复的方式实现)。
一、配置主服务器(Master)
编辑主服务器的MySQL配置文件
打开MySQL主服务器的配置文件 my.cnf 。添加或修改以下内容:
[mysqld]
server-id = 1 # 唯一的服务器ID,任意正整数,但需要在集群中唯一
log-bin = mysql-bin # 启用二进制日志,确保日志记录所有数据变更
binlog-do-db = my_database # 要复制的数据库(可以指定多个,也可以省略)
server-id:每个服务器都需要有唯一的server-id。log-bin:启用二进制日志,主从复制就是基于二进制日志的。binlog-do-db:指定要复制的数据库,可以指定多个数据库。省略这行会复制所有数据库。
重启MySQL服务:
sudo systemctl restart mysqld
创建用于复制的用户
在主服务器上登录MySQL并创建一个用于复制的用户。CREATE USER 'slave'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; FLUSH PRIVILEGES;
这里创建了一个名为
slave的用户,密码为password,并授予了复制权限。获取主服务器的状态信息
在主服务器上运行以下命令,记录输出的信息:SHOW MASTER STATUS;
输出类似以下内容:
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 12345 | my_database | |
+------------------+----------+--------------+------------------+
File:二进制日志的文件名。Position:当前日志的偏移量。这两个值将在配置从服务器时使用。
二、配置从服务器(Slave)
编辑从服务器的MySQL配置文件
打开从服务器的配置文件my.cnf,添加或修改如下内容:
[mysqld]
server-id = 2 # 唯一的服务器ID,与主服务器不同
relay-log = mysql-relay # 中继日志,用于存储从主服务器接收到的日志
重启从服务器的MySQL服务:
sudo systemctl restart mysqld
初始化从服务器
登录从服务器的MySQL,并执行以下步骤来设置复制:
CHANGE MASTER TO
MASTER_HOST='master_ip_address',
MASTER_USER='replicator',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001', -- 从SHOW MASTER STATUS获取的日志文件名
MASTER_LOG_POS=12345; -- 从SHOW MASTER STATUS获取的偏移量
在这里,
master_ip_address是主服务器的IP地址,MASTER_LOG_FILE和MASTER_LOG_POS是前面SHOW MASTER STATUS命令中看到的值。启动复制
在从服务器上启动复制进程:
START SLAVE;
检查复制状态
检查从服务器的复制状态,确保复制正常运行:
SHOW SLAVE STATUS\G;
查看输出中的两个关键字段:
Slave_IO_Running: YesSlave_SQL_Running: Yes
如果这两个值都是
Yes,说明主从复制正常。如果不是,可以检查错误信息并进行排查。
三、测试主从复制
在主服务器上创建一个测试表或插入数据:
USE my_database;
CREATE TABLE test_table (id INT PRIMARY KEY, data VARCHAR(50));
INSERT INTO test_table VALUES (1, 'Test Data');
在从服务器上检查该表是否存在以及数据是否同步:
USE my_database;
SELECT * FROM test_table;
如果能看到相同的表和数据,说明主从复制配置成功。
MySQL5.7x 主从复制的更多相关文章
- MySQL5.6主从复制最佳实践
MySQL5.6 主从复制的配置 环境 操作系统:CentOS-6.6-x86_64 MySQL 版本:mysql-5.6.26.tar.gz 主节点 IP:192.168.31.57 ...
- mysql5.7 主从复制的正常切换【转】
目前环境如下: master server IP:172.17.61.131 slave server IP:172.17.61.132 mysql version: mysql-5.7.21-lin ...
- mysql5.7主从复制--在线变更复制类型【转】
这里说一下关于如何在线变更复制类型(日志复制到全局事物复制),参考课程:mysql5.7复制实战 先决条件 (1)集群中所有的服务器版本均高于5.7.6(2)集群中所有的服务器gtid_mod ...
- MySQL5.6主从复制方案
MySQL5.6主从复制方案 1.主备服务器操作 环境:CentOS 6.3/6.4 最小化缺省安装,配置好网卡. 安装MySQL前,确认Internet连接正常,以便下载安装文件. # 新增用户组 ...
- MySQL5.7Gtid主从复制总是遇到日志被清等出现无法正常主从复制
最近最是在MySQL5.7上的的gtid主从复制问题总是遇上下面问题: Last_Error: Coordinator stopped because there were error(s) in t ...
- Mysql5.6主从复制-基于binlog
MySQL5.6开始主从复制有两种方式:基于日志(binlog):基于GTID(全局事务标示符). 此文章是基于日志方式的配置步骤 环境: master数据库IP:192.168.247.128sla ...
- MySQL5.6主从复制搭建基于日志(binlog)
什么是MySQL主从复制 简单来说,就是保证主SQL(Master)和从SQL(Slave)的数据是一致性的,向Master插入数据后,Slave会自动从Master把修改的数据同步过来(有一定的延迟 ...
- MySQL5.7 主从复制配置
一.主从复制原理 MySQL 主从复制是一个异步的复制过程,主库发送更新事件到从库,从库读取更新记录,并执行更新记录,使得从库的内容与主库保持一致.每一个主从复制的连接,都有三个线程.拥有多个从库的主 ...
- Centos7 下配置mysql5.6主从复制实例(一主两从)
标签:mysql 数据库 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://8941355.blog.51cto.com/89313 ...
- mysql5.7主从复制
1.简介 1.1主从复制 是指建立一个和主数据库完全一样的数据库环境,称为从数据库:主数据库一般是实时的业务数据库,从数据库的作用和使用场合一般有几个: 一是作为后备数据库,主数据库服务器故障后,可切 ...
随机推荐
- 题解:CF1776L Controllers
CF1776L Controllers 题解 分析 先把题目形式化.设 \(n\) 次加减中有 \(x\) 个加,\(y\) 个减,其中 \(a\) 加了 \(u\) 次,减了 \(v\) 次,显然 ...
- java根据时区转换获取时间的方法
方法一: public static void main(String[] args) { // 假设这是从MySQL获取的UTC时间字符串 String utcTimeStr = "202 ...
- P9150 邮箱题
P9150 邮箱题 Alex_Wei 做法妙. 思路 首先我们可以建出两张图,一张是按照题目的要求形成的有向图,一张是由有向边 \((i,k_i)\) 形成的钥匙图. 在钥匙图中,每个点有且仅有一入度 ...
- Maven多模块项目 eclipse热部署 Maven项目实现 tomcat热部署
Maven 多模块项目在eclipse下面热部署,即你可以体验下无论你修改整个项目里面的任何模块的代码,都不需要用maven打包就可以看到效果, 1.首先准备好创建一个maven多项目的代码,准备好一 ...
- PythonDay3Advance
PythonDay3Advance 运算符 位运算符 进制: 将整数分了几种进制表示法 二进制:由0,1构成,逢2进1,以0b开头 八进制:由0,1,2,3,4,5,6,7构成,逢8进1,以0开头 十 ...
- 生成式AI如何辅助医药行业智能营销
生成式AI如何辅助医药行业智能营销 生成式AI在医药行业的智能营销中发挥着日益重要的作用,它通过多种方式辅助医药企业提升市场洞察能力.优化营销策略.增强客户互动和体验,从而推动销售增长和品牌价值的提升 ...
- Git 浅克隆后拉取其他分支
对于已浅克隆的项目 $ git clone --depth=1 <git-repo-url> repo $ cd repo 现在浅克隆了一个Git仓库repo.但仓库里查询远程分支只有一个 ...
- 获取n级父目录名称
DirectoryInfo GetPrant(DirectoryInfo path, int level) { DirectoryInfo temp = null; if (level > 1) ...
- 如何解决Git合并冲突?
讲个故事先: 一个晴朗的日子,Alex 把远程版本库的修改拉到他的本地版本库. 他修改了名为 abc.txt 的文件,将其暂存(staged),提交(committed),最后推送(pushed)回远 ...
- RocketMQ系列3:核心技术介绍
1 介绍 RocketMQ是一款分布式消息中间件,其核心技术涉及多个核心概念,包括主题.队列.消息.生产者.消费者.消费者分组以及订阅关系.以下是对这些核心技术的详细说明: 2 核心技术实现 2.1 ...