配置MySQL主从复制(一主一从)
前言
MySQL主从复制简介
MySQL主从复制的目的是实现数据库冗余备份,将master数据库的数据定时同步到slave库中,一旦master数据库宕机,可以将Web应用数据库配置快速切换到slave数据库,确保Web应用有较高的可用性。
MySQL主从同步是一个异步复制的过程,要实现复制,首先需要在master上开启bin-log日志功能,bin-log日志用于记录在master库执行的增删改更新操作的sql语句,整个过程需要开启3个线程,分别是master开启I/O线程,slave开启I/O线程和SQL线程。
主从复制大致流程
- slave上执行slave start,slave I/O线程会通过在master创建的授权用户连接到master,并请求master从指定的文件和位置发送bin-log日志内容。
- master接收到slave的IO线程请求后,master的IO线程根据slave发送的指定bin-log日志position点之后的内容,然后返回给slave的IO线程。
- 返回的信息中除了bin-log日志内容外,还有master最新的bin-log文件名以及在bin-log中的下一个指定更新position点。
- slave的IO线程接收到信息后,将接收到的日志内容依次添加到slave端的relay-log文件的末端,并将读取到的master端的bin-log文件名和position点记录到master.info文件中,以便在下一次读取的时候能告知master从相应的bin-log文件名及最后一个position点开始发起请求
- slave SQL线程检测到relay-log中内容有更新,会立刻解析relay-log的内容,将解析后的SQL语句在slave中执行,执行成功后主库和从库数据一致。
准备
- 主节点IP:192.168.0.11
- 从节点IP:192.168.0.10
- 待同步的数据库:test
步骤
配置主节点
vim /etc/my.cnf在
[mysqld]字段中添加:
log-bin=master-bin
binlog-format=ROW
server-id=1
- 重启mysqld:
systemctl restart mysqld
- 登入mysql,创建用于同步的账户tongbu,注意修改IP段和密码:
create user 'tongbu'@'192.168.%' identified by '123456';
- 授权,注意修改IP段和密码:
grant replication slave on *.* to 'tongbu'@'192.168.%' identified by '123456';
- 查看master状态:
# 注意File字段和Position字段
show master status;
配置从节点
vim /etc/my.cnf
在[mysqld]字段中添加:
log-bin=master-bin
binlog-format=ROW
server-id=2
- 重启mysql
- 登入mysql,配置从库连接主库,注意修改主库的IP,用于同步的账户名和密码,master_log_file为
show master status;中的File值,master_log_pos为show master status;中的Position值
change master to master_host='192.168.0.11',master_user='tongbu',master_password='123456',master_log_file='master-bin.000001',master_log_pos=154;
- 启用从库:
start slave;
- 查看从库状态
# 注意看 Slave_IO_Running和Slave_SQL_Running是否为yes
show slave status\G
测试
在主库创建一个数据库:create database test123;
在数据库中新建一个表:create table t0(id int,name varchar(20));
查看从库有没有新建的表
只同步部分库或表
方式一:限制master端
在/etc/my.cnf中添加:binlog-do-db=test(多个数据库用逗号隔开,不加这一行默认同步所有库)
方式二:限制slave端
在/etc/my.cnf中添加:replicate-do-db=test
指定需要同步的表:replicate-do-table=test.test_table
解决主从复制问题
如果发生网络异常导致主从同步错误,或者在已有数据基础上搭建主从复制,需要解决数据不一致问题。
主从数据差别不大时的不同步问题
- master端执行:
flush tables with read lock;,将数据库设置为全局读锁。 - slave端:
- 停止IO及SQL线程,
stop slave; - 将同步错误的SQL跳过一次,
set global sql_slave_skip_counter=1; - 启动slave,
start slave;
- 停止IO及SQL线程,
- master端执行:
unlock tables;解锁。
主从数据差别很大时的不同步问题
- master端执行:
flush tables with read lock;,将数据库设置为全局读锁。 - 使用mysqldump、mysqlpump、xtrabackup等工具对master数据库进行完整备份
- 将完整数据导入到从库
- 重新配置主从关系
- master端执行:
unlock tables;解锁。
主键冲突,错误代码1062
情况:从库上执行show slave status\G,报错last_error:1062,sql线程已停止工作。
原因:从库上执行了写操作,然后在主库上执行了相同的SQL语句,主键冲突,主从复制状态就会报错。
解决:
- 利用perconna-toolkit工具中的py-slave-restart命令在从库跳过错误(因为主从库有相同的数据)。
主库更新数据,从库找不到而报错,错误代码1032
在从库执行delete删除操作,再在主库执行更新操作,由于从库已经没有该数据,导致主从数据不一致。
解决方法:在从库执行show slave status,根据错误信息所知道的binlog文件和position号,在主库上通过mysqlbinlog命令查找在主库执行的哪条SQL语句导致的主从报错。把从库上丢失的这条数据补上,然后执行跳过错误。如果从库丢失了很多数据,需要考虑重新配置主从环境。
配置MySQL主从复制(一主一从)的更多相关文章
- MySQL(14)---Docker搭建MySQL主从复制(一主一从)
Docker搭建MySQL主从复制(一主一从) 上一篇博客写了MYSQL主从复制原理 : MySQL(13)---MYSQL主从复制原理 这篇我们来写 Docker搭建MYSQL主从复制(一主一从) ...
- 配置MySQL主从复制报错Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work
配置MySQL主从复制报错 ``` Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave ha ...
- centos 配置mysql主从复制
mysql+centos7+主从复制 MYSQL(mariadb) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可.开发这个分支的原因之一是:甲骨文公 ...
- 配置MySQL主从复制和读写分离
实验环境 序号 主机名 IP地址 备注 1 mysql-master 192.168.204.201 MySQL主库 2 mysql-slave 192.168.204.202 MySQL从库 3 a ...
- docker上配置mysql主从复制
1.在docker上启动2台mysql容器:(这里3306为主,3307为从) docker run -d -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 - ...
- linux配置mysql主从复制
1.准备工作,2台服务器都安装最好一个版本的mysql 主:192.168.100.1 从:192.168.100.2 a.修改主数据库/etc/my.cnf,mysqld下添加.修改之后重启. [m ...
- Linux下配置MySQL主从复制
一.环境准备 本次准备两台Linux主机,操作系统都为CentOS6.8, 都安装了相同版本的MySQL.(MySQL5.7). 主从服务器的防火墙都开启了3306端口. 相关信息如下: [主服务器] ...
- ansible配置mysql主从复制
配置主机1.下载安装所需安装包 [root@server1 ansible]# lsansible-2.7.8-1.el7.noarch.rpmansible-tower-setup-bundle-3 ...
- Mysql学习总结(33)——阿里云centos配置MySQL主从复制
1.安装jdk1.8 首先确定没有安装过jdk 2.yum –y list java*查询系统自带的jdk安装包情况. 3.安装jdk1.8 4. 验证安装结果. 安装mysql 1. rpm -Uv ...
- docker起容器配置MySQL主从复制
https://www.jianshu.com/p/0439206e1f28
随机推荐
- 文心一言 VS chatgpt (9)-- 算法导论2.3 7题 3.1 1题
七.描述一个运行时间为O(nlgn)的算法,给定n个整数的集合S和另一个整数,该算法能确定 S中是否存在两个其和刚好为工的元素. 文心一言: 这里是一个运行时间为O(nlgn)的算法,可以用来确定集合 ...
- Nacos必知必会:这些知识点你一定要掌握!
前言 Nacos 是一个开源的服务发现.配置管理和服务治理平台,是阿里巴巴开源的一款产品. Nacos 可以帮助开发者更好地管理微服务架构中的服务注册.配置和发现等问题,提高系统的可靠性和可维护性. ...
- 记一次 .NET 某汽贸店 CPU 爆高分析
一:背景 1. 讲故事 上周有位朋友在 github 上向我求助,说线程都被卡住了,让我帮忙看下,截图如下: 时隔两年 终于有人在上面提 Issue 了,看样子这块以后可以作为求助专区来使用,既然来求 ...
- 小程序打印饼图报错VM6541:1 thirdScriptError Converting circular structure to JSON;
今日使用小程序开发饼图页面,由于一个页面需要打印多个饼图,所以需要将echarts对象进行缓存,于是出现了如下js报错问题 一. 错误代码 VM6541:1 thirdScriptError Conv ...
- 万字长文详述ClickHouse在京喜达实时数据的探索与实践
1 前言 京喜达技术部在社区团购场景下采用JDQ+Flink+Elasticsearch架构来打造实时数据报表.随着业务的发展 Elasticsearch开始暴露出一些弊端,不适合大批量的数据查询,高 ...
- NLM 公布了一个新的重新设计的 PubMed 数据库
经常使用 PubMed 的童鞋可能已经发现,美国国家医学图书馆(NLM)在今年 10 月份左右发布了一个新的重新设计的版本以取代 PubMed 数据库的现有版本,新版本现在已经上线,可以通过下面的链接 ...
- cmd+ssh配置远程服务器Anaconda3_2023+pytorch
一.上传Anaconda3到远程服务器 注意:如果要将这个东西安装在anaconda3文件夹里的话,当前这个目录里不能有这个文件夹.(安的时候会自动创建) 二.安装Anaconda3 1. win+r ...
- java调用WebService(未完成)记录篇
背景: 因工作需要和一个Sap相关系统以WebService的方式进行接口联调,之前仅听过这种技术,但并没有实操过,所以将本次开发相关的踩坑进行记录 通过一个实例来认识webservice 服务端 首 ...
- MRS-MRS相同功能代码管理应用笔记
MRS相同功能代码管理应用笔记 使用 MounRiver(以下简称 MRS )进行 RISC-V 单片机开发时,工程目录下往往存在多个文件夹与文件,我们只需要着重关注截图中红框所示的部分,它们自上而下 ...
- React后台管理系统 04 配置路径别名、全局样式设置、模块化scss
ts中对于@符号指定的路径不支持,同时vite中也是不支持的,所以我们需要在vite.config.ts中进行指定配置,path是node中自带的一个模块这里爆红的原因是没有进行声明: 我们使用命令对 ...