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 EXPLAIN出力列の詳細な説明

1. はじめにEXPLAIN ステートメントは、MySQL がステートメントを実行する方法に関する情...

XHTML言語のデフォルトCSSスタイル

html、アドレス、引用ブロック、本文、dd、div、 dl、dt、フィールドセット、フォーム、フレ...

img タグの src 属性値が空の場合の 2 つのリクエストの問題 (IE 以外のブラウザ)

img src 値が空の場合、リクエストが 2 つ行われます。一部の学生は以前に同様の状況に遭遇した...

MySQL 8.0 の降順インデックス

序文インデックスが順序付けられていることは誰もが知っていると思いますが、MySQL の以前のバージョ...

MySQLプリコンパイル機能の詳細な説明

この記事では、MySQLのプリコンパイル機能について紹介します。具体的な内容は以下のとおりです。 1...

CSS3で作られたレインボーボタンスタイル

結果: 実装コード: html <div class="buttons"&...

標準のMySQL (x64) Windowsバージョンのインストール手順の詳細な説明

MySQL x64 はインストーラーを提供していません、インストーラーを提供していません、インストー...

Ubuntu 16.04にJenkinsをインストールするための詳細な手順

1. 前提条件JDKがインストールされましたecho $PATHソフトリンクを作成し、JDKのインス...

バックエンドデータを取得するためのVue Elementフロントエンドアプリケーション開発

目次概要1. バックエンドデータの取得と処理2. インターフェース表示処理概要前回のエッセイ「ステッ...

dockerコマンドの使用にはsudoは必要ありません

docker デーモンは通常の TCP ポートではなくホストの Unix ソケットにバインドする必要...

JS で配列の重複排除を実装する 7 つの方法

目次1. Set()+Array.from() を使用する2. 2層ループ+アレイ接合方式の使用3....

mysql indexof関数の使用手順

以下のように表示されます。 LOCATE(部分文字列、文字列)文字列 str 内の部分文字列 sub...

win2008R2 64 ビット システムでの mysql5.7.17 のインストールと構成の例

123WORDPRESS.COM では、さまざまな環境での MYSQL の他のバージョンのインストー...

Vue3.0 + TypeScript + Vite初体験の詳しい説明

目次プロジェクトの作成プロジェクト構造メイン.jsアプリ.vue:設定コンポジションAPI参照反応的...

MySQL 5.7.17無料インストール版のインストールと設定

MYSQLバージョン:MySQL Community Server 5.7.17、インストール不要版...