mysqldump
- mysqldump---邏輯備份,熱備
-
- 單線程,適合數據量小的庫
- 單線程,適合數據量小的庫
mysql官方自帶的命令行工具
#全庫
1)mysqldump -uroot -p123456 --socket=XXX --all-databases > XXX.sql
#指定庫
2)mysqldump -uroot -p123456 --socket=XXX --databases db2 > XXX.sql
#指定表
3)mysqldump -uroot -p123456 --socket=XXX db2 t1 > XXX.sql
#恢復
4)
create database db3;
surce XXX.sql;
#使用事務備份全庫
5)mysqldump --single-transaction -uroot -p123456 --all-databases > XXX.sql
#遠程備份
6)mysqldump -utest -ptest -hXXX -P3306 --all-databases > XXX.sql
#備份.sql,和.csv格式;
7)mysqldump --single-transaction -uroot -p123456 db1 -T XXX
#指定分隔符為","默認分隔符為制表符
8)mysqldump -uroot -p000000 --single-transaction --fields-terminated-by=, shuxue -T /tmp
主要示例
- 演示使用mysqldump備份表,庫,實例
- 演示使用mysqldump制作一致性備份
- 演示使用mysqldump導出數據為csv格式
演示使用mysqldump備份表,庫,實例:
備份全庫:
aiapple@itcast01:~/mysql_backup$ mysqldump -uroot -p000000 --socket=/var/run/mysqld/mysqld.sock --all-databases > ./all_db.sql aiapple@itcast01:~/mysql_backup$ ls all_db.sql aiapple@itcast01:~/mysql_backup$ head -n 30 all_db.sql -- MySQL dump 10.13 Distrib 5.5.47, for debian-linux-gnu (i686) -- -- Host: localhost Database: -- ------------------------------------------------------ -- Server version 5.5.47-0ubuntu0.12.04.1 /*!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: `TEST` -- CREATE DATABASE /*!32312 IF NOT EXISTS*/ `TEST` /*!40100 DEFAULT CHARACTER SET latin1 */; USE `TEST`; -- -- Current Database: `WY_yun` -- CREATE DATABASE /*!32312 IF NOT EXISTS*/ `WY_yun` /*!40100 DEFAULT CHARACTER SET latin1 */; #可以看到all_db.sql,實際上就是SQL語句,會將表,插入數據等等;
備份指定庫:
aiapple@itcast01:~/mysql_backup$ mysqldump -uroot -p000000 --socket=/var/run/mysqld/mysqld.sock --databases shuxue > ./shuxue.sql aiapple@itcast01:~/mysql_backup$ ls all_db.sql shuxue.sql aiapple@itcast01:~/mysql_backup$ sed -n '22,45p' shuxue.sql CREATE DATABASE /*!32312 IF NOT EXISTS*/ `shuxue` /*!40100 DEFAULT CHARACTER SET latin1 */; USE `shuxue`; -- -- Table structure for table `res_new` -- DROP TABLE IF EXISTS `res_new`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `res_new` ( `res` date DEFAULT NULL, `sum_num` decimal(32,0) DEFAULT NULL, `week_day` int(1) DEFAULT NULL, `que` int(1) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `res_new` -- LOCK TABLES `res_new` WRITE; #指定文件顯示第幾行到第幾行sed -n '22,45p' filename;
備份單個表:
mysql> show tables; +------------------+ | Tables_in_shuxue | +------------------+ | res_new | | res_sum_num | | week_day | +------------------+ aiapple@itcast01:~/mysql_backup$ mysqldump -uroot -p000000 --socket=/var/run/mysqld/mysqld.sock shuxue week_day > ./week_day.sql aiapple@itcast01:~/mysql_backup$ ls all_db.sql shuxue.sql week_day.sql aiapple@itcast01:~/mysql_backup$ sed -n '10,37p' week_day.sql /*!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 */; -- -- Table structure for table `week_day` -- DROP TABLE IF EXISTS `week_day`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `week_day` ( `res` date DEFAULT NULL, `sum_num` decimal(32,0) DEFAULT NULL, `week_day` int(1) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `week_day` -- LOCK TABLES `week_day` WRITE; /*!40000 ALTER TABLE `week_day` DISABLE KEYS */;
還原week_day表
mysql> create database db; Query OK, 1 row affected (0.01 sec) mysql> use db Database changed mysql> show tables; Empty set (0.00 sec) mysql> source /home/aiapple/mysql_backup/week_day.sql Query OK, 0 rows affected (0.01 sec) Query OK, 0 rows affected (0.00 sec) mysql> show tables; +--------------+ | Tables_in_db | +--------------+ | week_day | +--------------+ 使用source命令還原數據;
mysqldump一致性備份
定義:
因為在備份過程中,數據庫的數據是不斷變動的,而一致性備份是指備份某時刻點的數據;
因為innodb提供了可重復讀,這個隔離級別,即在同一個事務內看到的數據不變,所以 備份工作中,
如果開啟一個事務再進行備份,那么這個備份就是事務開啟的時間點的備份,也叫一致性備份;
參數:
--single-transaction
默認備份會鎖表,鎖庫,來備份,因為沒有開啟事務,而使用這個參數之后,會開啟一個事務來備份,不會鎖表鎖庫。
一致性備份全庫
aiapple@itcast01:~/mysql_backup$ mysqldump --single-transaction -uroot -p000000 --socket=/var/run/mysqld/mysqld.sock --all-databases > ./all_db.sql -- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly. aiapple@itcast01:~/mysql_backup$ ls all_db.sql aiapple@itcast01:~/mysql_backup$ sed -n '20,45p' all_db.sql -- CREATE DATABASE /*!32312 IF NOT EXISTS*/ `TEST` /*!40100 DEFAULT CHARACTER SET latin1 */; USE `TEST`; -- -- Current Database: `WY_yun` -- CREATE DATABASE /*!32312 IF NOT EXISTS*/ `WY_yun` /*!40100 DEFAULT CHARACTER SET latin1 */; USE `WY_yun`; -- -- Table structure for table `a` -- DROP TABLE IF EXISTS `a`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `a` ( `name` varchar(20) DEFAULT NULL, `id` int(11) DEFAULT NULL, `sal` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
遠程備份
aiapple@itcast01:~/mysql_backup$ mysqldump -uroot -p000000 -h127.0.0.1 -P3306 --database shuxue > ./shuxue.sql aiapple@itcast01:~/mysql_backup$ ls shuxue.sql
演示使用mysqldump導出數據為csv格式
參數:-T
aiapple@itcast01:~/mysql_backup$ mysqldump -uroot -p000000 shuxue -T /tmp aiapple@itcast01:~/mysql_backup$ cd /tmp/ aiapple@itcast01:/tmp$ ls res_new.sql res_new.txt week_day.txt week_day.sql res_sum_num.sql res_sum_num.txt aiapple@itcast01:/tmp$ sed -n '20,45p' week_day.sql DROP TABLE IF EXISTS `week_day`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `week_day` ( `res` date DEFAULT NULL, `sum_num` decimal(32,0) DEFAULT NULL, `week_day` int(1) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2016-06-25 9:32:25 aiapple@itcast01:/tmp$ sed -n '20,45p' week_day.txt 2015-05-02 50 5 2015-05-03 62 6 2015-05-09 79 5 2015-05-10 31 6 2015-05-16 75 5 2015-05-17 64 6 2015-05-23 101 5 2015-05-24 55 6 2015-05-30 87 5 2015-05-31 66 6 2015-06-06 76 5 2015-06-07 66 6 2015-06-13 72 5 2015-06-14 69 6 2015-06-20 108 5 2015-06-21 64 6 2015-06-27 62 5 2015-06-28 71 6 2015-07-04 68 5 2015-07-05 69 6 2015-07-11 104 5 2015-07-12 105 6 2015-07-18 76 5 2015-07-19 86 6 2015-07-25 90 5 2015-07-26 94 6
#默認分隔符為制表符
#可以指定分隔符
#指定分隔符為","
aiapple@itcast01:/tmp$ mysqldump -uroot -p000000 --single-transaction --fields-terminated-by=, shuxue -T /tmp aiapple@itcast01:~/mysql_backup$ cd /tmp/ aiapple@itcast01:/tmp$ ls res_new.sql res_new.txt week_day.txt week_day.sql res_sum_num.sql res_sum_num.txt aiapple@itcast01:/tmp$ sed -n '20,45p' week_day.sql DROP TABLE IF EXISTS `week_day`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `week_day` ( `res` date DEFAULT NULL, `sum_num` decimal(32,0) DEFAULT NULL, `week_day` int(1) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2016-06-25 9:32:25 aiapple@itcast01:/tmp$ sed -n '20,45p' week_day.txt 2015-05-02,50,5 2015-05-03,62,6 2015-05-09,79,5 2015-05-10,31,6 2015-05-16,75,5 2015-05-17,64,6 2015-05-23,101,5 2015-05-24,55,6 2015-05-30,87,5 2015-05-31,66,6 2015-06-06,76,5 2015-06-07,66,6 2015-06-13,72,5 2015-06-14,69,6 2015-06-20,108,5 2015-06-21,64,6 2015-06-27,62,5 2015-06-28,71,6 2015-07-04,68,5 2015-07-05,69,6 2015-07-11,104,5 2015-07-12,105,6 2015-07-18,76,5 2015-07-19,86,6 2015-07-25,90,5 2015-07-26,94,6