データベースを Dropbox に自動的にバックアップする Python スクリプト
最近、大きな出来事が起こりました。つまり、GitLab の運用保守の学生が誤って本番データを削除してしまいました。GitLab は 5 つの驚くべきバックアップ メカニズムを用意していましたが、それでも 6 時間近くのユーザー データ、特に .彼らの評判へのダメージは計り知れません。よく考えると、このブログ「Becomin' Charles」には完全なバックアップがありません。主に私の個人的なブログであると考えていますが、よく考えてみると、私は 10 年近く続けてきました。本当になくなってしまったのですが、今でもとても悲しいです。
たまたま最近、妻がPythonプログラミングを習っていて、私が教えているんですが、実は私はPHPプログラマーで、Pythonは全く好きではないのですが、正直、素人がプログラミングを学ぶならPythonです。確かに、PHP よりもはるかにフレンドリーなので、彼女に Python を学ぶことをお勧めします。幸い、これを機に自分でも Python プログラミングを勉強してみようと思い、Python を使ってデータベースの自動バックアップ スクリプトを作成することにしました。バックアップの場所については、Dropbox を使用します。私のサーバーは米国のフリーモントのコンピューター室にある Linode によって提供されているため、米国のストレージ サービスを選択する方が適切です。以下は私が書いたコードです。Python 初心者の方、アドバイスをください:
#!/usr/bin/python #coding:utf-8 import sys import os from yamlimport load from datetime import datetime import dropbox from dropbox.filesimport WriteMode from dropbox.exceptions import ApiError, AuthError if len(sys.argv) < 2: print >>sys.stderr, "Usage: %s <config_file>" % sys.argv[0] sys.exit(0) conf = load(file(sys.argv[1], 'r')) # config file is a YAML looks like # --- # server-name: 127.0.0.1 # local-backup-path: /tmp # remote-backup-path: /backup # dropbox-token: jdkgjdkjg # databases: # - host: localhost # port: 3306 # user: user # pass: password # name: database1 # charset: utf8 # - host: localhost # port: 3306 # user: user2 # pass: password2 # name: database2 # charset: utf8 for dbin conf['databases'] : filename = "%s_%s.sql" % (db['name'], datetime.now().strftime("%Y%m%d-%H-%M-%S")) filepath = "%s/%s" % (conf['local-backup-path'], filename) cmd = "mysqldump -h%s -u%s -p%s -P%s --single-transaction %s > %s" % ( db['host'], db['user'], db['pass'], db['port'], db['name'], filepath ) os.system(cmd) cmd = "gzip %s" % filepath os.system(cmd) filepath = filepath + '.gz' dbx = dropbox.Dropbox(conf['dropbox-token']) backuppath = "%s/%s/%s/%s" % ( conf['remote-backup-path'], # remote path datetime.now().strftime("%Y%m%d"), # date string conf['server-name'], # server name filename + '.gz') with open(filepath, 'rb') as f: time = datetime.now().strftime("%Y-%m-%d %H:%M:%S ") print(time + "Uploading " + filepath + " to Dropbox as " + backuppath) try: dbx.files_upload(f.read(), backuppath, mode=WriteMode('overwrite')) except ApiErroras err: # This checks for the specific error where a user doesn't have # enough Dropbox space quota to upload this file if (err.error.is_path() and err.error.get_path().error.is_insufficient_space()): sys.exit("ERROR: Cannot back up; insufficient space.") elif err.user_message_text: print(err.user_message_text) sys.exit() else: print(err) sys.exit()
このコードのアイデアを簡単に説明します。このプログラムは次の要件を満たす必要があります:
mysqldump を使用してデータベースをバックアップします。ローカル
複数のデータベースの設定を許可する
Dropbox にアップロードできる
pip install PyYAML pip install dropbox

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

正規表現は、プログラミングにおけるパターンマッチングとテキスト操作のための強力なツールであり、さまざまなアプリケーションにわたるテキスト処理の効率を高めます。

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...
