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

推薦する

WeChatアプレットのスクロールビューが左右連動効果を実現

WeChatアプレットはスクロールビューを使用して左右のリンクを実現します。参考までに、具体的な内容...

海外の無料写真素材サイトベスト9

良い画像素材のウェブサイトを見つけるのは難しいです。特に無料です。良い写真には非常に目を引く視覚効果...

Linux Dig コマンドの使用法

発掘紹介: Dig は、Unix ライクなコマンドライン モードで NS レコード、A レコード、M...

MySQLデータをOracleに移行する正しい方法

mysql データベースには student テーブルがあり、その構造は次のとおりです。 Oracl...

ウェブデザイナー職の面接でよくある質問と回答

1. ASP.NET Web アプリケーションのテンプレートとは何ですか? それらの違いは何ですか?...

HTTP および HTTP コラボレーション Web サーバー アクセス フロー図

Web サーバーは、独立したドメイン名を持つ複数の Web サイトを構築できるほか、通信経路上のトラ...

CSS スタイルのリセットとクリア (異なるブラウザで同じ効果を表示するため)

異なるブラウザ間でページの表示を一致させるためには、フロントエンド開発において CSS スタイルのク...

HTML テーブルレイアウト例の説明

HTML ドキュメント内の要素は次々に配置され、ブロックレベル要素の前後に改行が追加されるだけで、合...

CentOS6.7 mysql5.6.33 でデータファイルの場所を変更する方法

問題: MySQL がデータ ファイルを保存するパーティションの容量が小さく、現在いっぱいになってい...

jsは双方向データバインディング(アクセサ監視)を実現します

この記事の例では、双方向データバインディングを実現するためのjsの具体的なコードを参考までに共有して...

CSS の :focus-within の楽しさについて簡単に説明します

Bステーションでパスワードを入力するときに目を覆っているこの画像を見たことがある人もいると思いますこ...

HTMLはマウスをホバーしたときにテキストを表示するためにtitle属性を使用します。

コードをコピーコードは次のとおりです。 <a href=# title="ここに表示...

DockerイントラネットはDNSを構築し、ip:port操作の代わりにドメイン名アクセスを使用します

たとえば、イントラネットに Jenkins サーバーがある場合、そのサーバーにアクセスするには、その...

CSSをiPhoneのフルスクリーンに適応させる方法

1. メディアクエリ方式 /*iPhone X への適応*/ @media 画面のみ、(デバイス幅:...

MySQL 5.7.18のインストール方法とMySQLサービスの起動手順の詳細な説明

MySQL は非常に強力なリレーショナル データベースです。しかし、初心者の中には、インストールや設...