mysql 异地备份

原创 Aorsking     发表于  2021-11-25 10:24       0
原文链接:
服务器环境:Linux Enterprise Server 2.6.9-42.Elsmp,Mysql 5.1.11-beta-log


配置步骤:


A:数据库的备份;以下脚本可实现mysql数据库的备份,也是官方所推荐的,即采用mysqldump导出mysql数据库到一个文件当中。

/usr/local/mysql/bin/mysqldump -uroot –p123456789 a1m > $(date +%Y%m%d)-a1m.sql

/usr/local/mysql/bin/mysqldump -uroot –p123456789 Asia1Market > $(date +%Y%m%d)-Asia1Market.sql

---   123   /usr/bin/mysqldump-uroot -plooxoo123qwe  prison_sjz>$(date +%Y%m%d)-prison_sjz.sql


说 明:/usr/local/mysql/bin/mysqldump 表示Mysql备份命令所在的绝对路径;-uroot表示用root用户登陆Mysql数据库;-p123456789 表示root用户的密码;a1m表示需要备份的数据库;$(date +%Y%m%d)-a1m.sql表示备份后自动生成的文件,格式为20070305-a1m.sql以下如此。


B:数据库文件的打包压缩;这样可以见减小数据包的大小加速数据在网络上传输的速度。

tar -zcvf $(date +%Y%m%d)mysql.tar.gz ./$(date +%Y%m%d)*


C:实现FTP的自动化;

Host=111.11.11.11 //指定上传数据库文件的FTP服务器

Username=e00021 //FTP用户名,在备份服务器上开通一帐户具有写的权限

Passwd=123456789 //FTP 密码

echo "open $Host

user $Username $Passwd

bin

cd ./mysqlbak

prompt off

mput $(date +%Y%m%d)mysql.tar.gz

printf "\n"

close

bye"|ftp -i –n


D:删除临时文件;为了节省服务器上宝贵的空间,可以用以下脚本删除曾经在服务器上生成的临时文件

rm -rf $(date +%Y%m%d)-a1m.sql $(date +%Y%m%d)-Asia1Market.sql $(date +%Y%m%d)mysql.tar.gz

通过把以上几种技术结合起来就可实现数据库的自动备份以及上传到指定FTP服务器上去,实现数据的异地备份,从而提高数据的冗余度和安全行。然后结合Linux下强大的自动执行任务程序crontab就可以实现每天服务器自动的进行以上命令而不需要人为的干涉。


E:自动化crontab的使用

首先结合以上脚本定制出适合本公司的一段shell脚本放在服务器根目录下/mysqlbak,命名为mysqlbak.sh,并且赋予可执行的权限。脚本内容如下:

-------------------------------------------------------------------------------------------------------

#!/bin/bash

#Ftp Informaition

Host=111.11.11.11

Username=backup

Passwd=123456789

#start mysqldump back

/usr/local/mysql/bin/mysqldump -uroot –p123456789 a1m > $(date +%Y%m%d)-a1m.sql

/usr/local/mysql/bin/mysqldump -uroot –p123456789 Asia1Market > $(date +%Y%m%d)-Asia1Market.sql

#start tar

tar -zcvf $(date +%Y%m%d)mysql.tar.gz ./$(date +%Y%m%d)*

#start ftp

echo "open $Host

user $Username $Passwd

bin

cd ./mysqlbak

prompt off

mput $(date +%Y%m%d)mysql.tar.gz

printf "\n"

close

bye"|ftp -i -n

#del the old file

rm -rf $(date +%Y%m%d)-a1m.sql $(date +%Y%m%d)-Asia1Market.sql $(date +%Y%m%d)mysql.tar.gz

#rm -rf $(date +%Y%m%d)*

然后就可以结合crontab命令实现日备份。具体操作如下:

用root登陆系统编辑crontab文件末尾添加如下一行,即每天的23:20执行以上脚本

#crontab –e

20 23 * * 0-6 root cd /mysqlbak;./mysqlbak.sh

这样,服务器就可以自动的每天实现重要数据的异地备份。



整理脚本:

#!/bin/bash

#Ftp Informaition

Host=192.168.199.111

Username=ftpuser

Passwd=123456

#start mysqldump back  备份

/usr/bin/mysqldump -uroot -pjx123qwe prison_data>$(date +%Y%m%d)-prison_data.sql


#start tar  打包

tar -zcvf $(date +%Y%m%d)prison_data.tar.gz ./$(date +%Y%m%d)*

#start ftp  上传

echo "open $Host

user $Username $Passwd

bin

cd mysqlbak

prompt off

mput $(date +%Y%m%d)prison_data.tar.gz

# 删除一天前的备份

mdelete $(date  +%Y%m%d -d  "-1 days")prison_data.tar.gz

printf "\n"

close

bye"|ftp -i -n

#del the old file

rm -rf $(date +%Y%m%d)-prison_data.sql $(date +%Y%m%d)-Asia1Market.sql $(date +%Y%m%d)prison_data.tar.gz

#rm -rf $(date +%Y%m%d)*


客户端需要安装这个应用才能使用

#!/bin/bash

#Ftp Informaition

Host=192.168.199.111

Username=ftpuser

Passwd=123456

#start mysqldump back

/usr/bin/mysqldump -uroot -pjx123qwe prison_data>$(date +%Y%m%d)-prison_data.sql


#start tar

tar -zcvf $(date +%Y%m%d)prison_data.tar.gz ./$(date +%Y%m%d)*

#start ftp

echo "open $Host

user $Username $Passwd

bin

cd mysqlbak

prompt off

mput $(date +%Y%m%d)prison_data.tar.gz


mdelete $(date  +%Y%m%d -d  "-1 days")prison_data.tar.gz

printf "\n"

close

bye"|ftp -i -n

#del the old file

rm -rf $(date +%Y%m%d)-prison_data.sql $(date +%Y%m%d)-Asia1Market.sql $(date +%Y%m%d)prison_data.tar.gz

#rm -rf $(date +%Y%m%d)*




自动备份多个库,删除一个月之前的库

#! /bin/bash # MySQL用户 user= "root" # MySQL密码 userPWD= "123456" # 需要定时备份的数据表列表 dbNames=(db_test1 db_test2 db_test3 db_test4 db_test5) # 每次的备份数据以日期创建文件夹存放,同时删除过期备份 # 此处以保留1个月的备份数据为例 DATE=` date -d "now" +%Y%m%d%H` ODATE=` date -d "-1 month" +%Y%m%d%H` newdir= /data/backup/ $DATE olddir= /data/backup/ $ODATE # 删除过期备份数据 if [ -d $olddir ]; then rm -rf $olddir fi # 创建新备份文件夹 mkdir $newdir # 对备份数据库列表的所有数据库备份 for dbName in ${dbNames[*]} do dumpFile=$dbName-$DATE.sql.gz mysqldump -u$user -p$userPWD $dbName | gzip > $newdir/$dumpFile done




相关文章

公众号