MySQL数据库出错

在主库上备份表 t (假设备份快照 GTID 为 aaaa:1-10000);恢复到从库;启动复制。这里的问题是复制起始位点是 aaaa:101,从库上表 t 的数据状态是领先其他表的。aaaa:101-10000 这些事务中只要有修改表 t 数据的事务,就会导致复制报错 ,比如主键冲突、记录不存在(而 aaaa:101 这个之前复制报...
MySQL数据库出错
如果从库上表 t 数据与主库不一致,导致复制错误,整个库的数据量很大,重做从库很慢,如何单独恢复这张表的数据?通常认为是不能修复单表数据的,因为涉及到各表状态不一致的问题。下面就列举备份单表恢复到从库会面临的问题以及解决办法:

场景 1
如果复制报错后,没有使用跳过错误、复制过滤等方法修复主从复制。主库数据一直在更新,从库数据停滞在报错状态(假设 GTID 为 aaaa:1-100)。
修复步骤:
在主库上备份表 t (假设备份快照 GTID 为 aaaa:1-10000);
恢复到从库;
启动复制。
这里的问题是复制起始位点是 aaaa:101,从库上表 t 的数据状态是领先其他表的。aaaa:101-10000 这些事务中只要有修改表 t 数据的事务,就会导致复制报错 ,比如主键冲突、记录不存在(而 aaaa:101 这个之前复制报错的事务必定是修改表 t 的事务)
解决办法:启动复制时跳过 aaaa:101-10000 这些事务中修改表 t 的事务。
正确的修复步骤:
1. 在主库上备份表 t (假设备份快照 GTID 为 aaaa:1-10000),恢复到从库;
2. 设置复制过滤,过滤表 t:
CHANGE REPLICATION FILTER REPLICATE_WILD_IGNORE_TABLE = ('db_name.t');3. 启动复制,回放到 aaaa:10000 时停止复制(此时从库上所有表的数据都在同一状态,是一致的);
START SLAVE UNTIL SQL_AFTER_GTIDS = 'aaaa:10000';4. 删除复制过滤,正常启动复制。
注意事项:这里要用 mysqldump --single-transaction --master-data=2,记录备份快照对应的 GTID
场景 2
如果复制报错后,使用跳过错误、复制过滤等办法修复了主从复制。主、从库数据一直在更新。
修复步骤:
在主库上备份表 t (假设备份快照 GTID为 aaaa:1-10000);
停止从库复制,GTID为 aaaa:1-20000;
恢复表 t 到从库;
启动复制。
这里的问题是复制起始位点是 aaaa:20001,aaaa:10000-20000 这些事务将不会在从库上回放,如果这里面有修改表 t 数据的事务,从库上将丢失这部分数据。
解决办法:从备份开始到启动复制,锁定表 t,保证 aaaa:10000-20000 中没有修改表 t 的事务。
正确修复步骤:
对表 t 加读锁;
在主库上备份表 t;
停止从库复制,恢复表 t;
启动复制;
解锁表 t。
如果是大表,这里可以用可传输表空间方式备份、恢复表,减少锁表时间。
2020-12-15
它是说你的程序安装路径中含有非ASCII码字符,所以无法启动,我估计你的路径里含有中文或其他什么符号,你检查一下吧,安装的时候路径里面最好不要有中文,最好全英文,那样肯定不会出错。2019-09-27
检查下你mysql的安装目录是不是有中文或者中符号等非ASCII字符,如果有,重新安装下吧
如果安装目录ok,再检查下你的mysql配置文件中的配置项,例如数据存储目录啥的是不是存在同上的问题2019-10-27
mengvlog 阅读 7 次 更新于 2025-07-20 16:38:24 我来答关注问题0
  •  翡希信息咨询 mysql数据库报1-Can't create/write to file 'C:\WINDOWS\TEMP\#sql_1588_0.MYI'(Errcode:17)的错误。

    原因:MySQL可能配置了错误的临时文件夹路径,或者该路径指向了一个受保护的系统目录。解决方法:检查MySQL的配置文件,找到tmpdir设置,并确保它指向一个具有足够权限且非系统关键目录的路径。通常,建议将临时文件夹设置在MySQL数据目录或专门的临时文件存储区域。磁盘空间不足:原因:C:WINDOWSTEMP所在磁盘可...

  •  阿暄生活 mysql连接不上数据库10038怎么办?mysql连接数据库错误10038解决方法

    遇到MySQL连接数据库错误10038时,可以尝试以下解决方法:方法一:确认MySQL服务及配置 确认MySQL服务正在运行:在Windows系统中,可以通过任务管理器或服务管理器检查MySQL服务是否正在运行。使用命令行输入net start mysql来启动MySQL服务(如果未运行)。确认MySQL服务器端口号:打开MySQL配置文件my.cnf,通常位...

  • 2. 存储空间问题:MySQL需要足够的存储空间来创建数据库,如果磁盘空间不足,创建数据库就会失败。3. 数据库名称问题:可能是因为数据库名称不符合MySQL的命名规则,或者已经存在同名数据库。解决方法:1. 确认用户权限:可以登录MySQL服务器,使用以下命令查看当前用户的权限:SHOW GRANTS;如果当前用户没有创...

  • 无法启动MySQL数据库的原因可能有以下几种:配置文件错误:原因:my.ini文件中的配置信息可能不正确,如端口号被占用、数据目录路径错误等。解决方法:检查my.ini文件,确保所有配置项都正确无误,特别是数据目录、端口号等关键配置。MySQL服务未正确安装:原因:在执行mysqld install命令时可能出错,导致MySQ...

  • 重启MySQL的命令:service mysqld restart 解决方法二:查看MySQL日志文件 当MySQL无法打开数据库时,可以尝试查看MySQL的日志文件,找出错误提示。以下是查看MySQL日志文件的方法:1. 登录MySQL,运行以下命令:show variables like ‘%log%’;2. 找出错误提示所对应的日志文件路径,运行以下命令...

檬味博客在线解答立即免费咨询

mySQL相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部