Linux は定期的に mysql をバックアップし、他のサーバーと同期します。

高洛峰
リリース: 2016-11-23 10:27:43
オリジナル
1414 人が閲覧しました

データはあらゆる企業の中核資産です。定期的なバックアップは、データベースに問題が発生した場合に、損失を最小限に抑えるために最も近いバックアップ時点にロールバックできるようにするためのものです。

この記事は 2 つに分かれています。 2 つの部分 説明: 1. mysql の定期的なバックアップ

mysql バックアップ

データベースのバックアップと復元

バックアップと復元

# 导出数据库
/usr/bin/mysqldump -u root -ppwd database > database20160929.sql
# 导入数据库
mysql -u root -p database < database20160929.sql
ログイン後にコピー

圧縮ファイルからのインポート

#备份到压缩文件
/usr/bin/mysqldump -u root -ppwd database  | gzip > database20160929.sql.gz
#从压缩文件导入
gzip < database20160929.sql.gz | mysql -u root -p database
ログイン後にコピー

crontab スケジュールされたバックアップ

1、バックアップディレクトリを作成します

# root 用户,创建备份目录
mkdir -p /bak/mysqlbak
cd /bak/mysqldata
ログイン後にコピー

2. 実行スクリプトを作成します

vi  /usr/sbin/bakmysql.sh
ログイン後にコピー

スクリプトコード:

#!/bin/bash
# Name:bakmysql.sh
# This is a ShellScript For Auto DB Backup and Delete old Backup
#
backupdir=/bak/mysqlbak
time=` date +%Y%m%d%H `
mysql_bin_dir/mysqldump -u root -ppwd database | gzip > $backupdir/database$time.sql.gz
#
find $backupdir -name "name_*.sql.gz" -type f -mtime +7 -exec rm {} ; > /dev/null 2>&1

#
ログイン後にコピー

スクリプトの説明:

backupdir mysqlバックアップアドレス

root mysqlユーザー名

pwd mysqlパスワード

データベースデータベースname

mysql_bin_dir mysql bin path;

time=` date +%Y%m%d%H ` は、time="$(date +"%Y%m%d$H")" と書くこともできます。 ` 記号は、ENTER の左側の ' 記号ではなく、TAB キー記号の上にあり、日付の後にはスペースが必要です。

type f は一般的なタイプのファイルを見つけることを意味し、f は通常のファイルを意味します。

mtime +7 は変更時刻に基づいてファイルを検索します。+5 はファイルが 7 日前に変更されたことを意味し、-mmin +5 はファイルが 5 分前に変更されたことを意味します。

exec rm {} は、シェル コマンドの実行を意味します。exec オプションの後に、実行するコマンドまたはスクリプトが続き、次に {} のペア、スペース、および最後にセミコロンが続きます。

/dev/null 2>&1 標準エラーを標準出力にリダイレクトし、/DEV/NULL の下にスローします。平たく言えば、すべての標準出力と標準エラーをゴミ箱に捨てることを意味し、その中の & はコマンドをバックグラウンドで実行させることを意味します。

3. スクリプトに実行権限を追加します

# chmod +x /usr/sbin/bakmysql.sh
ログイン後にコピー

4. スケジュールされた実行用に crontab を設定します

vi /etc/crontab 
#在最后一行中加入:  
00 3 * * * root /usr/sbin/bakmysql.sh
#表示每天3点00分执行备份
ログイン後にコピー

注: crontab 設定ファイルの形式は次のとおりです:
時間共有日月週コマンド

5. crontab

/etc/rc.d /init.d/crond restart

これでスケジュールされたバックアップが完了し、過去 7 日間のバックアップ データがクリーンアップされます

他のサーバーと同期します

ここでは Linux ファイル同期を使用しますファイルを同期するツール rsync+inotify

rsync
ログイン後にコピー

rsync は、Unix のようなシステムでのデータ ミラーリング バックアップ ツール、つまりリモート同期です。高速増分バックアップ ツール Remote Sync は、ローカル レプリケーション、または他の SSH および rsync ホストとの同期をサポートします

使用法

rsync src dest
ログイン後にコピー

これは最も単純な使用法であり、src ファイルと dest ファイルを同期することを意味します。 (つまり、実行後、dest のファイルは src のファイルと同じになり、それが優先されます)

共通オプション

-a: -rlptgoD と同等、アーカイブ形式

-r: 再帰的

-l:コピーソフトリンク

-p: 権限情報を保持

-t: src の変更時刻を dest に同期

-g: グループ情報 (group) を同期

-o: 所有者情報 (own) を同期

-D : キャラクター ファイルとブロック デバイス ファイルを保持します

-z: 圧縮送信を有効にします

---delete: src にこのファイルがない場合、dest にもそのファイルを持つことはできません。つまり、dest の src にないファイルを削除します。 (このオプションを使用する場合は、-r オプションと一緒に使用する必要があります)

## 将本地/bak/mysqlbak/文件同步到 远程服务器 /bak/mysql/bak 目录下面 排除 mysqlbak/index目录 通过ssh端口
rsync -vzacu  /bak/mysqlbak/  root@192.168.53.86:/bak/mysqlbak   --exclude  "mysqlbak/index"   -e "ssh -p 22"
# 将远程目录 /bak/mysqlbak下的文件同步到本地 /bak/mysqlbak/目录下
rsync -vzrtopg --progress --delete root@192.168.53.85:/bak/mysqlbak  /bak
ログイン後にコピー

リモート ファイルの rsync サーバー側同期を有効にする

rsycn のサーバー側はサーバーのファイル受信側であり、rsycn のクライアント側はrsycn はサーバーの最後をプッシュするファイルです。

rsycnサーバー/ファイルレシーバーの構成

サーバーはrsyncdサービスを有効にする必要があります

構成ファイルrsyncd.confを追加します

vi /etc/rsyncd.conf
#以下是全局配置
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/lock/rsyncd
[mysqlbak]     #模块名,在源服务器指定这个名字
   comment = sync rsync/home      #描述信息
   path = /bak/mysqlbak      #备份目录
   use chroot=no           #不使用chroot,不用root权限
   read only = no          #设置本地备份目录为读写权限
   uid=root          
   gid=root
   max connections=10       #客户端最大连接数
   auth users = root      #指定数据同步用户
   secrets file = /etc/rsyncd.pass          #指定数据同步用户信息文件
   hosts allow=192.168.53.0/85     #允许连接的客户端
   ignore errors = yes     #忽略出现I/O错误
   timeout = 600
ログイン後にコピー

認証ファイルを作成します

 vi /etc/rsyncd.pass
  ##代码
  root:root      #格式是用户名:密码
  #属主要有权限读这个文件,否则会报没权限
  chmod 600 /etc/rsyncd.pass
ログイン後にコピー

/etc/xinetd.d/rsyncファイルを変更し、変更しますno

service rsync
{        disable = no
        socket_type     = stream        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon        log_on_failure  += USERID
}
ログイン後にコピー

サーバーを起動します

rsync --daemon --config=/etc/rsyncd.conf
ログイン後にコピー

rsycnクライアント/ファイル送信者の設定

クライアントの設定は簡単で、パスワードを設定するだけです

  vi /etc/rsync_client.pwd  ##代码
  root    #只需要填写rsync服务的密码  
  #属主要有权限读这个文件,否则会报没权限
  chmod 600 /etc/rsync_client.pwd
ログイン後にコピー

クライアント同期テスト

/usr/bin/rsync -auvrtzopgP --progress --password-file=/etc/rsync_client.pwd /bak/mysqlbak/ root@192.168.53.86::mysqlbak
ログイン後にコピー

rsyncは1回のみです同期 (リアルタイムが必要な場合) 同期には別のツールの導入が必要です

inotify

Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。

Inotify只需要要按照部署在同步的客户端,当监控的文件有变化触动 rsync脚本来同步

安装

yum install inotify-tools
ログイン後にコピー

配置监控的文件路径

vi /etc/inotify_exclude.lst
#代码
/bak/mysqlbak #监控目录
@/bak/log #排除监控目录
ログイン後にコピー

rsync排除监控文件目录

vi /etc/rsyncd.d/rsync_exclude.lst#代码src/*.html*
src/js/
src/2014/20140[1-9]/
ログイン後にコピー

客户端同步到远程的脚本rsync.sh

#rsync auto sync script with inotify
#variables
current_date=$(date +%Y%m%d_%H%M%S)
source_path=/bak/mysqlbak/
log_file=/var/log/rsync_client.log
#rsync
rsync_server=192.168.53.86
rsync_user=root
rsync_pwd=/etc/rsync_client.pwd
rsync_module=mysqlbak
INOTIFY_EXCLUDE=&#39;(.*/*\.log|.*/*\.swp)$|^/tmp/src/mail/(2014|20.*/.*che.*)&#39;
RSYNC_EXCLUDE=&#39;/bak/rsync_exclude.lst&#39;
#rsync client pwd check
if [ ! -e ${rsync_pwd} ];then
    echo -e "rsync client passwod file ${rsync_pwd} does not exist!"
    exit 0
fi
#inotify_function
inotify_fun(){
    /usr/bin/inotifywait -mrq --timefmt &#39;%Y/%m/%d-%H:%M:%S&#39; --format &#39;%T %w %f&#39; \
          --exclude ${INOTIFY_EXCLUDE}  -e modify,delete,create,move,attrib ${source_path} \
          | while read file
      do
          /usr/bin/rsync -auvrtzopgP --exclude-from=${RSYNC_EXCLUDE} --progress --bwlimit=200 --password-file=${rsync_pwd} ${source_path} ${rsync_user}@${rsync_server}::${rsync_module} 
      done
}
#inotify log
inotify_fun >> ${log_file} 2>&1 &
ログイン後にコピー

给脚本执行权限,执行后就可以了

chmod 777 rsync.sh
./rsync.sh
ログイン後にコピー


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート