mysqldump

来源:互联网 发布:网络科学导论 百度云 编辑:程序博客网 时间:2024/06/07 00:32

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;


 --ignore-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以上)会比较困难,而且会造成热数据的冲刷


1 0
原创粉丝点击