我有一个带有 InnoDB 数据库的 symfony 应用程序,它有 57 个表,大约 2GB。数据库的大部分大小驻留在单个表中(~1.2GB)。我目前正在使用 mysqldump 每晚备份数据库。
由于我的 comcast 连接,通常如果我手动运行转储,我与服务器的连接将在转储完成之前超时,导致我不得不重新运行转储。[我目前运行一个每晚执行转储的 cron,这仅适用于我手动运行的转储。]
有没有办法加快连接超时问题的转储,同时也可以限制服务器被这个进程占用的时间?
顺便说一句,我目前正在努力减少整个数据库的大小来解决这个问题。
我们正在使用主服务器的完整备份恢复我们的从服务器,并收到一堆重复的密钥错误。一旦从站被追上,它就不会抛出任何错误(只有当它落后于主站时)。我们复制所有数据库表。我们使用一个 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 …Run Code Online (Sandbox Code Playgroud) 160523 13:07:29 [ERROR] Slave SQL: Error 'Duplicate entry '914166' for key
'PRIMARY'' on query. Default database: 'zo_dev_20121216'. Query: 'UPDATE
activity
SET
activity_type_id = 9,
subject = 'Send departure email',
date_due = '2016-05-26 01:00',
date_start = '2016-05-23 01:00',
activity_status_id = 1,
content = 'Send departure email'
WHERE
id = 2888555', Error_code: 1062
160523 13:07:29 [Warning] Slave: Duplicate entry '914166' for key 'PRIMARY'
Error_code: 1062
160523 13:07:29 [ERROR] Error running query, slave SQL thread aborted. Fix
the problem, and restart the slave …Run Code Online (Sandbox Code Playgroud) mysql ×3
backup ×1
galera ×1
innodb ×1
mariadb ×1
mysql-5.5 ×1
mysqldump ×1
performance ×1
replication ×1