mysql主从同步配置及故障定位

这篇具有很好参考价值的文章主要介绍了mysql主从同步配置及故障定位。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、mysql主从配置过程

主节点:
    1) 启动二进制日志;
        vim /etc/my.cnf | vim /etc/my.cnf.d/server.cnf
            [mysqld]
            log-bin=master-bin
            server-id=1
            innodb_file_per_table=ON
            skip_name_resolve=ON
        systemctl restart mysqld
    2) 为当前节点设置一个全局唯一的id号;
    3) 创建有复制权限REPLICATION SLAVE, REPLICATION CLIENT的用户账号;
        grant replication slave,replication client on *.* to 'repluser'@'172.18.%.%' identified by 'replpass';
        flush privileges;

从节点:
    1) 启动中继日志;
        vim /etc/my.cnf
            relay-log=relay-log
            server-id=2
            innodb_file_per_table=ON
            skip_name_resolve=ON
        systemctl restart mysqld
    2) 为当前节点设置一个全局唯一的id号并且和主节点不同;
    3) 使用有复制权限的账号连接至主服务器,并启动复制线程;
        change master to master_host='$ip',master_user='repluser',master_password='replpass',master_log_file='master-bin.000003',master_log_pos=245;
        start slave;

二、mysql主从同步故障定位

1.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

问题原因:mysql主库和从库server_id相同

更改从库id既可

2.error executing row event: 'table doesn't exist'

问题原因:主库中有数据,从库是空库无法直接同步

需先导入一次主库备份的全量备份数据,再进行主从同步

3.could not execute update_rows event on table super_pms.issue_cli_queue; can't find record in 'issue_cli_queue', error_code: 1032; handler error ha_err_key_not_found; the event's master log mysql-bin-log.001793, end_log_pos 336631
解决办法:

mysql> stop slave ;
mysql> set global sql_slave_skip_counter=1;
mysql> start slave;
 

 4.ERROR 1858 (HY000): sql_slave_skip_counter can not be set when the server is running with @@GLOBAL.GTID_MODE = ON. Instead, for each transaction that you want to skip, generate an empty transaction with the same GTID as the transaction

解决办法:

mysql> stop slave;
mysql> set global gtid_mode=ON_PERMISSIVE; 
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
mysql> START SLAVE; 
mysql> SHOW SLAVE STATUS\G;

mysql> set global gtid_mode=ON;
mysql> show variables like 'gtid_mode';

5.error 1236 报错

5.1 logevent超过max_allowed_packet 大小

  1. Got fatal error 1236 from master when reading data from binary log: 'log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master; the start event position from 'mysql-bin.006730' at 290066246, the last event was read from '/u01/my3309/log/mysql-bin.006730

原因
   此类报错和max_allowed_packet相关。首先max_allowed_packet控制着主从复制过程中,一个语句产生的二进制binlog event大小,它的值必须是1024的倍数 。出现此类错误的常见原因是
 1 该参数在主备库的配置大小不一样,主库的配置值大于从库的配置值。 从主库传递到备库的binlog event大小超过了主库或者备库的max_allowed_packet大小。
 2 主库有大量数据写入时,比如在主库上执行 laod data,insert into .... select 语句,产生大事务。
当主库向从库传递一个比从库的max_allowed_packet 大的packet ,从库接收该packet失败,并报 “log event entry exceeded max_allowed_packet“。
如何解决
 需要确保主备配置一样,然后尝试调大该参数的值。

mysql> set global max_allowed_packet =1*1024*1024*1024;
mysql> stop slave;
mysql> start slave

另外,5.6 版本中的 slave_max_allowed_packet_size 参数控制slave 可以接收的最大的packet 大小,该值通常大于而且可以覆盖 max_allowed_packet 的配置, 进而减少由于上面的问题导致主从复制中断。

5.2 slave 在主库找不到binlog文件 

  1. Got fatal error 1236 from master when reading data from binary log:

原因
 该错误发生在从库的io进程从主库拉取日志时,发现主库的mysql_bin.index文件中第一个文件不存在。出现此类报错可能是由于你的slave 由于某种原因停止了好长一段是时间,当你重启slave 复制的时候,在主库上找不到相应的binlog ,会报此类错误。或者是由于某些设置主库上的binlog被删除了,导致从库获取不到对应的binglog file。
如何解决
 1 为了避免数据丢失,需要重新搭建slave 。
 2 注意主库binlog的清理策略,选择基于时间过期的删除方式还是基于空间利用率的删除方式。
  不要使用rm -fr 命令删除binlog file,这样不会同步修改mysql_bin.index 记录的binlog 条目。在删除binlog的时候确保主库保留了从库 show slave status 的Relay_Master_Log_File对应的binlog file。

5.3 主库空间问题,日志被截断

  1. Got fatal error 1236 from master when reading data from binary log: 'binlog truncated in the middle of event; consider out of disk space on master; the start event position from 'mysql-bin.006730' at 290066434, the last event was read from '/u01/my3309/log/mysql-bin.006730

原因
 该错误和主库的空间问题和sync_binlog配置有关,当主库 sync_binlog=N不等于1且磁盘空间满时,MySQL每写N次binary log,系统才会同步到磁盘,但是由于存储日志的磁盘空间满而导致MySQL 没有将日志完全写入磁盘,binlog event被截断。slave 读取该binlog file时就会报错"binlog truncated in the middle of event;"
 当sync_binlog 的默认值是0,像操作系统刷其他文件的机制一样,MySQL不会同步到磁盘中去而是依赖操作系统来刷新binary log。
 当sync_binlog =N (N>0) ,MySQL 在每写 N次 二进制日志binary log时,会使用fdatasync()函数将它的写二进制日志binary log同步到磁盘中去。
如何解决
 在从库重新指向到主库下一个可用的binlog file 并且从binlog file初始化的位置开始

mysql> stop slave;
mysql> change master to master_log_file='mysql-bin.006731', master_log_pos=4;
mysql> start slave;

5.4 主库异常断电,从库读取错误的position

  1. 120611 20:39:38 [ERROR] Error reading packet from server: Client requested master to start replication from impossible position ( server_errno=1236) 
  2. 120611 20:39:38 [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
  3. 120611 20:39:38 [Note] Slave I/O thread exiting, read up to log 'mysql-bin.000143', position 664526789

【原因】
 该问题也是和sync_binlog=N不等于1有关,多出现在主机异常crash ,比如磁盘损坏,raid 卡损坏,或者主机异常掉电导致binlog 未及时同步到磁盘。从库读取了主库binlog file中的不存在的binlog position ,一般比binlogfile 的end position 的值还要大。
如何解决
1 在从库重新指向到主库下一个可用的binlog file 并且从binlog file初始化的位置开始

mysql> stop slave;
mysql> change master to master_log_file='mysql-bin.000144', master_log_pos=4;
mysql> start slave;

2 主备库设置 sync_binlog=1,但是设置为1的时候,会带来性能下降。 文章来源地址https://www.toymoban.com/news/detail-512944.html

到了这里,关于mysql主从同步配置及故障定位的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【mysql】MySQL 主从同步延迟排查

    错误日志: ○ 寻找与同步问题相关的错误消息或警告。 复制状态: ○ SHOW SLAVE STATUS 并行复制设置: ○ 确保 slave_parallel_workers 的值合适。如果值过高,可能会导致资源竞争,而值过低可能会导致性能下降。 长事务: ○ 查询长时间运行的事务,可能会影响到复制的正常进行

    2024年02月07日
    浏览(40)
  • mysql 主从同步

    角色 ip master 192.168.233.100 slave1 192.168.233.101 slave2 192.168.233.102 禁用 selinux 跟 firewal l情况下: 新路径已修改为 /var/lib/mysql/new_bin master 节点信息 在 master 节点新建同步账号 在 master 与 slave 节点创建数据库 在 slave1 节点配置 发现错误:Last_IO_Error: Fatal error: The slave I/O thread stops be

    2024年02月07日
    浏览(30)
  • mysql 主从同步案例集合

      relay log 损坏了,导致从库的 SQL 线程解析 relay log 时出现异常。从库恢复方式是通过手动设置当时出错的 GTID 的下一个值,让从库不从主库同步这个 GTID,最后从库就能正常同步这个 GTID 之后的 binlog 了,后续 SQL 线程也能正常解析 relay log 了。 你好,我是悟空。 本文主要内

    2023年04月14日
    浏览(36)
  • Mysql架构篇--Mysql 主从同步方案

    本文对mysql的传统主从复制,半同步复制和组复制进行介绍。 Master 数据库只要发生变化,立马记录到Binlog 日志文件中,Slave数据库启动一个I/0 thread连接Master数据库,请求Master变化的二进制日志。Save I/0获取到的二进制日志,保存到自己的Relay log 日志文件中。Slave 有一个 SQL

    2024年02月07日
    浏览(32)
  • MySQL主从同步(不开GTID)

    一、背景 了解并熟悉MySQL的主从同步的搭建过程,并解决搭建过程中所碰到的问题。 二、目标 了解并熟悉MySQL的主从同步的搭建过程,并解决搭建过程中所碰到的问题。 IP地址 MySQL版本 主从关系 192.168.3.244 5.6.51 Master 192.168.3.245 5.7.41 Slaver 192.168.3.246 8.0.33 Slaver 三、过程 1、安

    2024年02月06日
    浏览(46)
  • MySQL数据库实现主从同步

    安装MySQL数据库8.0.32 今天来学习数据库主从同步的原理及过程,数据库主要是用来存储WEB数据,在企业当中是极为重要的,下面一起来看下。 MySQL主从复制在中小企业,大型企业中广泛使用,MySQL主从复制的目的是实现数据库冗余备份,将master数据库数据定时同步到slave数据库

    2024年02月02日
    浏览(41)
  • 使用本地mysql+linux实现mysql主从同步

    1.1修改该linux配置文件 1.2重启linux的mysql 1.3使用账户密码登录linux中的mysql,查看是否配置成功 若显示有FIile和Posttion就表示注linux的主节点配置成功 注意事项: 本地的这个数据库的权限必须是管理员权限,否则会出现数据库不能进行访问,配置就会失败 2.1修改本地mysql中的 my.ini 文

    2024年02月09日
    浏览(31)
  • Mysql架构篇--Mysql(M-S) 主从同步

    MySQL主从同步(MySQL Replication)是MySQL服务器的一个常用特性,它能够将MySQL服务器数据自动同步到其他MySQL服务器上,从而实现数据备份和负载均衡的功能。在实际应用中,MySQL主从同步可以用于实现高可用、灾备转移、读写分离等。 首先需要有大于等于2个的mysql 实例,一个

    2024年02月09日
    浏览(42)
  • MySQL 主从复制[异步 同步 半同步复制] 读写分离 优化 (非常重要)

    1、什么是读写分离? 读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。 2、为什么要读写分离呢? 因为数据库的“写”(写10000条数据

    2024年02月11日
    浏览(47)
  • MySQL 故障诊断:MySQL 占用 CPU 过高问题定位及优化

    CPU 占用过高常见现象 在使用 MySQL 的过程中会遇到各种瓶颈问题,常见的是 IO 瓶颈,但是有时候会出现服务器 CPU 使用率超过 100%,应用页面访问慢,登录服务器负载很高。而导致这个问题竟然是 MySQL 进程,按理说如果 MySQL 运行稳定,服务器的 CPU 资源并不会跑满,如果出现

    2024年04月25日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包