Google cloud platform 如何跳过Google Cloud SQL第二代上的从属复制错误

Google cloud platform 如何跳过Google Cloud SQL第二代上的从属复制错误,google-cloud-platform,google-cloud-sql,Google Cloud Platform,Google Cloud Sql,我正在将一个数据库从外部服务器迁移到cloud sql第二代。我已经按照建议的步骤完成了2TB mysqlseash过程并开始了复制。但是,出现了一个错误: 查询时出现“错误”“拒绝访问用户”“跳过授权用户”“@”“跳过授权主机”“(使用密码:否)”。默认数据库:“”mondovo_db“”。查询:“”加载数据填充“”/mysql/tmp/SQL\U LOAD-0a868f6d-8681-11e9-b5d3-42010a8000a8-6498057-322806。数据“”忽略到表seoi\U卷更

我正在将一个数据库从外部服务器迁移到cloud sql第二代。我已经按照建议的步骤完成了2TB mysqlseash过程并开始了复制。但是,出现了一个错误:

查询时出现“错误”“拒绝访问用户”“跳过授权用户”“@”“跳过授权主机”“(使用密码:否)”。默认数据库:“”mondovo_db“”。查询:“”加载数据填充“”/mysql/tmp/SQL\U LOAD-0a868f6d-8681-11e9-b5d3-42010a8000a8-6498057-322806。数据“”忽略到表seoi\U卷更新\U跟踪程序字段,以“”结尾,以“”括起来,以“”结尾的“”行转义(关键字搜索\U卷id)“”

2个问题

1) 我猜这个错误是因为云sql需要加载数据本地填充而不是加载数据填充?但是,我很确定在主机上我们只运行加载数据本地填充,所以不确定在复制时它如何更改为删除本地填充,这可能吗


2) 我无法停止从机跳过错误并重新启动,因为超级权限不可用,因此我不确定如何跳过此错误,并在将来最终同步时避免此错误。建议?

没有办法解决Google Cloud SQL中的从属复制错误,因此必须想出另一种方法

由于复制不起作用,我不得不复制所有数据库。然而,由于我所有数据库的总大小都是2TB,这将需要很长时间

花费最少时间的最终策略:

1) 先决条件:就SQL驱动器上剩余的磁盘空间而言,您需要至少有当前数据库大小的1.5倍。因此,我的2TB DB位于2.7TB SSD上,我需要最终将所有内容临时移动到6TB SSD,然后才能继续执行以下步骤。没有足够的磁盘空间不要继续,你会像我一样浪费很多时间

2) 在服务器上安装。没有这个,你就无法继续,我花了一段时间才发现。这将有助于将SQL转储文件快速传输到Google

3) 我有多个数据库要迁移。因此,如果在类似的情况下,请一次选择一个,对于访问该数据库的站点,请防止任何进一步的插入/更新。我需要在每个站点上放置一个“维护中的网站”,同时执行下面概述的操作

4) 以单独的方式运行以下步骤中的命令。我在不同的屏幕上并行启动了几个进程

screen -S DB_NAME_import_process
5) 使用以下命令运行mysqldump并注意,输出是SQL文件而不是压缩文件:

mysqldump {DB_NAME} --hex-blob --default-character-set=utf8mb4 --skip-set-charset --skip-triggers --no-autocommit --single-transaction --set-gtid-purged=off > {DB_NAME}.sql
6) (可选)对于大约1.2TB的最大DB,我还使用此处提到的脚本将DB备份拆分为单独的表SQL文件:

7) 对于每个转储的文件,我都将INSERT命令转换为INSERT IGNORE,因为我不希望在导入过程中出现任何重复错误

cat {DB_OR_TABLE_NAME}.sql | sed s/"^INSERT"/"INSERT IGNORE"/g > new_{DB_OR_TABLE_NAME}_ignore.sql
8) 在Google Cloud SQL上创建一个与要导入的数据库同名的数据库。还要创建具有访问所有数据库权限的全局用户

9) 现在,我们使用cloudsql导入插件导入SQL文件。如果在步骤6中将较大的DB拆分为单独的表文件,请使用
cat
命令将它们的一批组合成一个文件,并生成您认为适当的多个批处理文件

运行以下命令:

cloudsql-import --dump={DB_OR_TABLE_NAME}.sql --dsn='{DB_USER_ON_GLCOUD}:{DB_PASSWORD}@tcp({GCLOUD_SQL_PUBLIC_IP}:3306)/{DB_NAME_CREATED_ON_GOOGLE}'
10) 进程运行时,您可以使用
Ctrl+a
退出
屏幕
会话 +
Ctrl+d
(或),然后稍后重新连接到屏幕以检查进度。您可以创建另一个屏幕会话,并对需要导入的每个DBs/批表重复相同的步骤


因为我必须进口大尺寸的产品,我相信这确实花了我一两天的时间,我不记得了,因为已经过了几个月了,但我知道这比任何其他方式都要快。我曾尝试使用Google的copy utility将SQL文件复制到云存储,然后使用Cloud SQL内置的可视化导入工具,但速度很慢,不如cloudsql导入快。在Google修复跳过从属错误的功能之前,我建议使用这种方法。

您应该能够使用。我不确定是否可以跳过此错误。这可能是您的用户帐户的MySQL权限问题。也许它缺乏这种能力。如果问题是导出的文件,您可以从云SQL文档中尝试此操作以避免任何问题。失败的命令是“加载数据填充”,而不是“加载数据本地填充”,我猜这是一个问题,因为如果没有“本地”,它对云SQL不起作用。所以现在,我不知道如何跳过此错误并继续复制。抱歉,我误读了查询。对于你的第一个问题,你能澄清一下大师做了什么吗?根据我的理解,加载数据填充应该只在云SQL实例上运行,而不是在主机上运行。对于你的第二个问题,你能澄清一下跳过错误是什么意思吗?错误是否仅发生在某些行上?如果不使用本地查询,则查询将根本不会运行。要确认,当您说复制时,您是指导入到主云SQL实例的过程吗?或者您是否有如上所述的副本设置?您是否找到了答案?我遇到了同样的问题