MySQL使用腳本進行整庫數據備份【表(結構+數據)、視圖、函數、事件】


  前言

  通常情況下,我們需要改什么地方就備份什么地方就可以了,但也免不了需要整庫備份的時候,本文記錄實現MySQL使用腳本進行整庫數據備份【表(結構+數據)、視圖、函數、事件】

  主要是使用mysqldump.exe,mysqldump 是 mysql 用於轉存儲數據庫的實用程序。它主要產生一個 SQL 腳本,其中包含從頭重新創建數據庫所必需的命令 CREATE TABLE INSERT 等。

 

  為方便測試,使用java先造一下測試數據

package cn.huanzi.qch;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * 造一批數據,方便進行測試
 */
public class App {

    public static void main(String[] args) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
        for (int i = 1; i <= 10; i++) {
            //當前時間-i天
            Calendar c = Calendar.getInstance();
            c.setTime(new Date());
            c.add(Calendar.DATE, -1 * i);

            try {
                File fileToChange = new File("D:\\mysql_data_back\\jfinal_demo_"+simpleDateFormat.format(c.getTime())+".sql");
                fileToChange.createNewFile();

                //更改最后修改時間
                fileToChange.setLastModified(c.getTime().getTime());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

 

 

   bat腳本

::  MySQL整庫數據備份腳本【表(結構+數據)、視圖、函數、事件】,支持備份遠程庫
::  注:bat解決中文亂碼:改成使用ANSI格式
::  注:MySQL服務器版本號、客戶端版本要一致,否則會報錯
    
@echo OFF

echo 刪掉之前的數據,只保留7天...

::    刪掉之前的數據,按修改時間只保留7天(cmd使用set后forfiles失敗,只能放在前面執行了)
::forfiles /p "D:\mysql_data_back" /s /m *.sql /d -7 /c "cmd /c echo @file"
forfiles /p "D:\mysql_data_back" /s /m *.sql /d -7 /c "cmd /c del @path";


::    年月日,路徑
set ymd=%date:~,4%%date:~5,2%%date:~8,2%
set path=D:\mysql_data_back

::    數據庫地址、端口,數據庫、賬號、密碼
set ip=127.0.0.1
set port=3306
set dbname=jfinal_demo
set username=root
set password=123456

echo 開始備份,文件生成路徑:%path%...

::    -h地址 -P端口 -u賬號 -p密碼 數據庫
::    常用命令:
::    --no-create-db, -n/--no-create-info, -t 只導出數據,而不添加CREATE TABLE 語句
::    --no-data, -d 不導出任何數據,只導出數據庫表結構
::    --routines, -R 導出存儲過程以及自定義函數
::    --events, -E 導出事件
::    --force 在導出過程中忽略出現的SQL錯誤
D:\MySQL5.5\bin\mysqldump.exe -P%port% -h%ip% -u%username% -p"%password%" %dbname% -R -E> %path%\%dbname%_%ymd%.sql

echo %path%\%dbname%_%ymd%.sql,備份完成!

::    執行完不關閉窗口
pause

  使用forfiles命令,可以快速實現備份數據保留7天

  下面這個命令是篩選出7天之前的文件

 

  shell腳本

#!/bin/bash
#  MySQL整庫數據備份腳本【表(結構+數據)、視圖、函數、事件】,支持備份遠程庫
#  注:bat解決中文亂碼:改成使用ANSI格式
#  注:MySQL服務器版本號、客戶端版本要一致,否則會報錯

#    年月日,路徑
export ymd=`date +%Y%m%d`
export path=/root/mysql/mysql_data_back

#    數據庫地址、端口,數據庫、賬號、密碼
export ip='127.0.0.1'
export port='3306'
export dbname='test'
export username='root'
export password='123456'

echo "刪掉之前的數據,只保留7天..."

#    刪掉之前的數據,按修改時間只保留7天
find $path -type f -name "*.sql" -mtime +7 -exec rm -rf {} \;

echo "開始備份,文件生成路徑:$path..."

#    -h地址 -P端口 -u賬號 -p密碼 數據庫
#    常用命令:
#    --no-create-db, -n/--no-create-info, -t 只導出數據,而不添加CREATE TABLE 語句
#    --no-data, -d 不導出任何數據,只導出數據庫表結構
#    --routines, -R 導出存儲過程以及自定義函數
#    --events, -E 導出事件
#    --force 在導出過程中忽略出現的SQL錯誤
/usr/bin/mysqldump -P$port -h$ip -u$username -p"$password" $dbname -R -E> $path/$dbname$ymd.sql

echo "$path/$dbname$ymd.sql,備份完成!"

 

  首先把我們生成的測試文件上傳到linux,並修改文件的修改日期,cd到對應文件夾,執行以下命令

touch -d "2021-08-21 03:41:10" test20210821.sql&
touch -d "2021-08-22 03:41:10" test20210822.sql&
touch -d "2021-08-23 03:41:10" test20210823.sql&
touch -d "2021-08-24 03:41:10" test20210824.sql&
touch -d "2021-08-25 03:41:10" test20210825.sql&
touch -d "2021-08-26 03:41:10" test20210826.sql&
touch -d "2021-08-27 03:41:10" test20210827.sql&
touch -d "2021-08-28 03:41:10" test20210828.sql&
touch -d "2021-08-29 03:41:10" test20210829.sql&
touch -d "2021-08-30 03:41:10" test20210830.sql&

 

   forfiles命令是window特有的,因此要改成find的方式查找文件

 

 

 

  效果

  bat腳本

 

 

  shell腳本

 

 

 

  生成的sql文件,包含表(結構+數據)、視圖、函數/存儲過程、事件

-- MySQL dump 10.13  Distrib 5.5.28, for Win64 (x86)
--
-- Host: 127.0.0.1    Database: jfinal_demo
-- ------------------------------------------------------
-- Server version    5.5.28

/*!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 */;

--
-- Table structure for table `blog`
--

DROP TABLE IF EXISTS `blog`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `blog` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '博客id',
  `title` varchar(200) DEFAULT NULL COMMENT '博客標題',
  `content` mediumtext COMMENT '博客內容',
  `user_id` varchar(255) DEFAULT NULL COMMENT '用戶id',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 COMMENT='博客表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `blog`
--

LOCK TABLES `blog` WRITE;
/*!40000 ALTER TABLE `blog` DISABLE KEYS */;
INSERT INTO `blog` VALUES (2,'test 1','test 1','1'),(3,'test 2','test 2','1'),(4,'test 4','test 4','2'),(5,'test 5','test 5','2'),(6,'test 6','test 6','1'),(11,'11','11','3'),(12,'12','12','3'),(13,'13','13','3'),(14,'14','14','3'),(15,'15','15','3'),(16,'16','16','3');
/*!40000 ALTER TABLE `blog` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `user`
--

DROP TABLE IF EXISTS `user`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `user` (
  `user_id` varchar(255) NOT NULL COMMENT '用戶id',
  `user_name` varchar(255) DEFAULT NULL COMMENT '用戶名稱',
  PRIMARY KEY (`user_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用戶表';
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `user`
--

LOCK TABLES `user` WRITE;
/*!40000 ALTER TABLE `user` DISABLE KEYS */;
INSERT INTO `user` VALUES ('1','張三'),('2','李四'),('3','王五');
/*!40000 ALTER TABLE `user` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Temporary table structure for view `v_test`
--

DROP TABLE IF EXISTS `v_test`;
/*!50001 DROP VIEW IF EXISTS `v_test`*/;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
/*!50001 CREATE TABLE `v_test` (
  `id` tinyint NOT NULL,
  `title` tinyint NOT NULL,
  `content` tinyint NOT NULL,
  `user_id` tinyint NOT NULL,
  `user_name` tinyint NOT NULL
) ENGINE=MyISAM */;
SET character_set_client = @saved_cs_client;

--
-- Dumping events for database 'jfinal_demo'
--
/*!50106 SET @save_time_zone= @@TIME_ZONE */ ;
/*!50106 DROP EVENT IF EXISTS `ev_test` */;
DELIMITER ;;
/*!50003 SET @saved_cs_client      = @@character_set_client */ ;;
/*!50003 SET @saved_cs_results     = @@character_set_results */ ;;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;;
/*!50003 SET character_set_client  = utf8mb4 */ ;;
/*!50003 SET character_set_results = utf8mb4 */ ;;
/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;;
/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;;
/*!50003 SET @saved_time_zone      = @@time_zone */ ;;
/*!50003 SET time_zone             = 'SYSTEM' */ ;;
/*!50106 CREATE*/ /*!50117 DEFINER=`root`@`localhost`*/ /*!50106 EVENT `ev_test` ON SCHEDULE EVERY 3 SECOND STARTS '2021-08-31 11:02:25' ON COMPLETION PRESERVE DISABLE DO BEGIN



END */ ;;
/*!50003 SET time_zone             = @saved_time_zone */ ;;
/*!50003 SET sql_mode              = @saved_sql_mode */ ;;
/*!50003 SET character_set_client  = @saved_cs_client */ ;;
/*!50003 SET character_set_results = @saved_cs_results */ ;;
/*!50003 SET collation_connection  = @saved_col_connection */ ;;
DELIMITER ;
/*!50106 SET TIME_ZONE= @save_time_zone */ ;

--
-- Dumping routines for database 'jfinal_demo'
--
/*!50003 DROP FUNCTION IF EXISTS `fun_test` */;
/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
/*!50003 SET character_set_client  = utf8mb4 */ ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50020 DEFINER=`root`@`localhost`*/ /*!50003 FUNCTION `fun_test`() RETURNS int(11)
BEGIN



    #Routine body goes here...







    RETURN 0;



END */;;
DELIMITER ;
/*!50003 SET sql_mode              = @saved_sql_mode */ ;
/*!50003 SET character_set_client  = @saved_cs_client */ ;
/*!50003 SET character_set_results = @saved_cs_results */ ;
/*!50003 SET collation_connection  = @saved_col_connection */ ;
/*!50003 DROP PROCEDURE IF EXISTS `pro_test` */;
/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
/*!50003 SET character_set_client  = utf8mb4 */ ;
/*!50003 SET character_set_results = utf8mb4 */ ;
/*!50003 SET collation_connection  = utf8mb4_general_ci */ ;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50020 DEFINER=`root`@`localhost`*/ /*!50003 PROCEDURE `pro_test`()
BEGIN



    #Routine body goes here...







END */;;
DELIMITER ;
/*!50003 SET sql_mode              = @saved_sql_mode */ ;
/*!50003 SET character_set_client  = @saved_cs_client */ ;
/*!50003 SET character_set_results = @saved_cs_results */ ;
/*!50003 SET collation_connection  = @saved_col_connection */ ;

--
-- Final view structure for view `v_test`
--

/*!50001 DROP TABLE IF EXISTS `v_test`*/;
/*!50001 DROP VIEW IF EXISTS `v_test`*/;
/*!50001 SET @saved_cs_client          = @@character_set_client */;
/*!50001 SET @saved_cs_results         = @@character_set_results */;
/*!50001 SET @saved_col_connection     = @@collation_connection */;
/*!50001 SET character_set_client      = utf8mb4 */;
/*!50001 SET character_set_results     = utf8mb4 */;
/*!50001 SET collation_connection      = utf8mb4_general_ci */;
/*!50001 CREATE ALGORITHM=UNDEFINED */
/*!50013 DEFINER=`root`@`localhost` SQL SECURITY DEFINER */
/*!50001 VIEW `v_test` AS select `b`.`id` AS `id`,`b`.`title` AS `title`,`b`.`content` AS `content`,`b`.`user_id` AS `user_id`,`u`.`user_name` AS `user_name` from (`blog` `b` left join `user` `u` on((`b`.`user_id` = `u`.`user_id`))) */;
/*!50001 SET character_set_client      = @saved_cs_client */;
/*!50001 SET character_set_results     = @saved_cs_results */;
/*!50001 SET collation_connection      = @saved_col_connection */;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!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 2021-08-31 15:21:04
jfinal_demo_20210831.sql

 

  恢復數據

-- 創建數據庫
create database jfinal_demo;
-- 使用已創建的數據庫
use jfinal_demo;
-- 設置編碼
set names utf8;
-- 導入備份數據庫
source '文件路徑'
commit;

  使用Navicat等工具導入sql文件

 

 

  后記

  需要進行備份時(例如:更新代碼、進行系統版本迭代等),雙擊執行腳本即可

  可以在配置定時執行腳本,實現自動備份

 

  Oracle可以使用exp命令進行數據表備份,例如:

D:\orcale\11.2.0\dbhome_1\BIN\exp username/password@127.0.0.1:1521/orcl file="E:\backup_files\test.DMP" log="E:\backup_files_log\test.txt"

  導出命令不同,其他的都一樣

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM