SQL_Errno:1677

本文记录了一次解决MySQL主从复制中出现的SQL_Errno:1677错误的过程。通过对比主从库表结构,发现字符集不一致导致的问题。将从库表字符集由utf8mb4改为UTF-8后,问题得以解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天一个从库报错 :SQL_Errno:1677 。对比发现主从上该表对应的字段完全一样 ,唯一的不同就是

主库上该表的字符集为 UTF-8 ,从库上该表的字符集为 utf8mb4。将从库上该表的字符集改成  UTF-8 ,

从库正常运行。

 

<think>我们遇到了MySQL主从复制中的`Last_IO_Error:errorconnectingtomaster`错误。具体错误信息为`Can'tconnecttoMySQLserveron'192.168.5.130:3306'(113)`。根据引用[1]和引用[3]提供的信息,这是一个典型的连接问题。##问题分析这个错误通常由以下原因引起:1.**网络不可达**:从库无法访问主库的IP地址和端口2.**防火墙阻止**:主库所在服务器的防火墙阻止了从库的连接3.**MySQL权限配置错误**:主库上未正确配置复制用户的访问权限4.**MySQL服务未运行**:主库的MySQL服务未启动##解决步骤###1.验证网络连通性在从库服务器上执行:```bashping192.168.5.130```如果无法ping通,说明网络层存在问题[^1]。###2.检查端口可达性使用telnet测试主库的3306端口:```bashtelnet192.168.5.1303306```如果连接失败,可能是:-主库MySQL服务未运行-主库防火墙阻止了连接-MySQL绑定地址限制了访问###3.检查主库MySQL服务在主库服务器上确认MySQL服务状态:```bashsystemctlstatusmysql```确保服务处于运行状态。###4.检查主库防火墙配置在主库服务器上检查防火墙规则:```bash#查看防火墙状态systemctlstatusfirewalld#如果防火墙开启,则检查3306端口是否开放firewall-cmd--list-ports|grep3306#未开放则添加规则firewall-cmd--add-port=3306/tcp--permanentfirewall-cmd--reload```###5.验证主库绑定地址检查主库配置文件(如`/etc/my.cnf`)中的绑定地址:```[mysqld]bind-address=0.0.0.0#允许所有IP连接#bind-address=192.168.5.130#只允许指定IP连接```修改后重启MySQL服务[^1]。###6.检查复制用户权限在主库上确认复制用户的权限和主机限制:```sqlSELECTuser,hostFROMmysql.userWHEREuser='repl_slave1';SHOWGRANTSFOR'repl_slave1'@'192.168.7.142';```确保用户具有`REPLICATIONSLAVE`权限且允许从从库IP连接[^3]。###7.重新配置主从复制如果以上步骤无误,尝试在从库重新配置复制链路:```sqlSTOPSLAVE;RESETSLAVE;CHANGEMASTERTOMASTER_HOST='192.168.7.142',MASTER_USER='repl_slave1',MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=2996;STARTSLAVE;```注意:这里使用正确的日志文件和位置(来自主库的`SHOWMASTERSTATUS`输出)[^3]。###8.检查连接错误详情使用`SHOWSLAVESTATUS\G`查看详细的错误信息:```sql***************************1.row***************************Slave_IO_State:ConnectingtomasterMaster_Host:192.168.7.142Master_User:repl_slave1Master_Port:3306Connect_Retry:60Master_Log_File:mysql-bin.000002Read_Master_Log_Pos:2996Relay_Log_File:relay-bin.000001Relay_Log_Pos:4Relay_Master_Log_File:mysql-bin.000002Slave_IO_Running:ConnectingSlave_SQL_Running:YesReplicate_Do_DB:Replicate_Ignore_DB:Replicate_Do_Table:Replicate_Ignore_Table:Replicate_Wild_Do_Table:Replicate_Wild_Ignore_Table:Last_Errno:0Last_Error:Skip_Counter:0Exec_Master_Log_Pos:2996Relay_Log_Space:154Until_Condition:NoneUntil_Log_File:Until_Log_Pos:0Master_SSL_Allowed:NoMaster_SSL_CA_File:Master_SSL_CA_Path:Master_SSL_Cert:Master_SSL_Cipher:Master_SSL_Key:Seconds_Behind_Master:NULLMaster_SSL_Verify_Server_Cert:NoLast_IO_Errno:113Last_IO_Error:errorconnectingtomaster'repl_slave1@192.168.7.142:3306'-retry-time:60retries:1message:Can'tconnecttoMySQLserveron'192.168.7.142:3306'(113)Last_SQL_Errno:0Last_SQL_Error:Replicate_Ignore_Server_Ids:Master_Server_Id:0Master_UUID:Master_Info_File:mysql.slave_master_infoSQL_Delay:0SQL_Remaining_Delay:NULLSlave_SQL_Running_State:Slavehasreadallrelaylog;waitingfortheslaveI/OthreadtoupdateitMaster_Retry_Count:86400Master_Bind:Last_IO_Error_Timestamp:21070610:50:45Last_SQL_Error_Timestamp:Master_SSL_Crl:Master_SSL_Crlpath:Retrieved_Gtid_Set:Executed_Gtid_Set:Auto_Position:0Replicate_Rewrite_DB:Channel_Name:Master_TLS_Version:1rowinset(0.01sec)```##特殊情况处理如果错误代码是1045(权限问题),则需要重新检查复制用户的密码是否设置正确[^3]。如果错误是主从服务器UUID相同(如引用[5]),则需修改从库的auto.cnf文件中的UUID值:1.停止从库服务2.修改`datadir/auto.cnf`中的UUID3.重启从库4.重新配置主从复制§§相关问题§§1.MySQL主从复制中如何解决1045权限错误?2.主从复制中Slave_SQL_Running为No如何修复?3.MySQL主从复制时如何设置SSL连接?</think> 针对MySQL主从复制中出现的 **Last_IO_Error: Unknown MySQL server host** 连接错误(错误代码113),以下是系统化的排查解决方案: --- ### 一、核心排查步骤 #### 1. 基础网络检查 ```bash # 从库服务器执行: ping 192.168.7.142 # 验证主库IP可达性 telnet 192.168.7.142 3306 # 检查3306端口连通性 (1) ``` - **若失败**:排查防火墙策略(主从节点均需检查): ```bash # 主库执行 firewall-cmd --list-ports | grep 3306 # 未开放则添加规则 firewall-cmd --add-port=3306/tcp --permanent firewall-cmd --reload ``` #### 2. MySQL服务状态验证 ```bash # 主库执行: systemctl status mysql # 确认服务运行 netstat -tlnp | grep 3306 # 确认监听端口 ``` #### 3. 主库用户权限复查(关键步骤) ```sql -- 主库执行: SHOW GRANTS FOR 'repl_slave1'@'192.168.7.142'; -- 确认复制账号权限 (2) ``` **必须包含关键授权**: ```sql GRANT REPLICATION SLAVE ON *.* TO 'repl_slave1'@'192.168.7.142'; ``` #### 4. 主库连接限制检查 编辑主库配置文件(如 `/etc/my.cnf`): ```ini [mysqld] bind-address = 0.0.0.0 # 允许所有IP连接 (3) # skip-networking = OFF # 确保网络连接启用 ``` **重启服务生效**: ```bash systemctl restart mysql ``` #### 5. 从库DNS解析故障 在从库添加主库IP解析: ```bash # 从库执行: echo "192.168.7.142 master-host" >> /etc/hosts ``` 或直接使用IP配置主从关系(推荐): ```sql CHANGE MASTER TO MASTER_HOST='192.168.7.142', -- 直接使用IP ... ``` --- ### 二、深度故障排查 #### 1. MySQL错误日志分析 ```bash # 主库查看日志定位拒绝原因 tail -100 /var/log/mysql/error.log # 从库查看连接错误详情 cat nohup.out | grep "Last_IO_Error" ``` #### 2. 主从版本兼容性验证 ```sql -- 主从库分别执行: SHOW VARIABLES LIKE 'version%'; ``` **注意**:跨大版本复制需确认兼容性(如MySQL 5.7→8.0) [^4] #### 3. 重启复制链路 ```sql -- 从库操作: STOP SLAVE; RESET SLAVE ALL; -- 清除历史配置 CHANGE MASTER TO MASTER_HOST='192.168.7.142', MASTER_USER='repl_slave1', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000002', -- 主库SHOW MASTER STATUS结果 MASTER_LOG_POS=2996; START SLAVE; ``` --- ### 三、排查工具速查表 | 检查方向 | 命令/操作 | 成功标志 | |----------------|----------------------------------|-----------------------| | 网络连通性 | `telnet 192.168.7.142 3306` | Connected to... | | 主库监听状态 | `netstat -tlnp \| grep 3306` | :::3306 LISTENING | | 复制用户权限 | `SHOW GRANTS FOR 'user'@'ip';` | REPLICATION SLAVE 存在| | DNS解析 | `dig master-host +short` | 返回正确IP | | 防火墙策略 | `firewall-cmd --list-ports` | 3306/tcp 存在 | --- ### 四、典型错误解决方案 - **ERROR 1130 (HY000): Host is not allowed to connect** ```sql -- 主库执行: CREATE USER 'repl_slave1'@'%' IDENTIFIED BY '123456'; -- 开放所有主机连接 ``` - **ERROR 1045 (28000): Access denied** 确认密码一致性:`MASTER_PASSWORD='123456'`需与创建用户时的密码完全匹配 [^3] - **主库未开启binlog** 主库配置文件中添加: ```ini [mysqld] log-bin=mysql-bin server-id=1 # 唯一ID [^5] ``` > 完整流程验证成功后: > ```sql > SHOW SLAVE STATUS\G > -- 确认 Slave_IO_Running: Yes, Slave_SQL_Running: Yes > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huangliang0703

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值