mysql主从及遇到的问题解决

2025-01-06 03:50

本文主要是介绍mysql主从及遇到的问题解决,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《mysql主从及遇到的问题解决》本文详细介绍了如何使用Docker配置MySQL主从复制,首先创建了两个文件夹并分别配置了`my.cnf`文件,通过执行脚本启动容器并配置好主从关系,文中还提到了一些...

mysql主从及遇到问题解决

1.基于mysql 8.0的docker

2.配置mysql的配置

  • 创建master文件夹,并创建my.cnf文件:
[mysqld]
## 设置server_id,注意要在同一局域网内唯一
server-id=1
## 开启binlog
log-bin=mysql-bin
## binlog格式(mixed、statement、row,默认格式是statement)
binlog_format=mixed
  • 创建slaver文件夹,并创建my.cnf文件
[mysqld]
## 设置server_id,注意要唯一
server-id=2
## 可以开启binlog,以备Slave作为其它Slave的Master时使用
#log-bin=mysql-bin
## relay_log配置中继日志
relay_log=relay-bin
## 如果需要同步函数或者存储过程
log_bin_trust_function_creators=true
## binlog格式(mixed、statement、row,默认格式是statewww.chinasem.cnment)
binlog_format=mixed
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062   ## 跳过主从复制中遇到的错误,可配可不配
read-only=1 #1只读,0读写
  • 同级可以创建sh文件
#!/bin/sh
# $0获取执行命令的文件;realpath获取真实的路径;dirname获取该文件的绝对路径
script_dir=$(dirname "$(realpath "$0")")
docker run -itd --name doyen$1 -p ${2}:3306 -e MYSQL_ROOT_PASSWORD=123456 \
-v ${script_dir}/${1}/my.cnf:/etc/my.cnf \
-v ${script_dir}/${1}/data:/var/lib/mysql \
-v ${script_dir}/${1}/log:/var/log --restart always mysql:8.0
  • 分别执行sh:
#启用master容器,master文件名,3306端口
sh mysql.sh master 3306

#启用slaver容器,slaver文件名,3307端口
sh mysql.sh master 3307
  • 登录master容器
#进入容器,如果失败使用 sh
docker exec -it master bash
#登录mysql
mysql -uroot -p123456
use mysql;
#可以移除root的所有地区登录,只保留能本机登录
drop user 'root'@'%';
#创建slaver用户,使用明文密码连接
create user 'slaver'@'%' identified with mysql_native_password by '123456';
grant replication SLAVE ON *.* TO 'slaver'@'%';
flush privileges;

#查看binlog的数据,用于slaver的偏移量迁移
show master status;
  • 登录slaverhttp://www.chinasem.cn服容器
#master_log_file和master_log_pos 为master中show展示的数据
change master to master_host='master-ip',
                     master_port=3306,
					 master_user='slaver',
					 master_password='123456www.chinasem.cn',
					 master_log_file='mysql-bin.000002',
					 master_log_pos=157;
start SLAVE;
show slave status\G;

主从mysql完成,Slave_IO_RunningSlave_SQL_Running 都为 Yes。

遇到的问题说明

一些博客提示mysql的配置位置不对,导致路径映射不对,使用默认的配置,引发serverId都是1,会主从冲突,位置为 /etc/my.cnf,修改配置后需要docker restart。

查询文件:

docker exec -it container find / -name "my.cnf"

如果slave的change连接master写错了,可以执行stop slave;reset slave;再重新绑定。

这是重头开始复制,如果master已经运行了一段时间

#master容器:全量dump,--source-data=2表示生成的备份文件中包含 CHANGE MASTER TO 语句
#--www.chinasem.cnsingle-transaction: 保证备份在一致性点上完成
#--flush-logs: 在备份开始时刷新 MySQL 的二进制日志
#--hex-blob: 处理二进制字段时使用十六进制表示

mysqldump -u root -p --all-databases js--source-data=2 --single-transaction --flush-logs --hex-blob > /var/lib/mysql/full-backup.sql

#将master的该文件mv到slaver的映射路径中,进入slaver容器

mysql -u root -p < full-backup.sql

#执行完后再配置binlog同步点,从sql文件中找出偏移量

CHANGE MASTER TO 。。。

#-------------------------------二。数据太多,只dump表结构-------
mysqldump -u root -p123456 --no-data --databases your_database > schema-only.sql
mysql -u root -p123456 < schema-only.sql

start slave;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持China编程(www.chinasem.cn)。

这篇关于mysql主从及遇到的问题解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1152938

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

C++右移运算符的一个小坑及解决

《C++右移运算符的一个小坑及解决》文章指出右移运算符处理负数时左侧补1导致死循环,与除法行为不同,强调需注意补码机制以正确统计二进制1的个数... 目录我遇到了这么一个www.chinasem.cn函数由此可以看到也很好理解总结我遇到了这么一个函数template<typename T>unsigned

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏

Linux下MySQL数据库定时备份脚本与Crontab配置教学

《Linux下MySQL数据库定时备份脚本与Crontab配置教学》在生产环境中,数据库是核心资产之一,定期备份数据库可以有效防止意外数据丢失,本文将分享一份MySQL定时备份脚本,并讲解如何通过cr... 目录备份脚本详解脚本功能说明授权与可执行权限使用 Crontab 定时执行编辑 Crontab添加定

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

MySQL中On duplicate key update的实现示例

《MySQL中Onduplicatekeyupdate的实现示例》ONDUPLICATEKEYUPDATE是一种MySQL的语法,它在插入新数据时,如果遇到唯一键冲突,则会执行更新操作,而不是抛... 目录1/ ON DUPLICATE KEY UPDATE的简介2/ ON DUPLICATE KEY UP

MySQL分库分表的实践示例

《MySQL分库分表的实践示例》MySQL分库分表适用于数据量大或并发压力高的场景,核心技术包括水平/垂直分片和分库,需应对分布式事务、跨库查询等挑战,通过中间件和解决方案实现,最佳实践为合理策略、备... 目录一、分库分表的触发条件1.1 数据量阈值1.2 并发压力二、分库分表的核心技术模块2.1 水平分

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

504 Gateway Timeout网关超时的根源及完美解决方法

《504GatewayTimeout网关超时的根源及完美解决方法》在日常开发和运维过程中,504GatewayTimeout错误是常见的网络问题之一,尤其是在使用反向代理(如Nginx)或... 目录引言为什么会出现 504 错误?1. 探索 504 Gateway Timeout 错误的根源 1.1 后端