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

推薦する

CSS BEM 命名標準の概要 (推奨)

1 BEM命名標準とはBem は、ブロック、要素、修飾子の略語であり、Yandex チームによって...

MySQL 日付処理関数の例の分析

この記事は主にMySQLの日付処理関数のサンプル分析を紹介します。この記事ではサンプルコードを詳細に...

Ubuntuの基本設定: openssh-serverのインストールと使用

Ubuntu 17.10 での openssh-server のインストールと使用を記録します。イン...

Vueコンポーネントの動的コンポーネントの詳細な説明

目次要約する要約する配列が変更されると、対応するデータを動的にロードしますシナリオ: 異なるコンポー...

Vue3 でモバイル ログインおよび登録モジュールをエレガントに実装する方法

目次序文入力ボックスコンポーネントレイアウトvモデルデータ検証ルール設計形状サブコンポーネントは検証...

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

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

背景画像に CSS3 変換を適用するためのソリューション

CSS 変換は便利ですが、背景画像にはまだ適用されていません。この投稿では、背景画像を回転させたい場...

Elementはスクリプトを使用して新しいコンポーネントを自動的に構築します

目次背景element-ui の自動構築はどのように機能しますか?メイクファイル新しい.jsファイル...

IIS web.config でクロスドメイン アクセスを設定する方法

要件: ページに画像を表示する必要がありますが、さまざまな理由により、画像はサーバー 2 にあります...

Linux デバイスに空き容量がありません inode の満杯により 500 エラーが発生します

iノードとは何ですか? inode を理解するには、まずファイル ストレージから始める必要があります...

Nginx でアンチホットリンクを設定するための手順を完了する

必要:通常、サイト側は、ウェブサイト上の動画や写真が盗まれるのを防ぎたいと考えています。結局のところ...

Mysql systemctl start mysqld によって報告されるエラーの解決策

エラーメッセージ:制御プロセスがエラー コードで終了したため、mysqld.service のジョブ...

CSS3 のボックス サイズ設定 (コンテンツ ボックスとボーダー ボックス) の詳細な説明

CSS3 のボックス サイズ設定 (content-box と border-box) CSS3 の...

MySQLインデックスが失敗するいくつかの状況の分析

1. 最左プレフィックス原則 - 複数の列にインデックスが付けられている場合は、最左プレフィックス原...

JavaScript で矢印関数を使用できないシナリオはどれですか

目次1. オブジェクトメソッドを定義する2. プロトタイプメソッドを定義する3. イベントコールバッ...