mysql資料庫備份還原代碼(mysql資料庫備份還原代碼是什麼)

本文目錄一覽:

如何用Java實現MySQL資料庫的備份和恢復

MySQL的一些前台工具是有備份恢復功能的,可是如何在我們的應用程序中實現這一功能呢?本文提供了示例代碼來說明如何使用Java代碼實現MySQL資料庫的備份恢復。

本次實現是使用了MySQL資料庫本身提供的備份命令mysqldump和恢復命令mysql,在java代碼中通過從命令行調用這兩條命令來實現備份和恢復。備份和恢復所使用的文件都是sql文件。

本代碼是參照網上某網友提供的源碼完成的。

[java] view plaincopy

package xxx.utils;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.io.UnsupportedEncodingException;

/**

* MySQL資料庫的備份與恢復 缺陷:可能會被殺毒軟體攔截

*

* @author xxx

* @version xxx

*/

public class DatabaseBackup {

/** MySQL安裝目錄的Bin目錄的絕對路徑 */

private String mysqlBinPath;

/** 訪問MySQL資料庫的用戶名 */

private String username;

/** 訪問MySQL資料庫的密碼 */

private String password;

public String getMysqlBinPath() {

return mysqlBinPath;

}

public void setMysqlBinPath(String mysqlBinPath) {

this.mysqlBinPath = mysqlBinPath;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public DatabaseBackup(String mysqlBinPath, String username, String password) {

if (!mysqlBinPath.endsWith(File.separator)) {

mysqlBinPath = mysqlBinPath + File.separator;

}

this.mysqlBinPath = mysqlBinPath;

this.username = username;

this.password = password;

}

/**

* 備份資料庫

*

* @param output

* 輸出流

* @param dbname

* 要備份的資料庫名

*/

public void backup(OutputStream output, String dbname) {

String command = “cmd /c ” + mysqlBinPath + “mysqldump -u” + username

+ ” -p” + password + ” –set-charset=utf8 ” + dbname;

PrintWriter p = null;

BufferedReader reader = null;

try {

p = new PrintWriter(new OutputStreamWriter(output, “utf8”));

Process process = Runtime.getRuntime().exec(command);

InputStreamReader inputStreamReader = new InputStreamReader(process

.getInputStream(), “utf8”);

reader = new BufferedReader(inputStreamReader);

String line = null;

while ((line = reader.readLine()) != null) {

p.println(line);

}

p.flush();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

if (reader != null) {

reader.close();

}

if (p != null) {

p.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

/**

* 備份資料庫,如果指定路徑的文件不存在會自動生成

*

* @param dest

* 備份文件的路徑

* @param dbname

* 要備份的資料庫

*/

public void backup(String dest, String dbname) {

try {

OutputStream out = new FileOutputStream(dest);

backup(out, dbname);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

/**

* 恢復資料庫

*

* @param input

* 輸入流

* @param dbname

* 資料庫名

*/

public void restore(InputStream input, String dbname) {

String command = “cmd /c ” + mysqlBinPath + “mysql -u” + username

+ ” -p” + password + ” ” + dbname;

try {

Process process = Runtime.getRuntime().exec(command);

OutputStream out = process.getOutputStream();

String line = null;

String outStr = null;

StringBuffer sb = new StringBuffer(“”);

BufferedReader br = new BufferedReader(new InputStreamReader(input,

“utf8”));

while ((line = br.readLine()) != null) {

sb.append(line + “/r/n”);

}

outStr = sb.toString();

OutputStreamWriter writer = new OutputStreamWriter(out, “utf8”);

writer.write(outStr);

writer.flush();

out.close();

br.close();

writer.close();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 恢復資料庫

*

* @param dest

* 備份文件的路徑

* @param dbname

* 資料庫名

*/

public void restore(String dest, String dbname) {

try {

InputStream input = new FileInputStream(dest);

restore(input, dbname);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

Configuration config = HibernateSessionFactory.getConfiguration();

String binPath = config.getProperty(“mysql.binpath”);

String userName = config.getProperty(“connection.username”);

String pwd = config.getProperty(“connection.password”);

DatabaseBackup bak = new DatabaseBackup(binPath, userName, pwd);

bak.backup(“c:/ttt.sql”, “ttt”);

bak.restore(“c:/ttt.sql”, “ttt”);

}

}

最後的main方法只是一個簡單的使用方法的示例代碼。

本人所做的項目是使用了hibernate的,而這裡需要提供MySQL的bin路徑和用戶名、密碼,而hibernate.cfg.xml中本身就是需要配置資料庫的用戶名和密碼,所以我把MySQL的bin路徑也直接配置到了這個文件裡面,也不需要創建專門的配置文件,不需要寫讀取配置文件的介面了。

如果不明白,可以去看hibernate.cfg.xml的說明,裡面是可以配置其他的property的

mysql怎麼通過備份還原資料庫文件

一、數據備份

1、使用mysqldump命令備份

mysqldump命令將資料庫中的數據備份成一個文本文件。表的結構和表中的數據將存儲在生成的文本文件中。

mysqldump命令的工作原理很簡單。它先查出需要備份的表的結構,再在文本文件中生成一個CREATE語句。然後,將表中的所有記錄轉換成一條INSERT語句。然後通過這些語句,就能夠創建表並插入數據。

1、備份一個資料庫

mysqldump基本語法:

mysqldump -u username -p dbname table1 table2 …- BackupName.sql

其中:

dbname參數表示資料庫的名稱;

table1和table2參數表示需要備份的表的名稱,為空則整個資料庫備份;

BackupName.sql參數表設計備份文件的名稱,文件名前面可以加上一個絕對路徑。通常將資料庫被分成一個後綴名為sql的文件;

使用root用戶備份test資料庫下的person表

mysqldump -u root -p test person D:\backup.sql

其生成的腳本如下:

文件的開頭會記錄MySQL的版本、備份的主機名和資料庫名。

文件中以「–」開頭的都是SQL語言的注釋,以”/*!40101″等形式開頭的是與MySQL有關的注釋。40101是MySQL資料庫的版本號,如果MySQL的版本比1.11高,則/*!40101和*/之間的內容就被當做SQL命令來執行,如果比4.1.1低就會被當做注釋。

2、備份多個資料庫

語法:

mysqldump -u username -p –databases dbname2 dbname2 Backup.sql

加上了–databases選項,然後後面跟多個資料庫

mysqldump -u root -p –databases test mysql D:\backup.sql

3、備份所有資料庫

mysqldump命令備份所有資料庫的語法如下:

mysqldump -u username -p -all-databases BackupName.sql

示例:

mysqldump -u -root -p -all-databases D:\all.sql

2、直接複製整個資料庫目錄

MySQL有一種非常簡單的備份方法,就是將MySQL中的資料庫文件直接複製出來。這是最簡單,速度最快的方法。

不過在此之前,要先將伺服器停止,這樣才可以保證在複製期間資料庫的數據不會發生變化。如果在複製資料庫的過程中還有數據寫入,就會造成數據不一致。這種情況在開發環境可以,但是在生產環境中很難允許備份伺服器。

注意:這種方法不適用於InnoDB存儲引擎的表,而對於MyISAM存儲引擎的表很方便。同時,還原時MySQL的版本最好相同。

3、使用mysqlhotcopy工具快速備份

一看名字就知道是熱備份。因此,mysqlhotcopy支持不停止MySQL伺服器備份。而且,mysqlhotcopy的備份方式比mysqldump快。mysqlhotcopy是一個perl腳本,主要在Linux系統下使用。其使用LOCK TABLES、FLUSH TABLES和cp來進行快速備份。

原理:先將需要備份的資料庫加上一個讀鎖,然後用FLUSH TABLES將內存中的數據寫回到硬碟上的資料庫,最後,把需要備份的資料庫文件複製到目標目錄。

命令格式如下:

[root@localhost ~]# mysqlhotcopy [option] dbname1 dbname2 backupDir/

dbname:資料庫名稱;

backupDir:備份到哪個文件夾下;

常用選項:

–help:查看mysqlhotcopy幫助;

–allowold:如果備份目錄下存在相同的備份文件,將舊的備份文件加上_old;

–keepold:如果備份目錄下存在相同的備份文件,不刪除舊的備份文件,而是將舊的文件更名;

–flushlog:本次輩分之後,將對資料庫的更新記錄到日誌中;

–noindices:只備份數據文件,不備份索引文件;

–user=用戶名:用來指定用戶名,可以用-u代替;

–password=密碼:用來指定密碼,可以用-p代替。使用-p時,密碼與-p之間沒有空格;

–port=埠號:用來指定訪問埠,可以用-P代替;

–socket=socket文件:用來指定socket文件,可以用-S代替;

mysqlhotcopy並非mysql自帶,需要安裝Perl的資料庫介麵包;下載地址為:

目前,該工具也僅僅能夠備份MyISAM類型的表。

二、數據還原

1、還原使用mysqldump命令備份的資料庫的語法如下:

mysql -u root -p [dbname] backup.sq

示例:

mysql -u root -p C:\backup.sql

2、還原直接複製目錄的備份

通過這種方式還原時,必須保證兩個MySQL資料庫的版本號是相同的。MyISAM類型的表有效,對於InnoDB類型的表不可用,InnoDB表的表空間不能直接複製。

mysql資料庫備份和還原

MySQL資料庫備份與還原

備份和恢複數據

生成SQL腳本

在控制台使用mysqldump命令可以用來生成指定資料庫的腳本文本,但要注意,腳本文本中只包含資料庫的內容,而不會存在創建資料庫的語句!所以在恢複數據時,還需要自已手動創建一個資料庫之後再去恢複數據。

mysqldump –u用戶名 –p密碼 資料庫名生成的腳本文件路徑

現在可以在C盤下找到mydb1.sql文件了!

注意,mysqldump命令是在Windows控制台下執行,無需登錄mysql!!!

執行SQL腳本

執行SQL腳本需要登錄mysql,然後進入指定資料庫,才可以執行SQL腳本!!!

執行SQL腳本不只是用來恢復資料庫,也可以在平時編寫SQL腳本,然後使用執行SQL 腳本來操作資料庫!大家都知道,在黑屏下編寫SQL語句時,就算髮現了錯誤,可能也不能修改了。所以我建議大家使用腳本文件來編寫SQL代碼,然後執行之!

SOURCE C:\mydb1.sql

注意,在執行腳本時需要先行核查當前資料庫中的表是否與腳本文件中的語句有衝突!例如在腳本文件中存在create table a的語句,而當前資料庫中已經存在了a表,那麼就會出錯!

還可以通過下面的方式來執行腳本文件:

mysql -uroot -p123 mydb1c:\mydb1.sql

mysql –u用戶名 –p密碼 資料庫要執行腳本文件路徑

這種方式無需登錄mysql!

怎麼備份和還原mysql資料庫

備份資料庫

使用mysqldump命令備份資料庫

還原資料庫

1、使用mysql命令還原資料庫

將game_backup.sql

還原至

game

資料庫:

2、使用source命令還原資料庫

如果資料庫過大,建議可以使用source命令

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/249258.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:32
下一篇 2024-12-12 13:32

相關推薦

  • 如何修改mysql的埠號

    本文將介紹如何修改mysql的埠號,方便開發者根據實際需求配置對應埠號。 一、為什麼需要修改mysql埠號 默認情況下,mysql使用的埠號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Python字元串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字元串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字元串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變數和數…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • 倉庫管理系統代碼設計Python

    這篇文章將詳細探討如何設計一個基於Python的倉庫管理系統。 一、基本需求 在著手設計之前,我們首先需要確定倉庫管理系統的基本需求。 我們可以將需求分為以下幾個方面: 1、庫存管…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Python實現簡易心形代碼

    在這個文章中,我們將會介紹如何用Python語言編寫一個非常簡單的代碼來生成一個心形圖案。我們將會從安裝Python開始介紹,逐步深入了解如何實現這一任務。 一、安裝Python …

    編程 2025-04-29

發表回復

登錄後才能評論