php制作网站,建筑网站 法人签字,做医疗的网站,手机网站素材事情起因
在做docker作业的时候#xff0c;把卷映射到了宿主机原来的mysql数据库目录上#xff0c;宿主机原来的mysql版本为8.0#xff0c;docker容器版本为5.6#xff0c;导致翻车。
具体操作
备份目录
将/var/lib/mysql备份到~/mysql_backup#xff1a;cp /var/lib/…事情起因
在做docker作业的时候把卷映射到了宿主机原来的mysql数据库目录上宿主机原来的mysql版本为8.0docker容器版本为5.6导致翻车。
具体操作
备份目录
将/var/lib/mysql备份到~/mysql_backupcp /var/lib/mysql ~/mysql_backup -r
重装mysql
教程
第一次恢复数据
尝试根据备份文件进行恢复。
把备份的数据库guess_word_game拷贝到新的数据库文件目录中
# 关闭mysql服务 systemctl stop mysqld
mkdir /var/lib/mysql/guess_word_game cp ~/mysql_backup/guess_word_game/* /var/lib/mysql/guess_word_game/ -r
# 修改所有者
chown -R mysql:mysql /var/lib/mysql
# 启动mysql服务
systemctl start mysqld重启mysql服务后发现没有guess_word_game数据库。
覆盖ibdata1到数据目录中
# 关闭mysql服务 systemctl stop mysqld
cp ~/mysql_backup/ibdata1 /var/lib/mysql
# 修改所有者
chown -R mysql:mysql /var/lib/mysql重启mysql服务发现启动失败
查看日志less /var/log/mysqld.log 又炸了–重装吧原因可能是我用hyperf的migrate建表了然后导致数据不对。
第二次恢复数据
查阅文档终于找到解决方法博客网址只需把备份目录中的文件迁移到数据库目录中即可然后再把需要恢复的数据库文件夹迁移进去。 ibdata1保存表中元信息mysql8把表中元信息整合到了.ibd中了ib_logfile0/1redo日志ib_buffer_pool缓冲池auto.cnf存储了server-uuid的值集群模式下有用mysql.ibd存储着一些MySQL服务器内部的元数据信息例如用户权限、存储引擎、字符集等等
迁移完后嗯不出意外的话又出意外了。 这里说mysql版本号太旧新建的文件是80032版本的而数据库版本是80031版本的尼玛这也不兼容好烦只能重装新版mysql了。
重装之后数据恢复了555555 有可能是我在/etc/my.cnf中写了innodb_force_recovery8删掉再重启试试 嗯我又把redo_log迁移过去了一夜回到解放前。吐了。。。
第三次恢复数据
不用重装mysql直接删除/var/lib/mysql目录这次只迁移ibdata1、mysql.ibd和对应数据库文件夹更改文件夹权限然后重启mysqld服务发现不报错了并且数据得到恢复。 可以发现密码没有重置、且对数据库操作权限都在所以判断这些内容都存在mysql.ibd中
总结
mysql无法启动时立即将数据文件备份数据文件目录默认在/var/lib/mysql中。innodb_force_recovery故障时候强制恢复使用这个的时候可以忽略错误正常启动mysql具体见官方文档文档中有数字1-6的具体解释我也不知道数字8代表什么我就不知道在哪个博客看到8我就照搬了–没自己脑子各个文件的意义 ibdata1保存表中元信息mysql8把表中元信息整合到了.ibd中了ib_logfile0/1redo日志ib_buffer_pool缓冲池auto.cnf存储了server-uuid的值集群模式下有用mysql.ibd存储着一些MySQL服务器内部的元数据信息例如用户权限、存储引擎、字符集等等.ibd储存了表中的数据信息B树
其他
其实恢复还有几种方法比如说
通过innodb_force_recovery参数强制启动mysql服务后对数据库数据进行转储sql适用于无bin log的情况通过binlog进行数据恢复没试过下次试一下通过备份进行数据恢复最差方法
在数据恢复中犯的错误
照搬内容不了解别人为什么这么做比如说照搬第二次恢复数据中别人的操作步骤导致把redolog二次迁移而这次故障原因就是redolog的问题
参考资料
innodb_force_recovery