Linux下自动实现Mysql数据库的异地备份方案
项目需求:为防止公司网站重要的数据丢失,必须实现服务器Mysql数据库的备份。根据本公司情况,从技术手段上实现异地日备份来提高安全性。

服务器环境: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

说明:/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
这样,服务器就可以自动的每天实现重要数据的异地备份。