Mysql导入导出遇到的一个坑

背景

  • 自从把我手上的任务所有转换成docker运行和管理以后,遇到了一系列的坑,此次是mysql备份的问题。
  • 缘由是启动mysql镜像的时候没有指定-v,致使一段时间以后docker很大,原来的磁盘不够了,须要迁移到新磁盘。
  • 在使用导入导出的时候出现了一些问题,浪费了不少时间去解决。

解决过程

定位mysql镜像过大

查看容器占用的空间mysql

```docker system df```

摘要信息

查看详细信息 redis

Local Volumes space usage:
VOLUME 
NAME                                                            LINKS SIZE
3e764b0633ea2c3f3dc5b0bf79dc753055d7c09451b477d3015650c66ea4a5fb   0  0B
598a592e1f9d90d2564c7c52f45f6f6a96784ad0426ec60682299fa1a1b93b96   0  0B
5eb12b3b0091810bbe3c94c5801ad2f2ff51d79b69b0ac01eb37cf00d37d89f6   0  0B
admin_logs                                                         0  0B
f42e3ef90e4c7b3658a0fb4a877e90b298b12cb58cd63f38d9b4ad5c2ab41d73   0  0B
3361b9c615e09708170018dc7d170b8d4b498dd83cbcb155a3d41234d08e8119   1  9.3G

此时根据上面返回的信息,只有两个容器有VOLUMES,一个是mysql,还一个是redis,因此使用docker inspect container_id命令查看具体容器具体的信息,发现确实是9.3G的那个Volume。sql

CONTAINER ID        IMAGE       COMMAND          LOCAL VOLUMES       SIZE   
cb76bbc211e6        mysql      "docker-entrypoint.s…"   1             7B

备份mysql到新挂的盘

```docker exec -it mysql mysqldump -u用户名 -p密码 数据库 > /mnt/vdb/data/mysql/test_db.sql```
用户名、密码和数据库本身修改

导入mysql

1. 为了保证以前的数据还在,因此另起一个mysql容器,而且使用-v映射到宿主机。
2. 而后执行:docker exec -i mysqld mysql -uroot -proot federation < /mnt/vdb/data/mysql/fed_db.sql

错误来了 docker

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the
right syntax to use near 'mysqldump: [Warning] Using a password on the
command line interface can be insec' at line 1

我搜索了不少的资料,都没有效果,因而决定使用图形化工具直接备份,因而使用navicat,备份,在新的镜像导入,而且导入成功
图片描述数据库

  • 这个里面的Rows,和我导入以后的显示的不同
  • 这个里面的Rows,和我导入以后的显示的不同
  • 这个里面的Rows,和我导入以后的显示的不同

图片描述

  • WTF?总数1688,只显示1480?
  • 进入到docker容器里面,使用命令行查询,确实是1688,确实是展现的Rows不对,So...

总结

  1. 使用docker时,要考虑好需不须要外挂卷,通常数据库的最好都外挂,备份迁移都很方便
  2. 不要过度依赖数据库的GUI,命令行才是最证明可靠的
  3. 实在不行,你狂加硬盘吧,反正都是在服务器上,可是要确保,服务器不会蹦,不然数据容易丢失。
相关文章
相关标签/搜索