首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >加快mysqldump /重新装载

加快mysqldump /重新装载
EN

Database Administration用户
提问于 2013-06-11 13:15:16
回答 1查看 7.6K关注 0票数 4

将大型模式转换为每个表的文件,我将使用所有数据库执行mysqldump/重新加载。我编辑了my.cnf并更改了"innod_flush_log_at_trx_commit=2“以加快加载速度。我计划在转储之前的某个时候“设置全局innodb_max_dirty_pages_pct=0;”。我很想知道哪一种组合的设置会给我最快的转储和重新加载时间?

架构统计:

26个myisam表413 innodb ~240 of数据

-opt=-禁用键;-扩展-插入;-快速等 --不-自动提交??

vs预先处理的会话vars,如:"SET autocommit=0;SET unique_checks=0;SET foreign_key_checks=0;

mysqldump选项是否等效?

谢谢你的建议!

EN

回答 1

Database Administration用户

发布于 2013-06-11 15:29:46

方面#1

虽然在转储之前将诺姆b设置为0很好,但您必须等到脏页数降到InnoDB缓冲池大小的1%以下。下面是如何度量它的方法:

代码语言:javascript
复制
SELECT ibp_dirty * 100 / ibp_blocks PercentageDirty FROM
(SELECT variable_value ibp_blocks
FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_total') A,
(SELECT variable_value ibp_dirty
FROM information_schema.global_status
WHERE variable_name = 'Innodb_buffer_pool_pages_dirty') B;

继续运行此报告,直到PercentageDirty接近1.00为止。也许您可以在转储前一小时将innodb_max_dirty_pages_pct设置为0。

如果不更改innodb_max_dirty_pages_pct,mysqldump将强制清除涉及正在转储的表的脏块。

方面#2

您不应该必须将"SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0;"放在前面,因为mysqldump在转储的开头包含了它们。下面是mysqldump的标题示例(请注意TIME_ZONE后面的两行)

代码语言:javascript
复制
-- MySQL dump 10.11
--
-- Host: localhost    Database: dbAccessData
-- ------------------------------------------------------
-- Server version       5.0.51a-community-log

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Current Database: `dbAccessData`
--

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `dbAccessData` /*!40100 DEFAULT CHARACTER SET latin1 */;

USE `dbAccessData`;

方面#3

请运行此查询

代码语言:javascript
复制
SELECT engine,count(1) table_count FROM information_schema.tables
WHERE table_schema='mysql' GROUP BY table_schema;

我运行了这个程序,得到了MySQL 5.5.23的25分。由于您有26个表,所以在mysql模式之外只有一个表。要找到它,运行以下命令:

代码语言:javascript
复制
SELECT table_schema,count(1) table_count FROM information_schema.tables
WHERE engine='MyISAM' GROUP BY table_schema;

如果您停止了对单一表的写入,那么您应该能够正确地转储所有数据库。

方面#4

--opt所需的所有选项都是足够的。没必要改变它。

方面#5

您可能希望将数据库转储到不同的文件中:请参阅我的Apr 17, 2011 post 如何优化大型数据库的mysqldump?关于如何编写并行mysqldumps的脚本。

票数 5
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/44297

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档