MySQL是一种广泛使用的关系数据库管理系统,其数据恢复功能是确保数据完整性和系统可靠性的关键部分,在实际操作中,MySQL的还原数据库过程通常涉及两个主要环节:下线和还原。
MySQL实例恢复步骤
1、应用重做日志:这是实例恢复的第一步,在实例初始化期间执行,此时不接受任何连接,如果在关机或崩溃时,所有更改都从缓冲池刷新到表空间(ibdata和.ibd文件),那么重做日志应用程序可以跳过,如果启动时缺少重做日志文件,InnoDB会跳过重做日志应用,即使数据丢失,也不建议删除重做日志以加快恢复过程,仅在干净关闭后才被视为一个选项执行,删除重做日志是可以接受的,innodb_fast_shutdown设置为0或1。
2、回滚未完成的事务:在崩溃时处于活动状态(未提交)的任何事务都将回滚,回滚未完成的事务所花费的时间可能是事务在中断之前处于活动状态的时间长度三倍或四倍,具体取决于服务器负载,无法取消正在回滚的事务,在极端情况下,回滚可能需要特别长的时间,也可能很快,取决于innodb_force_recovery设置为3或更高值。
3、更改缓冲区合并:将更改缓冲区(系统表空间的一部分)中的更改应用于二级索引的叶页,因为索引页被读取到缓冲池。
4、清除非活动事物:删除任何标记已删除记录,那些对活动事务不再可见的记录,重做日志应用之后的步骤不依赖于重做日志(除了用于记录重做日志)并且正常处理并行执行,只有不完整的回滚事务对于崩溃恢复是特殊的,插入缓冲区合并和清除是在正常处理期间执行。
5、尽快接受客户端请求,减少宕机时间:作为崩溃恢复的一部分,在服务器崩溃,InnoDB回滚任何未提交的事务或在XA PREPARE状态下的事务,回滚由后台线程执行,与来自新连接的事务并行执行,在回滚操作完成之前,新连接可能会遇到与已恢复事务的锁定冲突,在大多数情况下,即使MySQL服务器在繁重的活动中被意外杀死,恢复过程自动发生,DBA不需要任何操作,如果是硬件失败或严重的系统错误导致InnoDB数据损坏,MySQL可能会拒绝启动。
演示实例恢复
在CentOS 7.2.1511 (Core)上,可以通过以下命令查看MySQL的版本信息:
(root@localhost)[(none)]> show variables like 'version';
然后创建一个测试表并插入一些数据:
(root@localhost)[(none)]> create table sakila.t20(id int, descr varchar(20)); INSERT INTO sakila.t20 VALUES (1, 'Instrecovery'); SET autocommit=0; INSERT INTO sakila.t20 VALUES (2, 'lost');
通过ps ef|grep mysqld
命令找到mysqld进程的PID,并通过kill 9
命令结束该进程,之后,mysqld会自动重启,观察日志的输出情况:
tail fn 100 /var/lib/mysql/mysqld.log
MySQL的数据恢复是一个复杂但至关重要的过程,它涉及到多个步骤和技术细节,理解这些步骤和技术细节对于确保数据库系统的稳定运行和数据的安全性至关重要。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1096082.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复