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を使用します

推薦する

Vue プロジェクトで axios をカプセル化する方法 (http リクエストの統合管理)

1. 要件Vue.js フレームワークを使用してフロントエンド プロジェクトを開発する場合、サーバ...

Docker を使用して Go Web アプリケーションをデプロイする方法

目次なぜ Docker が必要なのでしょうか? Docker デプロイメントの例コードの準備Dock...

無効と読み取り専用の機能と違い

1: readonly は、このコントロールをロックして、インターフェイス上で変更できないようにしま...

Linuxアカウントファイル制御管理の詳細な手順

Linux システムでは、ユーザーが手動で作成したさまざまなアカウントに加えて、システムまたはプログ...

MySQL テーブルの追加、削除、変更、クエリの基本チュートリアル

1. 作成する [テーブル名] (フィールド1、フィールド2、...) 値 (値1、値2、...) ...

W3C チュートリアル (4): W3C XHTML アクティビティ

HTML は、World Wide Web 上で公開するために使用されるハイブリッド言語です。 XH...

Webフロントエンド開発エンジニアが習得すべきコアスキル

Web フロントエンド開発に含まれる内容は、主に W3C 標準の構造、動作、パフォーマンスです。では...

nginx 設定チュートリアルにおける add_header の落とし穴の詳細な説明

序文add_header は、headers モジュールで定義されたディレクティブです。名前が示すよ...

4 つの主要な SQL ランキング関数 ROW_NUMBER、RANK、DENSE_RANK、NTILE の使用方法の紹介

1. ROW_NUMBER()定義: ROW_NUMBER() 関数は、select によってクエリ...

XHTML 入門チュートリアル: フレーム タグの使用

<br />フレーム構造により、ブラウザの 1 ページに複数の Web ページを同時に表...

Linux でパスワードを入力せずに sudo コマンドを実行する方法

sudo コマンドを使用すると、信頼できるユーザーは別のユーザー (デフォルトでは root ユーザ...

初心者がHTMLタグを学ぶ(1)

初心者は、いくつかの HTML タグを理解することで HTML を学習できます。この入門書は、初心者...

テキストの両側に水平線を描くための CSS のサンプルコード

この記事では、テキスト中央の両側に水平線を引く効果を実現する CSS のサンプルコードを紹介し、皆さ...

仕事でよく使うLinuxコマンドまとめ

仕事では、docker や kubernetes などのオープンソース ツールをさらに活用しましょう...