您的位置:首页 > 数据库 > MySQL

mysqldump

2016-01-28 10:36 465 查看
mysqldump工具是mysql发行一个基于sql层备份的工具

1.语法

备份一个或多个表:

#mysqldump [options] db_name [table_name……]

备份一个或多个库:

#mysqldump [options] –databases dbname……

备份所有数据库:

#mysqldump [options] –all-databases

2.工作流程



3.选项

A)mysqldump会依次从下列配置文件中读取默认:

1.   /etc/my.cnf

2.   /etc/mysql/my.cnf

3.   /usr/etc/my.cnf

4.   ~/.my.cnf

B)重要参数

-d 只导出表结构 

# mysqldump -d  wwb dump_test > test.sql
DROP TABLE IF EXISTS `dump_test`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!40101 SET character_set_client = utf8 */;

CREATE TABLE `dump_test` (

  `id` int(11) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*!40101 SET character_set_client = @saved_cs_client */;

/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

-t只导出表数据

#mysqldump -t  wwb dump_test > test.sql

LOCK TABLES `dump_test` WRITE;

/*!40000 ALTER TABLE `dump_test` DISABLE KEYS */;

INSERT INTO `dump_test` VALUES (1),(2);

/*!40000 ALTER TABLE `dump_test` ENABLE KEYS */;

UNLOCK TABLES;

/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

-c insert 出来完整格式

mysqldump -t -c wwb dump_test > test.sql

-- Dumping data for table `dump_test`
LOCK TABLES `dump_test` WRITE;
/*!40000 ALTER TABLE `dump_test` DISABLE KEYS */;

INSERT INTO `dump_test` (`id`) VALUES (1),(2);
/*!40000 ALTER TABLE `dump_test` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

--where sql语句中以where选型筛选

#mysqldump -t --where="id<2" wwb dump_test > test.sql

LOCK TABLES `dump_test` WRITE;

/*!40000 ALTER TABLE `dump_test` DISABLE KEYS */;
INSERT INTO `dump_test` VALUES (1);

/*!40000 ALTER TABLE `dump_test` ENABLE KEYS */;

UNLOCK TABLES;

/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

--single-transaction --master-data MySQL复制时候搭建从库时候用

#mysqldump  --single-transaction  --master-data=2  -A> full_backup.sql

--single-transaction

InnoDB 表在备份时,通常启用选项 --single-transaction 来保证备份的一致性,实际上它的工作原理是设定本次会话的隔离级别为:REPEATABLE READ,以确保本次会话(dump)时,不会看到其他会话已经提交了的数据

--master-data

当这个参数的值为1的时候,mysqldump出来的文件就会包括CHANGE MASTER TO这个语句,等于2是是以注释的形式出现CHANGE MASTER TO语句

打开general_log会发现隔离级别设置成了RR

                  273 Query     /*!40100 SET @@SQL_MODE='' */

                  273 Query     /*!40103 SET TIME_ZONE='+00:00' */

                  273 Query     FLUSH /*!40101 LOCAL */ TABLES

                  273 Query     FLUSH TABLES WITH READ LOCK

                  273 Query     SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ

                  273 Query     START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */

                  273 Query     SHOW VARIABLES LIKE 'gtid\_mode'

                  273 Query     SHOW MASTER STATUS

                  273 Query     UNLOCK TABLES

--master-data=2  注释形式出现CHANGE MASTER TO语句

-- Position to start replication or point-in-time recovery from

-- CHANGE MASTER TO MASTER_LOG_FILE='mybinlog.000003', MASTER_LOG_POS=199;

 --ignor
9ffa
e-table不备份某个表


# mysqldump  --ignore-table=wwb.t1  wwb > full_backup.sql

# grep t1 full_backup.sql 

-- Table structure for table `t10`

DROP TABLE IF EXISTS `t10`;

CREATE TABLE `t10` (

-- Dumping data for table `t10`

LOCK TABLES `t10` WRITE;

/*!40000 ALTER TABLE `t10` DISABLE KEYS */;

INSERT INTO `t10` VALUES (1,1),(3,1),(5,3),(7,6),(10,8);

/*!40000 ALTER TABLE `t10` ENABLE KEYS */;

并无t1表的信息

总结:mysqldump单进程备份工具并不完美,而且在数据比较大的时候(100G以上)会比较困难,而且会造成热数据的冲刷
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: