我们在amazon-rds上运行了一个mysql实例。这个实例有超过6000个数据库,到目前为止没有问题。我们还配置了一个只读克隆,我们用它来运行备份,使用automysqlbackup将所有6000个数据库转储到一个文件夹。在rds实例上,一切顺利,5.6.23,CPU使用率低(10%)。最多4个小时后,所有数据库都被丢弃。
然后我们决定升级到5.7.11,因为5.6.x中没有一些新功能。
升级到5.7.11后,图片完全改变了。虽然automysqlbackup会在一段时间后为每个数据库分别调用mysqldump,但服务器会以
响应 Couldn't execute 'SELECT DISTINCT TABLESPACE_NAME, FILE_NAME, LOGFILE_GROUP_NAME, EXTENT_SIZE, INITIAL_SIZE, ENGINE FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA IN ('database_0001426')) ORDER BY TABLESPACE_NAME, LOGFILE_GROUP_NAME': Out of memory (Needed 1665336 bytes) (5)
然后
mysqldump: Couldn't execute 'SELECT DISTINCT TABLESPACE_NAME, FILE_NAME, LOGFILE_GROUP_NAME, EXTENT_SIZE, INITIAL_SIZE, ENGINE FROM INFORMATION_SCHEMA.FILES WHERE FILE_TYPE = 'DATAFILE' AND TABLESPACE_NAME IN (SELECT DISTINCT TABLESPACE_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA IN ('database_0001427')) ORDER BY TABLESPACE_NAME, LOGFILE_GROUP_NAME': Lost connection to MySQL server during query (2013)
然后其中许多:
mysqldump: Got error: 2003: Can't connect to MySQL server on 'xxxxxxxxx.xxxxxxxxx.xxxx.rds.amazonaws.com' (111) when trying to connect
发生这种情况时,可用内存减少到零(从7.5 GB开始),交换使用率约为3.5 GB
我尝试了许多不同的参数,例如不同的超时设置,sql_mode,缓冲区大小,max_user_connections(虽然只有一个连接......)但没有什么真正有用。我还在不同的可用区域中创建了一个新的只读克隆,并允许公共访问,尽管备份在同一VPN中的ec2实例上运行。
automysqlbackup配置为使用以下选项运行mysqldump:
mysqldump --user=yanomo --password=x xxxxxxxxxxxxxx --host=xxxxxxxxx.xxxxxxxxx.xxxx.rds.amazonaws.com --quote-names --opt --ssl --single-transaction --max_allowed_packet=32M --port=3306 --databases database_0001261
我有什么遗忘的吗?
答案 0 :(得分:0)
如果您有许多数据库和表,则查询 INFORMATION_SCHEMA 表始终存在问题。它可能真的需要很多记忆。如果可能的话,尝试在Linux上释放一些内存。如果没有,请减少 innodb_buffer_pool_size 或其他与内存相关的参数。如果已启用,请尝试禁用 performance_schema 。