mysql主从错误总结

转自:http://blog.51cto.com/loose/1224564
1 、出现错误提示
Slave I/O: error connecting to master ‘backup@192.168.0.x:3306’ -retry-time: 60 retries: 86400,Error_code: 1045

解决方法:
从服务器上删除掉所有的二进制日志文件,包括一个数据目录下的master.info文件和hostname -relay-bin 开头的文件 。
master.info: 记录了Mysql主服务器上的日志文件和记录位置、连接的密码 。
#rm -rf .

2 、出现错误提示
Error reading packet from server: File ‘/home/mysql/mysqlLog/log.000001’ not found (Errcode: 2) (server_errno=29)

解决方法:
由于主服务器运行了一段时间,产生了二进制文件,而slave是从log.000001开始读取的,删除主机二进制文件,包括log.index文件。

3 、错误提示如下
Slave SQL: Error ‘Table ‘xxxx’ doesn’t exist’ on query. Default database: ‘t591’. Query: ‘INSERT INTO xxxx(type,post_id,browsenum) SELECT type,post_id,browsenum FROM xxxx WHERE hitdate=‘20090209’’, Error_code: 1146

解决方法:
由于slave没有此table表,添加这个表使用slave start就可以继续同步。

4 、错误提示如下
Error ‘Duplicate entry ‘1’ for key 1’ on query. Default database: ‘movivi1’. Query: ‘INSERT INTO v1vid0_user_samename VALUES(null,1,‘123’,‘11’,‘4545’,‘123’)’

Error ‘You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘’ at line 1’ on query. Default database: ‘club’. Query: ‘INSERT INTO club.point_process (GIVEID, GETID, POINT, CREATETIME, DEMO) VALUES (0, 4971112, 5, ‘2010-12-19 16:29:28’,’
1 row in set (0.00 sec)

Mysql> Slave status\G;
显示:Slave_SQL_Running为NO
解决方法:
Mysql> stop slave;
Mysql> set global sql_slave_skip_counter =1 ;
Mysql> start slave;

5 、错误提示如下

show slave status\G;

Master_Log_File: mysql-bin.000029
Read_Master_Log_Pos: 3154083
Relay_Log_File: c7-relay-bin.000178
Relay_Log_Pos: 633
Relay_Master_Log_File: mysql-bin.000025
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB: club
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 1594
Last_Error: Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master’s binary log is corrupted (you can check this by running ‘mysqlbinlog’ on the binary log), the slave’s relay log is corrupted (you can check this by running ‘mysqlbinlog’ on the relay log), a network problem, or a bug in the master’s or slave’s MySQL code. If you want to check the master’s binary log or slave’s relay log, you will be able to know their names by issuing ‘SHOW SLAVE STATUS’ on this slave.
Skip_Counter: 0
Exec_Master_Log_Pos: 1010663436

这个问题原因是,主数据库突然停止或问题终止,更改了mysql-bin.xxx日志,slave服务器找不到这个文件,需要找到同步的点和日志文件,然后chage master即可。
解决方法:

change master to
master_host=‘192.168.0.1’,
master_user=‘同步帐号’,
master_password=‘同步密码’,
master_port=3306,
master_log_file=‘mysql-bin.000002’,
master_log_pos=106;

6 、错误提示如下

Error ‘Unknown column ‘qdir’ in ‘field list’’ on query. Default database: ‘club’. Query: ‘insert into club. question_del (id, pid, ques_name, givepoint, title, subject, subject_pid, createtime, approve, did, status, intime, order_d, endtime,banzhu_uid,banzhu_uname,del_cause,qdir) select id, pid, ques_name, givepoint, title, subject, subject_pid, createtime, approve, did, status, intime, order_d, endtime,‘1521859’,‘admin0523’,’ 无意义回复 ‘,qdir from club.question where id=7330212’
1 row in set (0.00 sec)

这个错误就说 club.question_del 表里面没有 qdir 这个字段 造成的加上就可以了 ~ !
在主的mysql:里面查询 Desc club. question_del ;
在错误的从服务器上执行:alter table question_del add qdir varchar(30) not null;

7 、错误提示如下
Slave_IO_Running: NO

这个错误就是IO进程没连接上,想办法连接上把与主的POS号和文件一定要对,然后重新加载下数据。
具体步骤:
slave stop;
change master to
master_host=‘IP地址’,
master_user=‘backup’,
master_password=‘123456’,master_log_file=‘mysqld-bin.000008’,MASTER_LOG_POS=396;
注:master_log_file=‘mysqld-bin.000008’,MASTER_LOG_POS=396;是从主的上面查出来的:show master status\G;

LOAD DATA FROM MASTER;
load data from master;
slave start;

8、错误提示如下
使用mysqlbinlog进行分析日志 包以下错误:

mysqlbinlog --no-defaults mysql-bin.000488 > 488.sql

ERROR: Error in Log_event::read_log_event(): ‘Found invalid event in binary log’, data_len: 66, event_type: 19

这个错误是使用的mysqlbinlog的版本不正确

whereis mysqlbinlog

mysqlbinlog: /usr/bin/mysqlbinlog

/usr/bin/mysqlbinlog --no-defaults -V

/usr/bin/mysqlbinlog Ver 3.2 for redhat-linux-gnu at x86_64

/usr/local/mysql/bin/mysqlbinlog --no-defaults -V

/usr/local/mysql/bin/mysqlbinlog Ver 3.3 for unknown-linux-gnu at x86_64

通过查询果然发现在默认情况下调用的是系统默认安装的mysql中的mysqlbinlog,因为这个mysqlbinlog的版本和当前的bin_log的版本不能对应起来,所以不能处理,使用对应的mysqlbinlog工作正常

/usr/local/mysql/bin/mysqlbinlog --no-defaults mysql-bin.000488 |more

/!40019 SET @@session.max_insert_delayed_threads=0/;
/!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0/;
DELIMITER /!/;

at 4

#120228 23:05:14 server id 1 end_log_pos 106 Start: binlog v 4, server v 5.1.41-log created 120228 23:05:14
BINLOG ’
Ku1MTw8BAAAAZgAAAGoAAAAAAAQANS4xLjQxLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
'/!/;

at 106

#120228 23:05:14 server id 1 end_log_pos 181 Query thread_id=175240 exec_time=0 error_code=0

使用以下命令查看二进制文件后,可以正确查看到内容:
/usr/local/mysql_dir/bin/mysqlbinlog /tmp/1.000001或者将/usr/bin/上的mysqlbinlog替换成/usr/local/mysql_dir/bin/下的也可以,如cp /usr/local/mysql_dir/bin/mysqlbinlog /usr/bin/mysqlbinlog,替换成功后,再执行命令mysqlbinlog /tmp/1.000001

9、解决ERROR 1146 (42S02): Table ‘mysql.servers’ doesn’t exist问题

(1)使用mysqld_safe --skip-grant-tables 启动数据库
(2)使用mysql进入数据库
(3)use mysql
(4)创建表 mysql.servers
CREATE TABLE mysql.servers (
Server_name char(64) NOT NULL,
Host char(64) NOT NULL,
Db char(64) NOT NULL,
Username char(64) NOT NULL,
Password char(64) NOT NULL,
Port int(4) DEFAULT NULL,
Socket char(64) DEFAULT NULL,
Wrapper char(64) NOT NULL,
Owner char(64) NOT NULL,
PRIMARY KEY (Server_name)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT=‘MySQL Foreign Servers table’;
(5)flush privileges; 成功

10、由于主服务器异外重启, 导致从报错, 错误如下:
show slave status错误:
mysql> show slave status\G
Master_Log_File: mysql-bin.000288
Read_Master_Log_Pos: 627806304
Relay_Log_File: mysql-relay-bin.000990
Relay_Log_Pos: 627806457
Relay_Master_Log_File: mysql-bin.000288
Slave_IO_Running: No
Slave_SQL_Running: Yes
Exec_Master_Log_Pos: 627806304
Relay_Log_Space: 627806663


Last_IO_Error:
Got fatal error 1236 from master when reading
data from binary log:
‘Client requested master to start
replication from impossible position’
mysql错误日志:

tail /data/mysql/mysql-error.log
111010 17:35:49 [ERROR] Error reading packet from server: Client requested master
to start replication from impossible position ( server_errno=1236)
111010 17:35:49 [ERROR]
Slave I/O: Got fatal error 1236 from master when reading data
from
binary log: ‘Client requested master to start replication from impossible
position’, Error_code: 1236
111010 17:35:49 [Note] Slave I/O thread exiting, read up to log ‘mysql-bin.000288’,
position 627806304
按照习惯, 先尝试必改position位置.

mysql> stop slave;mysql> change master to master_log_file=‘mysql-bin.000288’,master_log_pos=627625751;mysql> start slave;
错误依旧, 接下来登陆到主服务器查看binlog日志.
先按照错误点的标记去主服务器日志中查找:

[root@db1 ~]# mysqlbinlog --start-position=627655136 /data/mysql/binlog/mysql-bin.000288
/!40019 SET @@session.max_insert_delayed_threads=0/;
/!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0/;
DELIMITER /!/;

at 4

#111010 13:31:19 server id 4 end_log_pos 106 Start: binlog v 4, server v 5.1.45-log
created 111010 13:31:19

Warning: this binlog is either in use or was not closed properly.

BINLOG ’
F1aTTg8EAAAAZgAAAGoAAAABAAQANS4xLjQ1LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
'/!/;
DELIMITER ;

End of log file

ROLLBACK /* added by mysqlbinlog /;
/
!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
没有看到这个位置.

[root@db1 ~]# mysqlbinlog /data/mysql/binlog/mysql-bin.000288 > test.txt

less text.txt
看最后一部分

at 627625495

#111010 16:35:46 server id 1 end_log_pos 627625631 Query thread_id=45613333
exec_time=32758 error_code=0
SET TIMESTAMP=1318289746/!/;
delete from freeshipping_bef_update where part=‘AR-4006WLM’ and code=’’
/!/;

at

627625631#111010 16:35:46 server id 1 end_log_pos 627625751
Query thread_id=45613333
exec_time=32758 error_code=0
SET TIMESTAMP=1318289746/!/;
delete from shippingFee_special where part=‘AR-4006WLM’
/!/;
DELIMITER ;

End of log file

ROLLBACK /* added by mysqlbinlog /;
/
!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
找到最接近错误标记627655136的一个position是627625631.

再回到slave机器上change master, 将postion指向这个位置.

mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)

mysql>
change master to master_log_file=‘mysql-bin.000288’,master_log_pos=627625631;
Query OK, 0 rows affected (0.06 sec)

mysql>
start slave;Query OK, 0 rows affected (0.00 sec)
再次查看

mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Queueing master event to the relay log
Master_Host: 192.168.21.105
Master_User: rep
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mysql-bin.000289
Read_Master_Log_Pos: 25433767
Relay_Log_File: mysql-relay-bin.000003
Relay_Log_Pos: 630
Relay_Master_Log_File: mysql-bin.000289
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
主从同步正常了, 同样的方法修复其它slave机器.

11、在做MySQL主从复制时遇到个ERROR 1201 (HY000): Could not initialize master info structure .
出现这个问题的原因是之前曾做过主从复制!

解决方案是:运行命令 stop slave;
成功执行后继续运行 reset slave;
然后进行运行GRANT命令重新设置主从复制。
具体过程如下:
mysql> change master to master_host=‘192.168.0.1’, master_user=‘backup’, master_pass
word=‘123456’, master_log_file=‘mysql-bin-000002’, master_log_pos=553;
ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log
mysql> stop slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> reset slave;
Query OK, 0 rows affected (0.00 sec)

mysql> change master to master_host=‘192.168.0.1’, master_user=‘backup’, master_pass
word=‘123456’, master_log_file=‘mysql-bin-000002’, master_log_pos=553;
Query OK, 0 rows affected (0.11 sec)

12、在没有解锁的情况下停止slave进程:

> stop slave;

ERROR 1192 (HY000): Can’t execute the given command because you have active locked tables or an active transaction

13、change master语法错误,落下逗号

mysql> change master to
-> master_host=‘IP’
-> master_user=‘USER’,
-> master_password=‘PASSWD’,
-> master_log_file=‘mysql-bin.000002’,
-> master_log_pos=106;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'master_user=‘USER’,
master_password=‘PASSWD’,
master_log_file=‘mysql-bin.000002’ at line 3

14、在没有停止slave进程的情况下change master

mysql> change master to master_host=‘IP’, master_user=‘USER’, master_password=‘PASSWD’, master_log_file=‘mysql-bin.000001’,master_log_pos=106;
ERROR 1198 (HY000): This operation cannot be performed with a running slave; run STOP SLAVE first

15、A B的server-id相同:

Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids;
these ids must be different for replication to work (or the --replicate-same-server-id option must be used on
slave but this does not always make sense; please check the manual before using it).
查看server-id
mysql> show variables like ‘server_id’;
手动修改server-id
mysql> set global server_id=2; #此处的数值和my.cnf里设置的一样就行
mysql> slave start;

6)change master之后,查看slave的状态,发现slave_IO_running 为NO
需要注意的是,做完上述操作之后最后重启mysql进程

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL主从监控工具是一种用于监控MySQL数据库主从同步状态的工具。它可以帮助管理员实了解主从同步的情况,及发现并解决问题,确保数据库的高可用性和数据一致性。 MySQL主从监控工具通常具有以下功能: 1. 数据同步监控:通过监控主从的二进制日志文件和复制线程状态,实监测主从同步的延迟和错误,如IO线程停止、SQL线程停止等,对备库的同步状态进行实监控。 2. 健康度监控:通过监控数据库运行状态,如CPU利用率、内存使用情况、硬盘空间等,及发现并解决可能影响主从同步的健康问题,如资源不足、负载过高等。 3. 数据一致性监控:通过对比主库和备库的数据差异,检测数据一致性问题,如数据丢失、数据不一致等,保证备库数据的准确性。 4. 告警通知:在主从同步发生问题,通过邮件、短信等方式发送告警通知,及提醒管理员并采取相应措施,防止问题进一步扩大。 5. 历史数据分析:对主从同步状态进行历史数据的记录和分析,生成报表和图表,以便管理员了解主从同步的趋势和性能变化,为性能优化和故障排查提供支持。 常见的MySQL主从监控工具包括Percona Toolkit、MHA、MySQL Replication Monitor等。这些工具提供了图形化界面和命令行界面,方便管理员进行配置、监控和管理。 总之,MySQL主从监控工具是数据库管理员保证MySQL主从同步高可用性和数据一致性的重要辅助工具,它能够及发现并解决问题,提高数据库的可靠性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值