完成了 prepare 阶段,写入 binlog 之前断电这种情况下, mysql 重新启动时,会从 redolog 中读出未 flush 到磁盘中的 page —— buffer pool 。然后从 redolog 重建这些内存中的 page ,以恢复断电之前内存的状态。之后,mysql检测到该事务并未提交,因此主动执行事务的回滚操作。
大渡口ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!
简单情况下:进入原来mysql安装路径下的data文件夹下,找到相应的库和ibdata1,进行copy,就可回复原来的数据。
复杂情况下:
从另一台机上把MySQL数据库的mysql文件夹拷贝到本地机上,目的是恢复本地机对数据的访问和操作。经过如下几种情况的操作。
1. 在本地重装MySQL(安装目录D:\Program Files\MySQL\MySQL Server 5.0),直接把mysql文件夹拷贝至D:\Program Files\MySQL\MySQL Server 5.0\。结果,失败:数据库连接错误。
2. 卸载后重装MySQL,将D:\Program Files\MySQL\MySQL Server 5.0\下的数据备份,只把mysql\data文件夹全部内容拷贝到D:\Program Files\MySQL\MySQL Server 5.0\data下。结果,失败:数据库连接错误。将备份的数据还完覆盖。结果,失败,还是连接不上数据库。
3. 卸载后重装MySQL,将mysql\data文件夹里的cf1,last文件夹(这两个是原来MySQL里的数据库)拷贝进D:\Program Files\MySQL\MySQL Server 5.0\data。连接成功,在Navicat for MySQL里看到数据库cf1和last,但是不能访问,因为数据全为零。明白了原来data里以数据库命名的文件存储的是数据库的表结构,不是元数据。下一步,把data文件夹里的ibdata1文件(3.4G大,明显存储了元数据)拷贝到D:\Program Files\MySQL\MySQL Server 5.0\data里,代替原来的ibdata1文件。重启电脑,打开Navicat for MySQL,连接成功,数据可以访问操作。
至此,操作终于成功。其实当初在那台机上把数据导出来,而不是现在直接把文件夹mysql复制过来会更容易恢复。但那台机已经重装了系统,也就是说MySQL失效了。
第一种:在master上删除一条记录,而slave上找不到。
Last_SQL_Error: Could not execute Delete_rows event on table hcy.t1;
Can't find record in 't1',
Error_code: 1032; handler error HA_ERR_KEY_NOT_FOUND;
the event's master log mysql-bin.000006, end_log_pos 254
第二种:主键重复。在slave已经有该记录,又在master上插入了同一条记录。
Last_SQL_Error: Could not execute Write_rows event on table hcy.t1;
Duplicate entry '2' for key 'PRIMARY',
Error_code: 1062;
handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql-bin.000006, end_log_pos 924
第三种:在master上更新一条记录,而slave上找不到,丢失了数据。
Last_SQL_Error: Could not execute Update_rows event on table hcy.t1;
Can't find record in 't1',
Error_code: 1032;
handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000010, end_log_pos 263
异步半同步区别
mysql主从同步常见异常及恢复方法
1. 一般的异常只需要跳过一步即可恢复
slave stop;
SET GLOBAL sql_slave_skip_counter = 1;
slave start;
2.断电导致主从不能同步时,通主库的最后一个bin-log日志进行恢复
在主库服务器上,mysqlbinlog mysql-bin.xxxx binxxxx.txt
tail -n 100000 binxxxx.txt tail-binxxxx.txt
vim tail-binxxxx.txt 打开tail-binxxxx.txt文件找到最后一个postion值
然后在从库上,change host to 相应正确的值
slave stop;
change master to master_host='ip', master_user='username', master_password='password', master_log_file='mysql-bin.xxxx', master_log_pos=xxxx;
slave start;
show slave status\G;
3.主键冲突、表已存在等错误代码如1062,1032,1060等,可以在mysql主配置文件指定
略过此类异常并继续下条sql同步,这样也可以避免很多主从同步的异常中断
[mysqld]
slave-skip-errors = 1062,1032,1060
修复 mysql 数据库电源故障造成的数据损坏在使用 mysql 数据库时,我们都遇到过电源故障造成的数据库损坏,我们都知道,电源故障或异常关机是 mysql 数据库错误最常见的原因,如何恢复 mysql 数据库是每个人都头疼的问题。有什么办法可以帮你恢复破损的 mysql 数据库吗?当用户由于电源故障而丢失或损坏 mysql 数据库时,如果他们可以进入 mysql 软件但是被错误提示,用户可以使用“系统维护”作为“数据库压缩修复” ,压缩数据库(一些软件在“系统设置”、“系统维护”、“数据库备份和恢复”) ,这种方法只适用于数据库故障修复的一小部分,功能不高。在 web 上 mysql 数据库恢复有两种推荐的方法,一种是使用 sql 语句,如 mysql 的 check table 和 repair table (与 php 的最佳组合) ,另一种是使用 mysql 提供的多个 myisamchk、 isamchk 数据检测和恢复工具(与 php 的最佳组合)。许多用户认为,这两种方法都很复杂,不适合大多数用户。此外,这两种方法都不能有效地恢复 mysql 数据库,还可能导致数据库被进一步破坏,造成不可挽回的损失。由于上述原因,不推荐使用两种 mysql 数据库恢复方法。数据库以下列方式损坏: 1。严重腐败2。轻微腐败3。有些表已损坏,有些表的记录已部分损坏
sql文件如果是完整的话, 去MYSQL命令行 use 库名; source sql文件绝对路径,这样试试. 注意,这样是执行整个SQL文件的,如果你只是要恢复某一部分的话,估计你要打开SQL文件,把那部分复制出来重新存放一个文件