Joh*_*ohn 5 mysql mariadb galera
我们正在使用主服务器的完整备份恢复我们的从服务器,并收到一堆重复的密钥错误。一旦从站被追上,它就不会抛出任何错误(只有当它落后于主站时)。我们复制所有数据库表。我们使用一个 MariaDB Galera 集群作为主,一个 MariaDB 实例作为从。
这些是完成的步骤:
通过检查变量获取 master 的 GTID "gtid_binlog_position"
。保存此值。
使用以下命令备份 master:
mysql -u -p --routines --triggers --single-transaction --gtid --master-data --dump-slave --add-drop-database <dbnames> | gzip > /tmp/backup.sql.gz
.
完成此备份大约需要 20 分钟。
将数据库导入从属。
运行RESET SLAVE ALL
,并将 GTID 位置设置为第一步中的值。这是通过命令完成的SET GLOBAL gtid_slave_pos = "<gtid from step 1>";
,然后CHANGE MASTER TO ...
在此之后,我收到"Duplicate Entry for key 'PRIMARY', error code 1062"
错误。
这些是使用的设置:
[mysqld]
innodb_buffer_pool_size = 6G
gtid_domain_id=100
log-slave-updates=true
open_files_limit=1000000
innodb_large_prefix = on
innodb_file_format = barracuda
innodb_file_per_table = on
[galera]
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
log_slave_updates=1
## Below was added
sync_binlog=1
innodb_doublewrite=1
query_cache_size=0'
wsrep_provider_options="gcache.size = 5G"
wsrep_retry_autocommit=4
Run Code Online (Sandbox Code Playgroud)
我通读了MySQL replication: 'Duplicated entry for PRIMARY key,但似乎解决方案不适用于这种情况,因为我没有这些设置有问题。
什么会导致这些重复的密钥错误出现?
从您的步骤来看,您很可能从不同的位置备份并开始复制:
通过检查变量“gtid_binlog_position”获取master的GTID。保存该值。
不要使用该值,在该时间和进行备份的时间之间(即使是几秒),可能会更改更多行,这意味着您将无法获得起始位置的准确表示 - 这是最可能的原因重复键错误。您正在使用以下命令进行备份:
--single-transaction --gtid --master-data
您必须使用 InnoDB 才能使单个事务正常工作,否则,您的其他表将不一致。然后,使用二进制日志坐标或转储 .sql 文件开头附近写入的 gtid 位置来启动您的从站。
这个错误可能是因为在官方指南中提到了变量的 SELECT,但这仅适用于正在运行的复制,如果主服务器没有被写入或所有表都被锁定。该指南提到使用集成到 mysqldump 或 xtrabackup 中的功能是更好的选择。
这是 MySQL 上 GTID 的完整指南(一些选项和功能发生了变化,但它可能是整个过程的更好概述): https: //www.percona.com/blog/2013/02/08/how- to-createrestore-a-slave-using-gtid-replication-in-mysql-5-6/