我尝试使用转储文件在Windows上的MySQL容器中导入,这是一项非常艰巨的工作。 当您从容器外部获取MySQL转储文件时,命令就是这样。 我有一个名为“ mysql”的MySQL容器。 要执行,替换您的环境中的“ - user”和“ - password”。 执行此命令后,将创建dump_file_20221119.sql。 我尝试了最基本的导入命令。 结果是: 您不能在powershell中使用字符' 我抬头看如何使角色逃脱,但是没有办法做到这一点。 (参考) 我尝试了“ <”和“ <”,它不起作用。 执行导入命令时,可以使用'-e'选项而不是字符' (参考) (示例) 所以,我尝试了: 结果是: 我发现“ -e”选项仅目标文件。 我尝试将转储文件存储在容器中并执行命令,识别该文件。 尽管发生了错误。 原因是powershell默认字符代码为cp932(sjis)。 (注意) (参考) 我以为如果“二进制模式”设置为“ 1”,它将起作用。 (参考) 执行命令: 结果: 当我搜索“二进制模式”选项时,我找到了“ - binary mode = 1”和“ binary mode 0”。 我不确定为什么有这么多不同的陈述。无论如何,我从官方网站上引用了一个。 但是,如果解决问题,我必须在容器中设置文件。因此,这不是一种有效的方法。 当我使用MySQL Workbench附加命令导出时,我可以成功导入而无需提及错误。 命令是: 使用mysql workbench附加命令导出 外壳是powershell。 您需要将转储文件放在MySQL容器中。 我认为如果我创建PowerShell脚本文件并执行了。 我创建了文件“ dump-import.ps1”。 dump-import.ps1 执行命令: 结果: 我有完全相同的错误。 它正确地工作了命令“ docker-compose exec mysql bash”。 我使用powershell放弃了,所以我尝试了git bash。 结果是: 错误消息说使用“ winpy”。 无论如何,在命令的头上添加“ winpy”。 所以,重新执行。 错误消息说“ stdin不是tty”。 我在研究后找到了页面。 docker-compose on wsl: stdin is not a tty · Issue #166 · rprichard/winpty 这是Docker的长期问题。 似乎不可能在Docker命令的头上添加“ winty”,必须直接使用PowerShell或CMD。 (如果您使用Windows) 作为旁注,您可以在此处查看有关“ Winpty”的信息。 [Git Bash] winpty コマンドについて調べてみた([Git Bash] About winpty) “ winpy”命令是在Windows Console程序和UNIX虚拟终端之间交互的接口。 所以,我使用了CMD。 接下来,我在头上重新执行了“ wintpy”的命令。 它不起作用。 我在输入容器后尝试执行导入命令。 有必要在主机和容器之间设置共享目录。 docker-compose.yml 在登录mysql容器后,将导出的转储文件存储在“ shared_db”目录中。 并在容器内部的“ shared_db”目录中执行导入命令。 缺点:需要重建容器。烦人。 另外,完全不适合编辑docker-compose.yml和重建容器以导入转储文件。 经过漫长的研究,我建议使用MySQL Workbench将转储文件导入Windows上的MySQL容器。 当我用上面的命令导入转储文件时,关于字符编码的错误。 选择要导出的模式。 (图像中的“ myApp01”。) 选择出口独立文件。 设置导出文件名。 单击“启动导出”按钮。 删除架构以导入“ myApp01”。 重新创建已删除的架构。(MyApp01) 设置名称,然后单击“应用”。 选择“从独立文件导入”,然后设置导出文件。 设置目标方案。 然后,单击“启动导入”。 我希望Powershell接受角色“ <”。
OS:Windows
DB:mysql
虚拟化软件•docker
shellï¼powershell / git bash /命令提示< / p>
如何使用PowerShell命令导出转储文件(从容器外部执行)
docker-compose exec mysql mysqldump --user=root --password=password myapp01 > dump_file_20221119.sql
该方案是“ myapp01”。
到目前为止还没有问题。
如何导入转储文件
PowerShell(从容器外部执行)[失败]
docker-compose exec mysql mysql --host=localhost --user=root --password=password myapp01 < dump_file_20221119.sql
PS C:\kaki\work> docker-compose exec mysql mysql --host=localhost --user=root --password=password myapp01 < dump_file_20221119.sql
発生場所 行:1 文字:90
+ ... ql --host=localhost --user=root --password=password myapp01 < dump_fi ...
+ ~
演算子 '<' は、今後の使用のために予約されています。
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : RedirectionNotSupported
<
'。
about Special Characters - PowerShell | Microsoft Learn
PowerShell(从容器外部执行 - 其他命令)[失败]
<
'。
MySQL :: MySQL 5.6 Reference Manual :: 4.5.4 mysqldump — A Database Backup Program
shell> mysql -e“ source/path to-backup/backup-file.sql” db_name
docker-compose exec mysql mysql --user=root --password=password -e "source dump_file_20221119.sql" myapp01
ERROR at line 1: Failed to open file 'dump_file_20221119.sql'
ERROR: ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if ASCII '\0' is expected. Query: '��m'.
作者是日语。
How to export dump file on Windows, import it to Ubuntu
但是,不是。
mysql Client Options
docker-compose exec mysql mysql --user=root --password=password -e "source dump_file_20221119.sql" myapp01 --binary-mode
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 'source dump_file_20221119.sql' at line 1
但是,我不太了解。 (我尝试了它们,但我有错误)
& "C:\Program Files\MySQL\MySQL Workbench 8.0 CE\mysqldump.exe" --result-file=dump_file_20221119.sql myapp01 --user=root --password=password --host=127.0.0.1 --port=3306 --set-gtid-purged=OFF --skip-lock-tables --skip-add-locks --skip-column-statistics
当您执行包含空间的PowerShell命令时,发生了错误。
因此,您必须采取其他方法。
执行PowerShell脚本[失败]
所以,我尝试了。
文件内容为:
Write-Host "dump importing..."
# docker-compose exec mysql bash
docker-compose exec mysql mysql --host=localhost --user=root --password=password myapp01 < dump_file_20221119.sql
PowerShell -ExecutionPolicy RemoteSigned .\dump-import.ps1
PS C:\kaki\work\tmp> PowerShell -ExecutionPolicy RemoteSigned .\dump-import.ps1
発生場所 C:\kaki\work\dump-import.ps1:4 文字:90
+ ... ql --host=localhost --user=root --password=password myapp01 < dump_fi ...
+ ~
演算子 '<' は、今後の使用のために予約されています。
+ CategoryInfo : ParserError: (:) [], ParseException
+ FullyQualifiedErrorId : RedirectionNotSupported
使用git bash [失败]
$ docker-compose exec mysql mysql --host=localhost --user=root --password=password myapp01 < dump_file_20221119.sql
the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty'
$ winpty docker-compose exec mysql mysql --host=localhost --user=root --password=password myapp01 < dump_file_20221119.sql
stdin is not a tty
它的终端检测方式仅适用于cmd.exe和powershell.exe。任何第三方终端都可以检测并发出消息。
使用命令提示[失败]
C:\kaki\work>docker-compose exec mysql mysql --host=localhost --user=root --password=password myapp01 < dump_file_20221119.sql
the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty'
C:\kaki\work\ryuki-prd>winpty docker-compose exec mysql mysql --host=localhost --user=root --password=password myapp01 < dump_file_20221119.sql
'winpty' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
在容器内执行命令[成功(但效率低下)]
示例在这里:
mysql:
image: mysql:5.7
# (omission)
volumes:
- db-data:/var/lib/mysql
- ./shared_db:/shared_db # set share directory between host and container
使用MySQL Workbench。 [成功]
因此,最好使用MySQL Workbench导出。
MySQLWorkBenchï¼出口
1.服务器 - >数据导出
2ï¼启动出口
(如果您不检查选项,则将为每个表创建转储文件,从而在文件系统中创建灾难。)
3.数据导出完成
MySQLWorkBenchï¼导入
1ï¼删除现有模式
2.创建模式
3.服务器 - >数据导入
4ï¼开始导入
5ï¼导入完成
观察