JavaベースのMySQLバックアップテーブル操作

JavaベースのMySQLバックアップテーブル操作

コアはmysqldumpとランタイムです
操作は実際にはそれほど難しくありません。バックアップ操作を実行するクラスを作成します。バックアップ呼び出しを受信した後、テーブルをバックアップ中としてマークし、バックアップ操作を実行する子スレッドを作成します。必要な構成情報は構成ファイルから読み取られ、Windows および Linux でのパスの問題にも注意してください。


設定ファイルは次のとおりです。

Javaコードコレクションコード
# データベースアドレス
dbアドレス=ローカルホスト
# バックアップするデータベースの名前
データベース名=nms
# データベースユーザー名
ユーザー名 = ルート
# データベースパスワード
パスワード = ルート
#mysqldump パスLinux
mysqlpath = /usr/bin/
# バックアップファイルの保存場所 Linux
sqlFilePath = /MySQlBack/
#mysqldump パス Windows
#mysqlpath = C\://Program Files//MySQL//MySQL Server 5.5//bin//
# バックアップファイルの保存場所 Windows
#sqlFilePath =C\://MySQl//

この機能を実行するコード クラスは次のとおりです。

Javaコードコレクションコード
パッケージ com.nms.common.db;
java.io.File をインポートします。
java.io.IOException をインポートします。
java.io.InputStream をインポートします。
java.util.Map をインポートします。
java.util.Properties をインポートします。
java.util.concurrent.ConcurrentHashMap をインポートします。
org.apache.commons.logging.Log をインポートします。
org.apache.commons.logging.LogFactory をインポートします。
/**
* データベースのバックアップ操作の場合
*/
パブリッククラスDbBackUpMethod{
プライベート静的ログロガー = LogFactory.getLog(DbBackUpMethod.class);
プライベート静的プロパティ pros = getPprVue("db.properties");
パブリック静的 Map<String, String> backUpTableList = 新しい ConcurrentHashMap<String, String>();
プライベート静的 DbBackUpMethod backObj = 新しい DbBackUpMethod();
パブリック静的DbBackUpMethod getDbBackUpMethod(){
戻り値:
}
パブリック void バックアップ(文字列テーブル名) {
if(null != backUpTableList.get(tableName)) が返されます。
backUpTableList.put(tableName, tableName); // バックアップに既に使用されているものとしてマークする
新しいスレッド(新しいDbBackUpThread(tableName))を開始します。
}
/**
* テーブルのバックアップを実行するために使用します
*/
クラスDbBackUpThreadはRunnableを実装します{
文字列 tableName = null;
パブリックDbBackUpThread(文字列テーブル名){
this.tableName = テーブル名;
}
@オーバーライド
パブリックボイド実行() {
試す {
文字列 username = pros.getProperty("username");
文字列パスワード = pros.getProperty("password");
文字列 mysqlpaths = pros.getProperty("mysqlpath");
文字列アドレス = pros.getProperty("dbAddress");
文字列 databaseName = pros.getProperty("databaseName");
文字列 sqlpath = pros.getProperty("sqlFilePath");
ファイルbackupath = new File(sqlpath);
バックアップパスが存在する場合(){
バックアップディレクトリをmkdir()でバックアップします。
}
StringBuffer sb = 新しいStringBuffer();
sb.append(mysqlpaths);
sb.append("mysqldump ");
sb.append("--opt ");
sb.append("-h ");
sb.append(アドレス);
sb.append(" ");
sb.append("--user=");
sb.append(ユーザー名);
sb.append(" ");
sb.append("--password=");
sb.append(パスワード);
sb.append(" ");
sb.append("--lock-all-tables=true");
sb.append("--result-file=");
sb.append(sqlpath);
sb.append(テーブル名+".sql");
sb.append(" ");
sb.append("--default-character-set=utf8");
sb.append(データベース名);
sb.append(" ");
sb.append(テーブル名);
ランタイム cmd = Runtime.getRuntime();
プロセス p = cmd.exec(sb.toString());
p.waitFor(); // このステートメントは、バックアップが完了していない場合、スレッドが待機し続けることを示すために使用されます。
} キャッチ (例外 e) {
logger.error("バックアップ操作で問題が発生しました", e);
}ついに{
backUpTableList.remove(tableName); // 最終的には削除されます
}
}
}
パブリック静的プロパティ getPprVue(String propertyName) {
入力ストリーム inputStream = DbBackUpMethod.class.getClassLoader().getResourceAsStream(properName);
プロパティ p = new Properties();
試す {
p.load(入力ストリーム);
入力ストリームを閉じます。
} キャッチ (IOException e) {
logger.error("バックアップデータの構成ファイルを読み取ることができません", e);
}
p を返します。
}
}

Action では、バックアップ操作メソッドを直接呼び出すことができます。

Javaコードコレクションコード
DbBackUpMethod.getDbBackUpMethod().backup(tableName); // バックアップを呼び出す

同時に、ページにテーブルを削除する操作がある場合は、操作の前にテーブルがバックアップされているかどうかを確認する必要があります。

Javaコードコレクションコード
if(null != DbBackUpMethod.backUpTableList.get(テーブル名))

次に、ページ JSP が呼び出されると、応答プロンプトが表示されます。削除できるテーブルは 1 つだけであると私は判断します。

関数deleteTableByTableName(){
	var pk = table.getSelectedKeys();
	if(""==pk){
		alert("レコードを選択してください!");
		false を返します。
	}
	pk.length > 1の場合{
		alert("レコードを選択してください!");
		false を返します。
	}
	var 行 = table.get(pk);
	var テーブル名 = 行.テーブル名;
	if(confirm("このテーブルを削除してもよろしいですか?")) {
		if(confirm("テーブルを削除する前にバックアップする必要がありますか?\n\nバックアップを選択すると、システムはバックグラウンドで関連する操作を実行します!\nこの間、テーブルを削除することはできません!\nバックアップ操作は数時間かかる場合があります!ご注意ください!"")) {
			document.form1.action="backUpTable.action?tableName=" + テーブル名;
			ドキュメントフォーム1を送信します。
		}それ以外{
			if(confirm("送信してもよろしいですか? テーブルは削除されます!")) {
				document.form1.action="del.action?tableName=" + テーブル名;
				ドキュメントフォーム1を送信します。
			}
		}
	}
}

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL に絵文字を保存するときに表示されるエラー メッセージ「java.sql.SQLException: 文字列値が正しくありません:'\xF0\x9F\x92\xA9\x0D\x0A...'」の解決方法
  • Java+MySQLの再帰を使用してツリー型のJSONリストを連結する方法の例
  • Java バックエンド MySQL データベースを有効にして絵文字表現をサポートする方法
  • Java データ型と MySql データ型の比較表
  • JavaはMySQLデータベース内のすべてのテーブルのレコードの合計数を取得するための実行可能なメソッドを実装します
  • Java バックアップを介して MySQL データベースを復元するための実装コード
  • Java を使用して MySQL データベースに接続する方法の詳細なチュートリアル (推奨)
  • mysql-connector-java.jar パッケージのダウンロード プロセスの詳細な説明
  • Java における MySQL タイムゾーン問題の詳細な説明

<<:  Vscode が Ubuntu にリモート接続する際のエラー問題の解決方法

>>:  Vueはメニューナビゲーションを実装するためにelement-uiを使用します

推薦する

MySQL における 8 つの一般的な SQL 使用例

序文MySQL は、2016 年もデータベースの人気において力強い成長傾向を維持し続けました。 My...

Linux クラウド サーバーに新しいディスクをマウントする方法

背景社内に新しいサーバーが追加され、2Tのハードディスクがマウントされました。sshでログイン後、マ...

CentOS 7 で RPM を使用して mysql5.7.13 をインストールする

0. 環境この記事のオペレーティング システム: CentOS 7.2.1511 x86_64 My...

デザインのヒント: きっと気に入っていただけると思います

<br />このタイトルを見ると、見覚えがあるかもしれません。多くのウェブサイトが同様の...

Win10 での MySQL 8.0.15 のインストールと設定のチュートリアル

最近私が学んでいるのは MySQL の知識なので、MySQL をインストールすることが非常に重要です...

VueプロジェクトでReactを書く方法の詳細

jsx/tsxファイルを直接作成できます今回のプロジェクト構成は以下のとおりです。 vueファイルで...

GobangゲームのWebバージョンを実装するためのJavaScript

この記事では、GobangゲームのWebバージョンを実装するためのJavaScriptの具体的なコー...

HTML+SassはHambergurMenu(ハンバーガーメニュー)を実装します

先日、外国人の方がHTML+CSSを使ってHamburgerMenuを実装している動画を見ました。最...

Macシステムをインストールした後にVMWareがフルスクリーンで表示できない問題を解決する

システム: VMTOOLs ダウンロード:リンク: https://pan.baidu.com/s/...

Alibaba Cloud Server ドメイン名解決手順 (初心者向けチュートリアル)

ウェブサイトの構築を始めたばかりの初心者には、理解し、学ぶべきことがたくさんあります。ウェブサイトを...

alpineをベースにdockerfileで作成したクローラーScrapyイメージの実装

1.アルパインイメージをダウンロードする [root@DockerBrian ~]# docker ...

Mysql で group_concat の長さ制限を変更する方法

MySQL には、「group_concat」という関数があります。通常の使用では問題がないかもしれ...

実用的な情報が満載のJavaScript Webフォーム機能通信

1. はじめに先ほど、フロントエンドの表示の問題について説明しました。では、前のコンテンツに戻って、...

Vueカスタムツリーコントロールの使い方の詳細な説明

この記事では、Vueカスタムツリーコントロールの使い方を参考までに紹介します。具体的な内容は次のとお...

ReactプロジェクトでのTypeScriptの実装

目次1. はじめに2. 使用方法ステートレスコンポーネントステートフルコンポーネント制御コンポーネン...