Mysql在docker容器中运行时,生成的.sql文件不会直接存储到虚机中,而是bash中,这可能是困扰大家的地方。
搜了网上很多方法以及chatgpt的方法,要么比较难理解,要么指令不对。现通过不断尝试终于找到了最方便、易懂的方法。
大概分四步:1、在原mysql容器的bash内部中,生成.sql文件。2、将.sql文件从bash内部复制到虚机中。3、将虚机中的.sql文件复制到新mysql容器的bash中。4、进入新mysql将.sql导入成表格。
将原mysql容器的库dichub中的ces表→新的mysql容器的库dichub中(提前在新的mysql中建好dichub库):
1、在原mysql容器的bash内部中,生成.sql文件。
进入原mysql容器,docker exec -it mysql /bin/bash 进入bash
【mysql: 我的mysql容器名。】
bash中运行:mysqldump -u root -p dichub ces > backupfile.sql; 然后输密码
【root:用户名。 dichub:库名。 ces:表名。 backupfile.sql:导出的文件名。】
这样会在这个容器的bash中生成backupfile.sql文件,可以ls查看。
2、将.sql文件从bash内部复制到虚机中。
退出原mysql容器,到虚机外部。执行:
docker cp mysql:/backupfile.sql /root/mysql_data_copy/
【mysql:我的mysql容器名。/root/mysql_data_copy/:虚机上的文件夹】
刚才生成的backupfile.sql就可以用mysql:/backupfile.sql访问到。
3、将虚机中的.sql文件复制到新mysql容器的bash中。
docker cp mysql_data_copy/backupfile.sql mysql_backup:/backupfile.sql
【mysql_data_copy/backupfile.sql:虚机上.sql文件的路径。mysql_backup:新的mysql容器名,这个需要提前创建好】
由此一来,docker exec -it...进入新的mysql容器bash后,在bash中ls就能看到backupfile.sql文件。
4、进入新mysql容器将.sql导入成表格。
先docker exec -it...进入新的mysql容器bash,然后执行:
mysql -u root -p dichub< /backupfile.sql;
【dichub:新的mysql容器的库名,为了方便也叫dichub,需要提前建好。】
这样就把原mysql容器中dichub的ces表,迁移到新的mysql容器中dichub里了。