mysql主从复制与数据同步Slave_IO_Running错误

mysql主从复制

怎么安装mysql数据库,这里不说了,只说它的主从复制,步骤如下:

1、主从服务器分别作以下操作:
1.1、版本一致
1.2、初始化表,并在后台启动mysql
1.3、修改root的密码

2、修改主服务器master:
#vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin   //[必须]启用二进制日志
server-id=108       //[必须]服务器唯一ID,默认是1,一般取IP最后一段

3、修改从服务器slave:
#vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin   //[必须]启用二进制日志
server-id=3       //[必须]服务器唯一ID,默认是1,一般取IP最后一段

4、重启两台服务器的mysql
/etc/init.d/mysql restart

5、在主服务器上建立帐户并授权slave:
#/usr/local/mysql/bin/mysql -uroot -pmttang
mysql>GRANT REPLICATION SLAVE ON *.* to 'mysync'@'%' identified by 'q123456'; //一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.1.3,加强安 全。

6、登录主服务器的mysql,查询master的状态
mysql>show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      251 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

7、配置从服务器Slave:
mysql>change master to aster_host='192.168.145.222',master_user='mysync',master_password='q123456',
master_log_file='mysql-bin.000001',master_log_pos=251;   //注意不要断开,“251”无单引号。

Mysql>start slave;    //启动从服务器复制功能

8、检查从服务器复制功能状态:

mysql> show slave statusG

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.2.222  //主服务器地址

Master_User: mysync         //授权帐户名,尽量避免使用root

Master_Port: 3306           //数据库端口,部分版本没有此行

Connect_Retry: 60

Master_Log_File: mysql-bin.000001

Read_Master_Log_Pos: 600        //#同步读取二进制日志的位置,大于等于>=Exec_Master_Log_Pos

Relay_Log_File: ddte-relay-bin.000003

Relay_Log_Pos: 251

Relay_Master_Log_File: mysql-bin.000001

Slave_IO_Running: Yes       //此状态必须YES

Slave_SQL_Running: Yes       //此状态必须YES
......

注:Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误(:错误解答))。

以上操作过程,主从服务器配置完成。

9、主从服务器测试:

主服务器Mysql,建立数据库,并在这个库中建表插入一条数据:

mysql> create database hi_db;
Query OK, 1 row affected (0.00 sec)

mysql> use hi_db;
Database changed

mysql>  create table hi_tb(id int(3),name char(10));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into hi_tb values(001,'wf');
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hi_db              |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.00 sec)

从服务器Mysql查询:

mysql> show databases;

+--------------------+
| Database           |
+--------------------+
| information_schema |
| hi_db              |          //I'M here,大家看到了吧
| mysql              |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql> use hi_db
Database changed
mysql> select * from hi_tb;    //可以看到在主服务器上新增的具体数据
+------+------+
| id   | name |
+------+------+
|    1 | wf |
+------+------+
1 row in set (0.00 sec)
10、完成:
编写一shell脚本,用nagios监控slave的两个“yes”,如发现只有一个或零个“yes”,就表明主从有问题了,发短信警报吧。

mysql 数据同步 出现Slave_IO_Running:No问题的解决方法小结

mysql replication 中slave机器上有两个关键的进程,死一个都不行,一个是slave_sql_running,一个是Slave_IO_Running,一个负责与主机的io通信,一个负责自己的slave mysql进程。
下面写一下,这两个要是有no了,怎么恢复。。

如果是slave_io_running no了,那么就我个人看有三种情况,一个是网络有问题,连接不上,像有一次我用虚拟机搭建replication,使用了nat的网络结构,就是死都连不 上,第二个是有可能my.cnf有问题,配置文件怎么写就不说了,网上太多了,最后一个是授权的问题,replication slave和file权限是必须的。如果不怕死就all咯。。

一旦io为no了先看err日志,看看爆什么错,很可能是网络,也有可能是包太大收不了,这个时候主备上改max_allowed_packet这个参数。

如 果是slave_sql_running no了,那么也有两种可能,一种是slave机器上这个表中出现了其他的写操作,就是程序写了,这个是会有问题的,今天我想重现,但是有时候会有问题,有 时候就没有问题,现在还不是太明了,后面再更新,还有一种占绝大多数可能的是slave进程重启,事务回滚造成的,这也是mysql的一种自我保护的措 施,像关键时候只读一样。

这个时候想恢复的话,只要停掉slave,set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;再开一下slave就可以了,这个全局变量赋值为N的意思是:

This statement skips the next N events from the master. This is useful for recovering from replication stops caused by a statement.

This statement is valid only when the slave thread is not running. Otherwise, it produces an error.

呵呵,讲的比我清楚。

MYSQL镜像服务器因错误停止的恢复

下午主服务器,由于一些原因,导致死机,重启后,发现从服务器的数据没有跟上。
配好MYSQL主从也才前几天的事,没多少经验,第一次碰上这问题,有点焦急。不过,自己试了下,还算解决了:)

从服务器上
Master_Log_File: mysqlhxmaster.000007
Read_Master_Log_Pos: 84285377

看一下主服务器:mysqlhxmaster.000007 | 84450528 |
已经过后很多了,确实没跟上。

show slave statusG
Slave_IO_Running: Yes
Slave_SQL_Running: No

有问题了,Slave_SQL_Running应该是Yes才对。

再往下看,有错误的提示:

Last_Errno: 1053
Last_Error: Query partially completed on the master (error on master: 1053) and was aborted. There is a chance that your master is inconsistent at this point. If you are sure that your master is ok, run this query manually on the slave and then restart the slave with SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE; . Query: 'INSERT INTO hx_stat_record ......(一句SQL语句)'

这里有说明要怎么操作了:)

先stop slave,然后执行了一下提示的语句,再SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;

show slave statusG

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

OK了,从服务器也在几分钟内把堆积的log处理完了,两边又同步了:)

从MYSQL服务器Slave_IO_Running: No的解决2

早晨机房意外断电,导致了发现mysql从服务器同步异常。使用以前碰到的Slave_SQL_Running为No的解决办法无效,仍然无法同步。

查看一下状态show slave status
Master_Log_File: mysqlmaster.000079
Read_Master_Log_Pos: 183913228
Relay_Log_File: hx-relay-bin.002934
Relay_Log_Pos: 183913371
Relay_Master_Log_File: mysqlmaster.000079
Slave_IO_Running: No
Slave_SQL_Running: Yes

主服务器show master statusG
File: mysqlmaster.000080
Position: 13818288
Binlog_Do_DB:
Binlog_Ignore_DB: mysql,test

mysql错误日志:
100512 9:13:17 [Note] Slave SQL thread initialized, starting replication in log 'mysqlmaster.000079' at position 183913228, relay log './hx-relay-bin.002934' position: 183913371
100512 9:13:17 [Note] Slave I/O thread: connected to master 'replicuser@192.168.1.21:3306', replication started in log 'mysqlmaster.000079' at position 183913228
100512 9:13:17 [ERROR] Error reading packet from server: Client requested master to start replication from impossible position ( server_errno=1236)
100512 9:13:17 [ERROR] Got fatal error 1236: 'Client requested master to start replication from impossible position' from master when reading data from binary log
100512 9:13:17 [Note] Slave I/O thread exiting, read up to log 'mysqlmaster.000079', position 183913228

这次是Slave_IO_Running为No,从日志上来看,服务器读mysqlmaster.000079这个Log的183913228这个位置时发生错误,这个位置不存在,于是无法同步。

查看一下这个Log的最后几行:
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
# at 4
#100511 9:35:15 server id 1 end_log_pos 98 Start: binlog v 4, server v 5.0.27-standard-log created 100511 9:35:15
# Warning: this binlog was not closed properly. Most probably mysqld crashed writing it.

尝试从损坏之前的位置开始
SLAVE STOP;
CHANGE MASTER TO MASTER_LOG_FILE='mysqlcncnmaster.000079', MASTER_LOG_POS=183913220;
SLAVE START;
无效!
只好从新的日志开始
SLAVE STOP;
CHANGE MASTER TO MASTER_LOG_FILE='mysqlcncnmaster.000080', MASTER_LOG_POS=0;
SLAVE START;
此时Slave_IO_Running恢复为Yes,同步进行了!观察了会儿,没有任何出错迹象,问题解决。

另外,出现Slave_IO_Running:NO还有一个原因是slave上没有权限读master上的数据。

时间: 2024-09-06 00:57:59

mysql主从复制与数据同步Slave_IO_Running错误的相关文章

MySQL删除/更新数据时报1175错误

原文 MySQL删除/更新数据时报1175错误 今天删除mysql数据库中的一条记录的时候,一直不能删除,提示错误信息如下: [html] view plaincopy Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that    [html] view plaincopy uses a KEY column To disable safe mode

mysql主从复制实现数据库同步

mysql主从复制相信已经用得很多了,但是由于工作原因一直没怎么用过.趁着这段时间相对空闲,也就自己实现一遍.尽管互联网上已有大把类似的文章,但是自身实现的仍然值得记录. 环境: 主服务器:centos 6.0 mysql 5.1.67-log IP:192.168.0.107从服务器:centos 6.0 mysql 5.1.67-log IP:192.168.0.109主服务器test数据库 CREATE TABLE `menber` ( `name` varchar(255) DEFAUL

Mysql主从库不同步1236错误:could not find first log file name in binary...

近日,遇到了Mysql主从库不同步问题,主要是因为电脑断了一下电,折腾啊. 从库日志中的错误:Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file' 解决办法: 1. 首先停止从库同步: slave stop; 2. 主库中清空日志: flush logs; 3.

W‌indows系统mysql服务器主从数据同步备份

windows 2003系统下mysql主从同步备份步骤 A:主服务器 IP地址:192.168.1.124 B:从服务器 IP地址:192.168.1.125   前提:设置同步之前请把保持两个数据库的数据一样!   对A服务器的配置进行修改,打开mysql/my.ini文件,在[mysqld]下面添加如下内容:  代码如下 复制代码 server-id=1 log-bin=E:mailmysqldata   server-id:为主服务器A的ID值 log-bin:二进制变更日值   重启A

mysql 主从数据同步备份经验分享

mysql教程 主从数据同步备份经验分享 准备工作: 1.二台机器(我的是winxp ip 192.168.0.119从主服务器 win2003 192.168.0.17主服务器) 2.在两台机器分别装上mysql数据库教程服务器(注:最好是从服务器版本要高于主服务器版本) 3.为了方便记忆我把主服务器192.168.0.17称作111cn.net-a,从服务器192.168.0.119 111cn.net-b机器 首页我们配置主服务器,创建一个数据库 a111cnnet 创建表test 找到你

MySQL异构数据同步--tair为例

在实现levelDB挂载成MySQL引擎时,发现在实际存储是key-value格式时候,MySQL的异构数据同步,可以更简单和更通用. 以tair为例,简要描述一下以MySQL为基础的一种方案. 所谓异构数据同步,是指应用只更新MySQL,而由后端的某些机制将这些更新应用到其他数据存储服务上. 1.MySQL-Tair 引擎 a) 使用 b) 说明 这不是一个"存储引擎",实际上数据存储在tair服务器上.执行insert/update/delete时,只是将对应的动作put /rem

Mysql 5.6主从同步失败的解决办法

明天就五一了, 结果数据库挂了~ 原因还没搞清楚,不过主从同步也随之出问题了~ 按照常理跳过问题点的处理方式已经没办法解决了, 所以这里提供我的暴力处理方式 首先登陆主数据库,锁表.重置位置即文件参数(都说了是暴力) FLUSH TABLES WITH READ LOCK; reset master; 用各种办法备份你的所有待同步的表,比如到处语句啊, 还有直接把数据库文件复制到从服务器上呀(仅限MyISAM), 总之方法随便你 其次登陆从数据库,重置参数 reset master; stop

mysql-navicat Mysql 导入Excel数据 错误代码1000

问题描述 navicat Mysql 导入Excel数据 错误代码1000 navicat Mysql 导入Excel数据 时一直错误1000 请问是什么原因 要怎么解决 解决方案 这不是错误1000,而是说有1000个错误.你贴截图就这么一点哪里知道. 解决方案二: excel中第一行的字段名必须与mysql中目标数据表的字段名相同 检查有没有空行,错误的数据类型,或者你的excel文件本身是别的数据格式 解决方案三: 估计是你的数据库数据格式跟excel等对应不上,还要注意分隔符,换行符等是

MySQL5.6主从复制(mysql数据同步配置)_Mysql

规划 master 192.168.56.2 slave  192.168.56.5 1.在主库上,设置一个复制使用的账户rep1,并授予REPLICATION SLAVE权限. mysql> grant replication slave on *.* to 'rep1'@'192.168.56.2' identified by '123456'; Query OK, 0 rows affected (0.01 sec) 2.修改主数据库服务器的配置文件my.cnf,开启BINLOG,并设置s