オンライン システムの場合、データベースのバックアップ操作は非常に重要な手順です。バックアップのないデータベースは安全ではありません。このブログ投稿では、オンライン情報を参考にして、シェル スクリプト ファイルを使用して、MySQL データベースの LAN 内での完全バックアップ、増分バックアップ、およびスケジュールされたバックアップ操作を実現します。
サーバーの紹介: centos 7.0
1. 単一データベースバックアップスクリプトファイル
#vi mysql-backup.sh
db_user="root" #本服务器用户名密码 db_passwd="root" db_host="192.168.64.137" #本服务器地址 db_name="whp" #需要备份数据库名称 # the directory for story your backup file. backup_dir="/backup" #备份以后放入的文件路径 # date format for backup file (dd-mm-yyyy) time="$(date +"%Y-%m-%d-%H-%M-%S")" # mysql, mysqldump and some other bin's path MYSQL="/application/mysql/bin/mysql" MYSQLDUMP="/application/mysql/bin/mysqldump" GZIP="/bin/gzip" $MYSQLDUMP -u $db_user -h $db_host -p$db_passwd $db_name | $GZIP -9 > "$backup_dir/$db_name"_"$time.gz"
2. 7 日間の履歴データの完全なバックアップを保持します
db_user="root" db_passwd="root" db_host="localhost" # the directory for story your backup file. backup_dir="/application/backup/" # date format for backup file (dd-mm-yyyy) time="$(date +"%H-%M-%S-%m-%d-%y")" # mysql, mysqldump and some other bin's path MYSQL="/application/mysql/bin/mysql" MYSQLDUMP="/application/mysql/bin/mysqldump" MKDIR="/bin/mkdir" RM="/bin/rm" MV="/bin/mv" GZIP="/bin/gzip" # check the directory for store backup is writeable test ! -w $backup_dir && echo "Error: $backup_dir is un-writeable." && exit # the directory for story the newest backup test ! -d "$backup_dir/backup.0/" && $MKDIR "$backup_dir/backup.0/" echo "Start to Backup..."; # get all databases # don't backup information_schema、performance_schema all_db="$($MYSQL -u $db_user -h $db_host -p$db_passwd -Bse 'show databases')" all_db=${all_db//information_schema/}; all_db=${all_db//performance_schema/}; for db in $all_db do $MYSQLDUMP -u $db_user -h $db_host -p$db_passwd $db | $GZIP -9 > "$backup_dir/backup.0/$time.$db.gz" done # delete the oldest backup test -d "$backup_dir/backup.7/" && $RM -rf "$backup_dir/backup.7" # rotate backup directory for int in 6 5 4 3 2 1 0 do if(test -d "$backup_dir"/backup."$int") then next_int=`expr $int + 1` $MV "$backup_dir"/backup."$int" "$backup_dir"/backup."$next_int" fi done echo "BackUp Success!" exit 0;
3. シェル スクリプトの権限を変更し、を実行します。
# chmod 700 mysql-backup.sh // 只允许管理员运行此脚本 #./mysql-backup.sh //执行脚本,测试一次
#执行mysqladmin执行刷新日志文件 /application/mysql/bin/mysqladmin -uroot -proot flush-logs #DATADIR=/var/lib/mysql DATADIR=/application/data #获取数据文件路径 BAKDIR=/backup #获取要备份的数据目标文件路径 ###如果mysql bin log你做了特殊设置,请修改此处或者修改应用此变量的行:缺省取机器名,mysql缺省也是取机器名 #HOSTNAME=`uname -n` cd $DATADIR #转入到/application/data 查询mysql-bin.index文件 #FILELIST=`cat $HOSTNAME-bin.index` FILELIST=`cat mysql-bin.index` ## COUNTER number COUNTER=0 for file in $FILELIST do COUNTER=`expr $COUNTER + 1 ` done NextNum=0 for file in $FILELIST do base=`basename $file` NextNum=`expr $NextNum + 1` if [ $NextNum -eq $COUNTER ] then echo "skip lastest" else dest=$BAKDIR/$base if(test -e $dest) then echo "skip exist $base" else echo "copying $base" cp $base $BAKDIR fi fi done echo "backup mysql binlog ok"2. ファイル権限を変更し、実行します
# chmod 700 incre-backup.sh // 只允许管理员运行此脚本 #./mysql-backup.sh //执行脚本,测试一次【自動バックアップ】上記のスクリプト記述に基づいて、Linux システムの
crontab コマンドを使用して、シェル ファイルを定期的に自動的に実行します:
# crontab –e 添加: 00 01 * * */mysql-backup.sh // 每天凌晨1点执行[リモート LAN バックアップ]
# yuminstall -y nfs-utils b)编辑exports文件 #vim/etc/exports #/home/nfs/192.168.248.0/24(rw,sync)192.168.248.0/24 と同じネットワーク番号を持つホストは、 NFS サーバーの /home/nfs/ ディレクトリにマウントされて独自のファイル システムになります rw は読み取り可能および書き込み可能を意味します nfs サービスを開始します #systemctlstart rpcbind.service #systemctlstart nfs-server 。 service S d) NFS サーバーが正常に開始されたことを確認します: #RPCINFO —P
E) 正常に開始されない場合は、RPCBind および NFS サーバー サービスを再起動します:
A) NFS をインストールし、RPCBind サービスを開始します
# yuminstall-yユーティリティ
b) rpcbind.service
c) 次に、rpcbind サービスを開始します:
systemctlstart rpcbind.service
d) NFS サーバー上に共有ディレクトリがあるかどうかを確認します:
#showmount -e 192.168.64。 138
e) スレーブ マシンの mount を使用して、サーバー側のディレクトリをクライアントのディレクトリにマウントします (ここでは、上記の
ローカル バックアップのファイル パスをサーバーと同様にマウントします):
#mount -tnfs - o nolock,nfsvers=1,vers =3 192.168.64.138:/home/nfs /backup
問題
: mount.nfs: 古い NFS ファイル ハンドル
解決策: クライアント側でマウント ファイルを削除し、再マウントします:
# umount – a
【バックアップとリカバリ】
a. gzip データベースを Mysq に復元します
#gunzip #/mysql/bin/mysqlbinlog--database=fox --start-date="2013-01-22 5:00:00" --stop-date="2013-01-22 9:00:00"/ /mysql/data/mysql-bin.000001: バイナリファイルを指定します [概要] 基本的なバックアップ方法は完了しましたが、複数のファイルをあまり消費せずにセキュリティを確保するには、特定のアプリケーションシナリオに応じて異なるバックアップ戦略を採用する必要がありますメモリ。 上記は、MySQL LAN バックアップ (完全バックアップ、ログ増分バックアップを含む) を実装した Centos7 の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。