admin 管理员组文章数量: 1184232
接博客上文
http://t.csdnimg/ZEz7M,通过修改本地挂载的myf文件后远程成功连接上了docker部署mysql,但是数据库无法进行修改、删除等操作,这是由于刚刚修该的配置文件造成的
只有在紧急情况下才能设置
innodb_force_recovery大于0,默认值是0,不进行强制恢复的正常启动。innodb_force_recovery一共有6个级别,举例说明:值为3时包括了1和2的功能,值越小越安全;
关于innodb_force_recovery的值
1 (SRV_FORCE_IGNORE_CORRUPT):即使服务器检测到损坏的页仍让它运行。试图使SELECT* FROM tbl_name跳过损坏的索引记录和页,这样有助于转储表。
2 (SRV_FORCE_NO_BACKGROUND):阻止主线程和任何清除线程的运行。如果崩溃会在清除操作中发生,该恢复值会阻止它。
3 (SRV_FORCE_NO_TRX_UNDO):不要在崩溃恢复后运行事务回滚。
4 (SRV_FORCE_NO_IBUF_MERGE):阻止插入缓冲合并操作。如果它们会导致崩溃,不要做这些。不计算表统计。这个值可以永久损坏数据文件。使用这个值后,准备号删除并重建所有辅助索引。在MySQL5.6.15中,设置InnoDB为只读。
5 (SRV_FORCE_NO_UNDO_LOG_SCAN):在启动数据库时不查看撤消日志:InnoDB将即使未完成的事务也作为已提交。这个值可以永久损坏数据文件。在MySQL5.6.15中,设置InnoDB为只读。
6 (SRV_FORCE_NO_LOG_REDO):不要通过恢复对重做日志进行前滚。这个值可能永久损坏数据文件。数据库页被留在一个陈旧的状态,这反过来又可能带给B-trees和其它数据库结构更多的损坏。
这时就需要重建恢复数据库了。
1.备份数据
1.通过docker exec -it mysql容器名 bash 命令进入容器内部
docker exec -it mysql容器名 bash
2.测试数据库是否可以连通:mysql -uroot -p密码
如果可以正常连通则退出可以备份数据:
mysqldump -uroot -p密码 --all-databases > /tmp/all_mysql_bak.sql
(/tmp可以是其他目录, all_mysql_bak.sql文件就是所有的库数据和表数据,到时候回重新导入数据库中;)
3.通过下面命令将刚刚备份好的数据拷贝到容器外
docker cp mysql:/tmp/all_mysql_bak.sql /root
4.停止当前mysql 容器 ,然后将容器删除,如果本地挂载了数据卷,同时需要把数据卷删除(myf可以不删但需要把前面断电添加的配置注释或者删除),再新建
docker stop mysql容器名
docker rm mysql容器名
5.重新部署mysql容器
# 创建并运行新mysql容器,挂载本地目录
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123456 \
-v ./mysql/data:/var/lib/mysql \
-v ./mysql/conf:/etc/mysql/conf.d \
-v ./mysql/init:/docker-entrypoint-initdb.d \
--restart=always
mysql
通过docker ps -a 命令查看发现已经部署成功。
6.将拷贝到容器外的备份数据在拷贝回容器内部,重新进入mysql容器
[root@master]docker cp /root/all_mysql_bak.sql mysql:/tmp/all_mysql_bak.sql (再拷贝到容器里面)
#进入容器内部
[root@master]docker exec -it mysql容器名 bash
2.数据恢复
恢复数据:
mysql -uroot -p密码 -e "source \tmp\all_mysql_bak.sql"
查看数据库数据已经恢复。
以上是我解决docker部署mysql数据重建恢复的一种方式,欢迎积极讨论。
版权声明:本文标题:docker部署的mysql数据库进行数据恢复 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1766237150a3446835.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论