我有一个数据库出现错误:
ASCII'\0'出现在语句中,但这是不允许的,除非启用了选项--二进制模式,并且mysql在非交互式模式下运行。如果需要ASCII"\0",请将二进制模式设置为1。
我将使用gcloud sql import sql mydb gs://my-path/mydb.sql --database=mydb
通过控制台导入数据库,但我在文档中没有看到任何二进制模式的标志。有可能吗?
可选-在通过MySQL工作台导入时,是否有设置此标志的方法。我也没有在那里看到任何关于它的东西,但可能是我错过了一些背景或什么。如果有办法设置这个标志,那么我可以通过MySQL工作台导入我的数据库。
谢谢。
根据源数据库的托管位置,在Cloud SQL或内部部署环境中,在导出过程中会设置适当的标志,因此转储文件与目标数据库兼容。
由于要导入已从内部部署环境导出的文件,因此建议使用mysqldump
执行导出。
首先,按照文档中的建议创建一个转储文件。请务必注意以下2点:
- 不要导出客户创建的MySQL用户。这将导致导入到新实例失败。相反,手动创建您想要的MySQL用户
- 确保已配置适当的标志,以确保转储文件包含所需的所有必要详细信息。例如触发器、存储过程等
然后,创建一个云存储Bucket并将转储文件上传到Bucket。
在继续导入之前,请将存储对象管理员角色授予目标云SQL实例的服务帐户。您可以使用以下命令执行此操作:
gsutil iam ch serviceAccount:[SERVICE-ACCOUNT]:objectAdmin gs://[BUCKET-NAME]
您可以在Cloud SQL实例概览中找到上述服务帐户,也可以运行以下命令:
gcloud sql instances describe [INSTANCE_NAME]
服务帐户将在serviceAccountEmailAddress
字段中提及。
现在,您可以从Console进行导入,也可以使用gcloud命令或RESTneneneba API进行导入。
谷歌文档中的更多详细信息
导入/导出数据的最佳实践