我正试图在现有数据库上创建一个只读从属程序。我成功地导出了我的数据,把它放入了一个桶中,删除了所有带有lines子句的行,并成功地创建了一个副本数据库。
这是我的弃尸命令-
mysqldump --databases alphadb -h localhost -u root -p \
--hex-blob --skip-triggers --set-gtid-purged=OFF \
--default-character-set=utf8mb4 > dump.sql这是我用来删除定义子句的命令-
cat dump.sql | sed '/DEFINER=`root`@`localhost`/d'问题是,此后不久,我的日志中出现了错误:

我发现的处理这个1062重复键错误的所有答案都提示如下:
STOP SLAVE;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
START SLAVE;
SELECT SLEEP(5);
SHOW SLAVE STATUS\G解决办法实例:
问题是我得到了:
MySQL [alphadb]> stop slave;
ERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)我已经是根用户了,所以我不知道下一步应该做什么来解决错误,这样复制就可以继续了。从技术上讲,我甚至很乐意截断ci_sessions表,因为它对我来说并不重要,并且重置主键。但这是不可能的,因为数据库处于read-only模式(这也不是一个很好的解决方案,因为目标是使复制正常工作)
我的问题是我下一步该怎么做?谷歌的Cloud不支持SUPER特权,但是STOP SLAVE和START SLAVE需要超级特权。
编辑:来自kurtisvg的回复中的第二个链接,我能够确定我丢失了一些推荐的标志。解决方案是使用这些标志,格式如下
mysqldump \
-h [MASTER_IP] -P [MASTER_PORT] -u [USERNAME] -p \
--databases [DBS] \
--hex-blob --skip-triggers --master-data=1 \
--order-by-primary --no-autocommit \
--default-character-set=utf8mb4 --ignore-table [VIEW] \
--single-transaction --set-gtid-purged=onhttps://cloud.google.com/sql/docs/mysql/replication/replication-from-external最后,如果任何人从谷歌看到这一点,您的错误日志(除了提供不可能的建议)也提供错误的命令。在上面的屏幕截图中,日志显示为SLAVE START,但正确的命令是START SLAVE
我真的很期待将我的公司从其现有的基础设施上迁移到GCP上,但不幸的是,没有办法做到这一点。
发布于 2020-07-06 08:59:24
在尝试相同的场景时,我处理的是同一个问题。我从一开始就使用了第二个链接中的指南,但始终存在重复的输入错误。
我最终想出的唯一办法就是从导出过程中删除“--单事务”参数。我的导出脚本是这样结束的:
mysqldump \
-h 192.168.1.8 -P 3306 -u root -p \
--databases db1 db2 db3 db4 \
--hex-blob --skip-triggers --master-data=1 \
--order-by-primary --no-autocommit \
--default-character-set=utf8mb4 \
--set-gtid-purged=on >mysqldump.sql
sed 's/\sDEFINER=`[^`]*`@`[^`]*`//g' -i mysqldump.sql
grep DEFINER mysqldump.sql
gzip mysqldump.sql
gsutil cp mysqldump.sql.gz gs://my-gs-storage/mysqldump-new.sql.gzhttps://stackoverflow.com/questions/57924357
复制相似问题