我正在将数据库从外部服务器迁移到云sql 2nd gen。一直按照建议的步骤进行操作,2TB mysqlsump 进程已完成并开始复制。但是,出现错误:
查询时出现错误"用户"跳过授予用户"@"跳过授予主机"(使用密码:否)的访问被拒绝。默认数据库:"mondovo_db"。查询:"加载数据文件"/mysql/tmp/SQL_LOAD-0a868f6d-8681-11e9-b5d3-42010a8000a8-6498057-322806.data"' 忽略到表中 seoi_volume_update_tracker 以"^@^"结尾的字段 括起来 由"^|^"结尾的"\"行转义 (keyword_search_volume_id)">
2个问题,
1)我猜错误是因为云SQL需要加载数据本地文件而不是加载数据文件?但是我很确定在主服务器上我们只运行加载数据本地文件,所以不确定在复制时如何更改以删除本地,这可能吗?
2)我无法阻止从站跳过错误并重新启动,因为SUPER权限不可用,因此不确定如何跳过此错误并在最终同步发生时避免将来使用此错误。建议?
没有办法解决Google Cloud SQL中的从属复制错误,因此不得不想出另一种方法。
由于复制不起作用,我必须复制所有数据库。但是,由于我所有数据库的总大小为 2TB,因此需要很长时间。
花费最少时间的最终策略:
1)先决条件:就 SQL 驱动器上的剩余磁盘空间而言,您需要至少具有当前数据库大小量的 1.5 倍。所以我的 2TB 数据库在 2.7TB SSD 上,我最终需要将所有内容暂时移动到 6TB SSD,然后才能继续执行以下步骤。不要在没有足够磁盘空间的情况下继续,你会像我一样浪费很多时间。
2) 在您的服务器上安装 cloudsql-import。没有这个,你就无法继续,这花了一段时间让我发现。这将有助于将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),我还使用此处提到的脚本将数据库备份拆分为单独的表 SQL 文件:https://stackoverflow.com/a/9949414/1396252
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-import插件导入SQL文件。如果在步骤 6 中将较大的数据库拆分为单独的表文件,请使用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
退出screen
会话 +Ctrl+d
(或参考此处),然后稍后重新连接到屏幕以检查进度。您可以创建另一个屏幕会话,并对需要导入的每个数据库/表批处理重复相同的步骤。
由于我必须进口的大尺寸,我相信它确实花了我一两天的时间,现在不记得了,因为它已经几个月了,但我知道它比其他任何方式都快得多。我曾尝试使用Google的复制实用程序将SQL文件复制到Cloud Storage,然后使用Cloud SQL的内置可视化导入工具,但这很慢,不如cloudsql-import快。我会推荐这种方法,直到谷歌修复跳过从属错误的能力。