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

相关文章

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

MySQL中FIND_IN_SET函数与INSTR函数用法解析

《MySQL中FIND_IN_SET函数与INSTR函数用法解析》:本文主要介绍MySQL中FIND_IN_SET函数与INSTR函数用法解析,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一... 目录一、功能定义与语法1、FIND_IN_SET函数2、INSTR函数二、本质区别对比三、实际场景案例分

MySQL中的交叉连接、自然连接和内连接查询详解

《MySQL中的交叉连接、自然连接和内连接查询详解》:本文主要介绍MySQL中的交叉连接、自然连接和内连接查询,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、引入二、交php叉连接(cross join)三、自然连接(naturalandroid join)四

Pyserial设置缓冲区大小失败的问题解决

《Pyserial设置缓冲区大小失败的问题解决》本文主要介绍了Pyserial设置缓冲区大小失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录问题描述原因分析解决方案问题描述使用set_buffer_size()设置缓冲区大小后,buf

Mysql如何将数据按照年月分组的统计

《Mysql如何将数据按照年月分组的统计》:本文主要介绍Mysql如何将数据按照年月分组的统计方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql将数据按照年月分组的统计要的效果方案总结Mysql将数据按照年月分组的统计要的效果方案① 使用 DA

Mysql表如何按照日期字段的年月分区

《Mysql表如何按照日期字段的年月分区》:本文主要介绍Mysql表如何按照日期字段的年月分区的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、创键表时直接设置分区二、已有表分区1、分区的前置条件2、分区操作三、验证四、注意总结一、创键表时直接设置分区