mysql主从及遇到的问题解决!

mysql主从及遇到的问题解决!

本文详细介绍了如何使用Docker配置MySQL主从复制,首先创建了两个文件夹并分别配置了`my.cnf`文件,通过执行脚本启动容器并配置好主从关系,文中还提到了一些常见问题的解决方法,如配置路径错误导致的冲突和slave的change连接错误。

mysql主从及遇到问题解决

1.基于mysql 8.0的docker

2.配置mysql的配置

  • 创建master文件夹,并创建my.cnf文件:
1
2
3
4
5
6
7
[mysqld]
## 设置server_id,注意要在同一局域网内唯一
server-id=1
## 开启binlog
log-bin=mysql-bin
## binlog格式(mixed、statement、row,默认格式是statement)
binlog_format=mixed
  • 创建slaver文件夹,并创建my.cnf文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[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,默认格式是statement)
binlog_format=mixed
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062   ## 跳过主从复制中遇到的错误,可配可不配
read-only=1 #1只读,0读写
  • 同级可以创建sh文件
1
2
3
4
5
6
7
#!/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:
1
2
3
4
5
#启用master容器,master文件名,3306端口
sh mysql.sh master 3306
#启用slaver容器,slaver文件名,3307端口
sh mysql.sh master 3307
  • 登录master容器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#进入容器,如果失败使用 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;
  • 登录slaver服容器
1
2
3
4
5
6
7
8
9
#master_log_file和master_log_pos 为master中show展示的数据
change master to master_host='master-ip',
master_port=3306,
master_user='slaver',
master_password='123456',
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。

查询文件:

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#master容器:全量dump,--source-data=2表示生成的备份文件中包含 CHANGE MASTER TO 语句
#--single-transaction: 保证备份在一致性点上完成
#--flush-logs: 在备份开始时刷新 MySQL 的二进制日志
#--hex-blob: 处理二进制字段时使用十六进制表示
mysqldump -u root -p --all-databases --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;

总结

以上为个人经验,希望能给大家一个参考。

 

 

学习资料见知识星球。

以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。

快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利​​​​!

更多技巧, www.excelbook.cn

欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;

Excelbook.cn Excel技巧 SQL技巧 Python 学习!

你将获得:

1、价值上万元的专业的PPT报告模板。

2、专业案例分析和解读笔记。

3、实用的Excel、Word、PPT技巧。

4、VIP讨论群,共享资源。

5、优惠的会员商品。

6、一次付费只需129元,即可下载本站文章涉及的文件和软件。

文章版权声明 1、本网站名称:Excelbook
2、本站永久网址:http://www.excelbook.cn
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长王小琥进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报。
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。

THE END
分享
二维码
< <上一篇
下一篇>>