将大型模式转换为每个表的文件,我将使用所有数据库执行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选项是否等效?
谢谢你的建议!
发布于 2013-06-11 15:29:46
虽然在转储之前将诺姆b设置为0很好,但您必须等到脏页数降到InnoDB缓冲池大小的1%以下。下面是如何度量它的方法:
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将强制清除涉及正在转储的表的脏块。
您不应该必须将"SET autocommit=0; SET unique_checks=0; SET foreign_key_checks=0;"放在前面,因为mysqldump在转储的开头包含了它们。下面是mysqldump的标题示例(请注意TIME_ZONE后面的两行)
-- 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`;请运行此查询
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模式之外只有一个表。要找到它,运行以下命令:
SELECT table_schema,count(1) table_count FROM information_schema.tables
WHERE engine='MyISAM' GROUP BY table_schema;如果您停止了对单一表的写入,那么您应该能够正确地转储所有数据库。
--opt所需的所有选项都是足够的。没必要改变它。
您可能希望将数据库转储到不同的文件中:请参阅我的Apr 17, 2011 post 如何优化大型数据库的mysqldump?关于如何编写并行mysqldumps的脚本。
https://dba.stackexchange.com/questions/44297
复制相似问题