When executing mysqldump against a MySQL slave server, you might encounter:
mysqldump: Got error: 2013: Lost connection to MySQL server during query when doing refresh
This typically indicates that the connection between the client (mysqldump) and MySQL server was terminated before the query completed. Unlike basic timeout errors, Error 2013 specifically occurs mid-query execution.
Several factors unique to replication environments can cause this:
- Replication Lag: When the slave is significantly behind the master, large transactions might time out
- Network Instability: Especially common in cloud or containerized environments
- Resource Constraints: The slave server might be under-provisioned for dump operations
Add these parameters to your mysqldump command or my.cnf:
mysqldump \
--net-read-timeout=3600 \
--net-write-timeout=3600 \
--max-allowed-packet=1G \
--wait-timeout=28800 \
--compress \
--quick \
--single-transaction
For the MySQL server side (my.cnf):
[mysqld]
net_read_timeout = 7200
net_write_timeout = 7200
interactive_timeout = 28800
wait_timeout = 28800
max_allowed_packet = 1G
slave_net_timeout = 600
For large databases, consider these approaches:
# Use Percona XtraBackup for physical backups
xtrabackup --backup --slave-info --target-dir=/backup/$(date +%F)
# Or use MySQL Shell's parallel dump
mysqlsh -e "util.dumpSchemas(['schema1','schema2'], '/backup', {threads: 8})"
Enable these logs to diagnose the root cause:
# On the MySQL server
SET GLOBAL general_log = 'ON';
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;
# Monitor network connectivity during dump
tcpdump -i eth0 -w mysqldump.pcap port 3306
MySQL Error 2013 ("Lost connection to MySQL server during query") typically occurs when a client (in this case, mysqldump) loses its connection to the MySQL server while executing a query. This is particularly common during long-running operations like backups.
The error often appears in these scenarios:
- The server timed out the connection due to inactivity
- Network issues between the client and server
- Server-side resource constraints (OOM killer, crashed)
- Replication lag when dumping from a slave
Here are the most effective fixes:
1. Increase Connection Timeout
Add these parameters to your mysqldump command:
mysqldump --net_read_timeout=3600 --net_write_timeout=3600 \
--connect_timeout=60 [other_options] database_name
2. Optimize Server Configuration
On the MySQL server, adjust these in my.cnf:
[mysqld]
wait_timeout = 28800
interactive_timeout = 28800
max_allowed_packet = 1G
net_read_timeout = 3600
net_write_timeout = 3600
3. For Replication Slaves
When dumping from a slave, add:
mysqldump --master-data=2 --single-transaction \
--flush-logs [other_options] database_name
If the issue persists:
- Check MySQL error logs (
/var/log/mysql/error.log) - Monitor network stability between servers
- Verify slave replication status with
SHOW SLAVE STATUS\G - Consider using
mydumperinstead of mysqldump for large databases
Here's a robust backup script template:
#!/bin/bash
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backups/mysql"
LOG_FILE="$BACKUP_DIR/backup_$TIMESTAMP.log"
mysqldump \
--host=slave-db.example.com \
--user=backup_user \
--password='secure_password' \
--single-transaction \
--max_allowed_packet=512M \
--net_read_timeout=3600 \
--net_write_timeout=3600 \
--all-databases \
--routines \
--events \
--triggers \
--master-data=2 \
| gzip > "$BACKUP_DIR/full_backup_$TIMESTAMP.sql.gz" 2>> "$LOG_FILE"
Remember to test your backup restoration procedure regularly.