当前位置: 首页 > news >正文

Mysql80主从复制搭建;遇到问题 Slave_IO_Running: Connecting和Slave_SQL_Running以及解决过程

总结主要步骤

1.配置一个提供复制的账号;
创建用户

CREATE USER 'replication'@'%' IDENTIFIED BY 'your_password';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%';
FLUSH PRIVILEGES;

2.修改配置 选择模式
主库配置;
windows的得话是my.ini文件
默认这个目录下
C:\ProgramData\MySQL\MySQL Server 8.0
添加如下配置 server-id log_bin 指定一下位置
binlog_format 指定主从复制模式 。当然本文不涉及GTID这样的东西;就是简单的复制.

bind-address = 0.0.0.0
server-id = 1
log_bin = D:/mysqlbin/bin/mysql-bin.log
binlog_format = ROW
expire_logs_days = 7
max_binlog_size = 100M

更改完配置是需要重启mysql的;
windows的话是需要
net stop MySQL
net start MySQL
linux 我使用的docker的话
是 docker restart mysql;

3.找一个从库
配置复制源

CHANGE MASTER TOMASTER_HOST='192.168.56.1',  -- 主库的IP地址MASTER_USER='replication',  -- 复制用户MASTER_PASSWORD='1942951600',  -- 复制用户的密码MASTER_LOG_FILE='mysql-bin.000001',  -- 从主库SHOW MASTER STATUS得到的文件名MASTER_LOG_POS=1808;  -- 从主库SHOW MASTER STATUS得到的位置CHANGE MASTER TOMASTER_HOST='192.168.56.1',  -- 主库的IP地址MASTER_USER='replication',  -- 复制用户MASTER_PASSWORD='1942951600',  -- 复制用户的密码MASTER_LOG_FILE='mysql-bin.000001',  -- 从主库SHOW MASTER STATUS得到的文件名MASTER_LOG_POS=1808;  -- 从主库SHOW MASTER STATUS得到的位置start slave;
就搞定了;

MASTER_LOG_FILE 这个里面的文件是自己配置里面的文件通过SHOW MASTER STATUS; 来查看位置。

一些检查状态的sql

SHOW MASTER STATUS;
SHOW SLAVE STATUS\G
  1. dump数据 然后开始测试

遇到的问题

问题1.Slave_SQL_Running
密码策略问题

这个两个数据库密码策略使用不同:一个是密码策略问题。可以通过下面sql语句来查看;
有mysql_native_password 和caching_sha2_password ;我们使用mysql_native_password 这种

修改主库

修改用户的认证插件选项,禁用安全连接要求:
sql
ALTER USER 'replication'@'%' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
FLUSH PRIVILEGES;更改主库认证密码方式
ALTER USER 'replication'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';
FLUSH PRIVILEGES;### mysql数据库查看权限
use mysql;
select host, user, plugin,  authentication_string, password_expired from user;
serve-id不同

这个需要去配置里面修改 server-id = 2 主从的id不能一样。所以后面删除了mysql容器又来了一遍
重新来一遍的步骤
0. 清楚原有数据卷里面的一些数据

  1. ’停止slave
  2. 停止mysql容器
  3. .卸载mysql容器
  4. 重启mysql容器
  5. 重新配置主从节点
  6. 检查配置状态

docker stop  
docker rm>   SHOW VARIABLES LIKE 'server_id';docker run -p 3306:3306 --name mysql --restart=always --privileged=true \
-v /usr/local/mysql/log:/var/log/mysql \
-v /usr/local/mysql/data:/var/lib/mysql \
-v /usr/local/mysql/conf:/etc/mysql \
-v /etc/localtime:/etc/localtime:ro \
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0docker exec -it mysql /bin/bashmysql -u root -p
SHOW SLAVE STATUS\GSTART SLAVE;
STOP SLAVE IO_THREAD;CHANGE MASTER TOMASTER_HOST='192.168.1.8',  -- 主库的IP地址MASTER_USER='root',  -- 复制用户MASTER_PASSWORD='1942951600',  -- 复制用户的密码MASTER_LOG_FILE='mysql-bin.000001',  -- 从主库SHOW MASTER STATUS得到的文件名MASTER_LOG_POS=1808;  -- 从主库SHOW MASTER STATUS得到的位置
CHANGE MASTER TOMASTER_HOST='192.168.56.1',  -- 主库的IP地址MASTER_USER='replication',  -- 复制用户MASTER_PASSWORD='1942951600',  -- 复制用户的密码MASTER_LOG_FILE='mysql-bin.000001',  -- 从主库SHOW MASTER STATUS得到的文件名MASTER_LOG_POS=1808;  -- 从主库SHOW MASTER STATUS得到的位置SHOW SLAVE STATUS\G
START SLAVE;查看中继日志位置;
[mysqld]
server-id = 2
relay-log = /var/lib/mysql/mysql-relay-bin### 其他命令语句
更改配置后重启mysql;
docker restart mysql查看从库mysql 日志;
tail -n 50 /var/log/mysql/mysqld.logGRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.1.8' IDENTIFIED BY '1942951600';reset slave;

问题二:

Slave_IO_Running: Connecting
主要我的是从库是docker上面来做的;可能有网段的问题;
排查过程:检查linux服务器是否能ping通我本机。添加bind-address配置。

监听一下

sudo yum install telnet
使用 telnet 测试 MySQL 端口
一旦安装了 telnet 客户端,你可以使用它来测试 MySQL 服务的端口是否开放。

telnet 192.168.1.8 3306
使用这个可以来

在主库 添加 如下代码块 方便虚拟机连接;

安装检测网络工具

yum search ifconfig
yum install net-tools
ifconfig

在这里插入图片描述

relay-log = /var/lib/mysql/mysql-relay-bin 我默认的中继日志配置在这个位置;

处理docker的网络问题 修改docker的网段 (应该和这个没关系)

重启docker
修改
/etc/docker/daemon.json,加入一行 “bip”: “192.168.56.1/24”,,然后再次查看 ifconfig,已经变成了 192 网段了

重启 docker 服务
sudo systemctl restart docker

做完处理后在虚拟机的docker里面也可以 通过mysql -u replication -p -h 192.168.56.1
这样的方式来去访问到

后来是改了从库连接主库的ip

以太网适配器 VirtualBox Host-Only Network: 使用的这个ipv4

成功截图

在这里插入图片描述
这两个标位yes即可

创建数据库

CREATE DATABASE yan
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

可以使用dump命令来备份mysql数据库。也可以使用数据库工具来完成工具的配置;来导入数据库。然后测试;

http://www.lryc.cn/news/415709.html

相关文章:

  • Yarn网络代理配置指南:在受限网络环境中优化依赖管理
  • AOE网及其求解关键路径
  • 【FPGA】modelsim编译verilog代码产生错误集合
  • Rabbitmq的持久化机制
  • Unity UnityWebRequest封装类
  • JVM内存划分
  • c++ 全排列
  • 未授权访问漏洞系列详解⑤!
  • 【CONDA】库冲突解决办法
  • 【网络世界】数据链路层
  • AllReduce通信库;Reduce+LayerNorm+Broadcast 算子;LayerNorm(层归一化)和Broadcast(广播)操作;
  • 2024.8.5 作业
  • MySQL数据库——数据库的基本操作
  • SQL数据库语句练习
  • 【Python】常用的pdf提取库介绍对比
  • sbatch提交并行作业 运行python程序 指定输入参数从1到100
  • OD C卷 - 中庸行者
  • 最新CSS3横向菜单的实现
  • (2024,LlamaGen,Llama,自回归下一token预测,模型扩展)自回归模型优于扩散:Llama 用于可扩展图像生成
  • 重新安装操作系统的软件都有哪些?
  • 深圳水务展|2025深圳国际水务科技博览会
  • OpenAI not returning a result?
  • [Windows]_[初级]_[GetVersionEx获取系统版本错误的原因]
  • 2024,Java开发在中国市场还有发展前景吗?
  • gcc: string.c_str gcc-8.5的一个问题
  • 一道笔试题 - 无重复字符的最长子串
  • C#反射的NullReferenceException
  • 100道C/C++面试题
  • Python(模块)
  • 【八股文】Java基础篇