服务器上的数据是如此重要,以至于我们定期要对其进行备份!这里讲一下mysql的备份和使用rsync同步服务器上的文件,从而实现多台linux服务器之间的文件的备份。
一 Mysql备份
mysql的备份比较简单,用mysqldump导出需要备份的数据库即可,这里提供一个shell脚本给大家参考,大家修改一下就可以用做自己的数据库备份了
#!/bin/sh ############################################# # crond定时备份MYSQL数据库 # @date 2015/09/25 星期五 # @author yearnfar ############################################# DB_NAMES=("db1" "db2" "db3" "db4" "db5") BIN_DIR="/usr/local/mysql/bin" # mysql执行文件目录 BCK_DIR="/data/mysql/backup/" # 备份文件保存目录 DATE_MONTH=`date +%Y%m` MONTH_DAY=`date +%m%d` DATE_FORMAT=`date +%Y%m%d` # 执行备份命令 for DB_NAME in ${DB_NAMES[@]}; do mkdir -p $BCK_DIR/$DATE_MONTH/$MONTH_DAY $BIN_DIR/mysqldump --opt $DB_NAME | gzip > $BCK_DIR/$DATE_MONTH/$MONTH_DAY/$DB_NAME\_$DATE_FORMAT.sql.gz # 使用了gzip进行压缩,减少硬盘使用量,因为用定时器跑每天如果都进行备份的话,很占硬盘 sleep 1 done
大家会发现这里mysqldump的时候没有提供账号和密码,因为在my.cnf里面做了配置
[mysqldump] user=mysqldump password=123456
如果不在my.cnf里面做配置的话就要加上用户名和密码
$BIN_DIR/mysqldump --opt -umysqldump -p123456 $DB_NAME | gzip > $BCK_DIR/$DATE_MONTH/$MONTH_DAY/$DB_NAME\_$DATE_FORMAT.sql.gz
但是这样会有下面这个提示,所以还是建议在my.cnf里面添加导数据的账号和密码!
Warning: Using a password on the command line interface can be insecure.
PS:
1.导数据的账号建议只授予select和lock tables权限,命令如下:
grant SELECT,LOCK TABLES on db1.* to [email protected] identified by ‘123456‘; ... ... ...
二 多台服务器进行文件备份
备份好数据库就可以了么,这样就安全了么?肯定不是的,如果服务器上的磁盘损坏了呢?那这些数据还是会丢失!而且我们要进行备份可能不止数据库文件,有些服务器上生成的文件或者用户上传的重要文件也要进行备份,这个时候就不止要在一台机子上备份了,而是要在多台机子就行备份!
这里我介绍一种方法,那就是使用rsync进行文件同步,之前已经写了一篇文章关于怎么搭建rsync服务器: rsync服务器搭建
这里提供下配置文件:
1.服务端配置:
配置文件 rsync.conf
# Distributed under the terms of the GNU General Public License v2 # Minimal configuration file for rsync daemon # See rsync(1) and rsyncd.conf(5) man pages for help # This line is required by the /etc/init.d/rsyncd script # pid file = /var/run/rsyncd.pid port = 873 address = xxx.xxx.xxx.xxx # 更换成自己的ip uid = www gid = www use chroot = yes read only = yes #limit access to private LANs hosts allow=* hosts deny=* max connections = 5 motd file = /etc/rsync.d/rsyncd.motd #This will give you a separate log file #log file = /var/log/rsync.log #This will log every file transferred - up to 85,000+ per user, per sync #transfer logging = yes log format = %t %a %m %f %b syslog facility = local3 timeout = 300 # 同步数据库文件 [mysql_backup] path = /data/mysql/backup list = no ignore errors auth users = yearnfar secrets file = /etc/rsync.d/rsyncd.secrets comment = mysql backup!!! # 同步代码 [www_51open] path = /data/www/51open/upload list = no ignore errors auth users = yearnfar secrets file = /etc/rsync.d/rsyncd.secrets comment = www/51open backup!!!
配置文件 rsync.secrets
yearnfar:123456
2.客户端配置:
shell脚本 rsync.sh
#!/bin/sh # 数据库文件同步 rsync -avzP --delete --password-file=/home/yearnfar/etc/rsyncd.secrets [email protected]::mysql_backup /home/yearnfar/data/rsync/mysql_backup # 其他文件同步 rsync -avzP --delete --password-file=/home/yearnfar/etc/rsyncd.secrets [email protected]::www_51open /home/yearnfar/data/www/51open
密码配置文件 rsyncd.secrets
123456
执行rsync.sh就可以实现把服务端的文件同步到客户机了!!
3.这样就可以了?
这样就可以了吗?不可以!
像 /home/yearnfar/data/www/51open目录只是实现了文件的同步,并没有实现备份!如果要备份的话,还要写脚本把这个目录按天进行打包!
这样就可以了吗?不可以!
...
时间: 2024-10-23 20:45:08