mysql自动备份数据库,同时ftp上传到指定服务器(scp远程获取本地备份)

Posted mylover2

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql自动备份数据库,同时ftp上传到指定服务器(scp远程获取本地备份)相关的知识,希望对你有一定的参考价值。

最近要把服务器托管到电信机房,所以要对数据库进行备份,同时要把备份ftp上传到公司指定服务器。


一、先安装ftp服务

1、查询是否安装vsftpd: rpm -qa |grep vsftpd

(rpm的安装:apt-get install rpm)

或者查询当前ftp进程:ps -ef|grep vsftpd ? 或者 ps -ef|grep ftp

2、如果没有就安装yum install vsftpd

3、安装完后看ftp安装目录:ps -ef|grep ftp

发现我的配置文件默认:/etc/vsftpd/vsftpd.conf

4、vsftpd服务器的启动、停止、重启、状态

service vsftpd start 或https://blog.csdn.net/cuker919/article/details/etc/init.d/vsftpd start

service vsftpd stop 或https://blog.csdn.net/cuker919/article/details/etc/init.d/vsftpd stop

service vsftpd restart 或https://blog.csdn.net/cuker919/article/details/etc/init.d/vsftpd restart

service vsftpd status 或https://blog.csdn.net/cuker919/article/details/etc/init.d/vsftpd status

5、测试[[email protected] mysql_data]# ?ftp localhost

Trying ::1...

ftp: connect to address ::1Connection refused

Trying 127.0.0.1...

Connected to localhost (127.0.0.1).

220 (vsFTPd 2.2.2)

Name (localhost:root): ftp

331 Please specify the password.

Password:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> bye

221 Goodbye.

6、修改ftp默认密码:passwd ftp

7、下载一个8uftp工具登录看看是否可以正常登录

8、设置开机启动:chkconfig vsftpd on

9、修改默认配置,禁止匿名用户登录,允许ftp上传文件打开。

vi /etc/vsftpd/vsftpd.conf?

把?anonymous_enable=YES 修改为anonymous_enable=NO ?,注意不是注释掉,要改成NO才可以,注释掉默认是yes。

把write_enable=YES //允许上传

service vsftpd restart ? 重启一下服务

10、用8ufp上传文件试试,如果不行,那就是SELinux安全设置有问题

sestatus -b| grep ftp

allow_ftpd_anon_write ? ? ? ? ? ? ? ? ? ? ? off
allow_ftpd_full_access ? ? ? ? ? ? ? ? ? ? ?off

allow_ftpd_use_cifs ? ? ? ? ? ? ? ? ? ? ? ? off

allow_ftpd_use_nfs ? ? ? ? ? ? ? ? ? ? ? ? ?off

ftp_home_dir ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?off

ftpd_connect_db ? ? ? ? ? ? ? ? ? ? ? ? ? ? off

ftpd_use_fusefs ? ? ? ? ? ? ? ? ? ? ? ? ? ? off

ftpd_use_passive_mode ? ? ? ? ? ? ? ? ? ? ? off

httpd_enable_ftp_server ? ? ? ? ? ? ? ? ? ? off

tftp_anon_write ? ? ? ? ? ? ? ? ? ? ? ? ? ? off

tftp_use_cifs ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? off

tftp_use_nfs ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?off


设置allow_ftpd_full_access 为打开setsebool -P allow_ftpd_full_access on

再查询一遍,如果为打开的情况:service vsftpd restart 重启服务再试试是否可以上传。

ftp上传文件553 Could not create file. 问题,setsebool 命令使用和参考

http://www.ithov.com/linux/130713.shtml

http://blog.chinaunix.net/uid-26727991-id-3235275.html


ftp安装和使用参考

http://blog.itpub.net/22578826/viewspace-763780/

http://www.cnblogs.com/hnrainll/archive/2011/02/16/1956538.html

http://blog.chinaunix.net/uid-23365147-id-2427229.html


二、下面是定时备份数据库和ftp上传备份数据库脚本,默认保留7天备份数据

1、创建保存备份文件的目录:/home/mysql_data

cd /home ?#进入目录

mkdir mysql_data ? #创建目录

2、创建备份脚本文件:/home/mysql_data/mysql_databak.sh

3、修改文件属性,使其可执行

chmod +x /home/mysql_data/mysql_databak.sh

4、修改/etc/crontab

vi /etc/crontab ?#在下面添加,每天凌晨0点26分自动执行脚本

26 * * * * root ?/home/mysql_data/mysql_databak.sh?

配置每周一到周五每天10点1分执行:1?10 * * 1-5?


5、重启定时任务:service crond restart

================脚本开始======================

#!/bin/sh ?

?

#DUMP=/usr/bin/mysqldump ? ?#mysqldump备份程序执行路径 ?

?

OUT_DIR=/home/mysql_data ? #备份文件存放路径 ?

?

LINUX_USER=root ? ? ? ? ? ?#系统用户名?

?

DB_NAME=mydb ? ? ? ? ? #要备份的数据库名字?

?

DB_USER=root ? ? ? ? ? ? ?#数据库用户名?


DB_PASS=123456 ? ? ? ? ? ? #密码?

?

DAYS=7 ? ? ? ? #DAYS=7代表删除7天前的备份,即只保留最近7天的备份?


cd $OUT_DIR ? ? ? ? ? ? ? ?#进入备份存放目录?

?

DATE=`date +%Y_%m_%d` ? ? ?#获取当前系统时间

HourMin=`date +%H%M` ? ? ? #获取当前系统时间时分

?

OUT_SQL="mydb_dump$DATE" ? ? ? ?#备份数据库的文件名?

?

TAR_SQL="mydb_dump$DATE.tar.gz" #最终保存的数据库备份文件名?

?

#$DUMP -u$DB_USER -p$DB_PASS $DB_NAME --default-character-set=utf8 --opt -Q -R --skip-lock-tables> $OUT_SQL #备份?

#上面那条是别人备份用的语句,我平常用的是下面的,/usr/local/mysql/bin/mysqldump为mysql安装目录,必须写对路径

/usr/local/mysql/bin/mysqldump -u$DB_USER -p$DB_PASS -R --single-transaction --add-drop-database --databases $DB_NAME ?> ?$OUT_SQL

?

tar -zcvf $TAR_SQL ?$OUT_SQL ?#压缩为.tar.gz格式?

?

rm $OUT_SQL ? #删除最原始为压缩的备份文件?

?

#chown ?$LINUX_USER:$LINUX_USER $OUT_DIR/$TAR_SQL ?#更改备份数据库文件的所有者?

chown ?$LINUX_USER:$LINUX_USER $TAR_SQL ?#更改备份数据库文件的所有者?

?

find $OUT_DIR -name "mydb_dump*" -type f -mtime +$DAYS -exec rm \\; ?#删除7天前的备份文件(注意: \\;中间有空格)?

?

deldate=` date -d -7day +%Y_%m_%d ` ? #删除ftp服务器空间7天前的备份 ?


#fpt 登录 ,如果要单独测试下面的ftp脚本是否正常,需要去掉<<! 字符。同时如果端口号不是21要指定新端口2121:ftp -v -n 192.168.1.1 2121

ftp -v -n 192.168.1.1<<!?

user ftp 123456

?

binary ?#设置二进制传输?

?

cd mysql_data ?#进入ftp目录?

?

lcd /home/mysql_data ?#列出本地目录?

?

prompt?

?

mput mydb_dump$DATE.tar.gz ? ? ?#上传目录中的文件?

?

mdelete mydb_dump$deldate.tar.gz ? #删除ftp空间7天前的备份?

?

close?

?

bye !

==================脚本结束==================

ftp登录写法还有下面的,两种都试过,可以用。

ftp -n<<!?

?

open 192.168.1.1 21

?

user ftp 123456

?

binary ?#设置二进制传输?

ftp -n<<!?

-n 不受.netrc文件的影响(ftp默认为读取.netrc文件中的设定)

<< 是使用即时文件重定向输入,<<后面可以跟任何字符,但是ftp命令结束后,要成对出现,即一个开始一个结束。

!是即时文件的标志它必须成对出现,以标识即时文件的开始和结尾。(你也可以不用“!”,比如使用一对“INPUT_TEXT”也是可以的)

即时文件是UNIX输入重定向的一种技术,本来输入重定向要求从文件中读取内容,但即时文件可以把程序所需输入内容的

内容直接写出来,就是你在上面例子中看到的那样。

参考:http://www.2cto.com/database/201305/208680.html

=========================================


三、定时任务

1、检查定时任务是否安装或启动中service crond status (本人机器) ,有些好像是用service cron status

2、查看系统启动时加载的服务列表里面是有chkconfig ?--list相关的服务chkconfig ?--list ? ?crond

3、没有就安装

重启crond服务的时候出现:crond: unrecognized service.

貌似没有装crond,于是找到crond的安装方法。亲测可行

安装crontab

[[email protected] ~]# yum install vixie-cron

[[email protected] ~]# yum install crontabs

说明:

vixie-cron软件包是cron的主程序;

crontabs软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。

用以下的方法启动、关闭这个cron服务:

/sbin/service crond start //启动服务

/sbin/service crond stop //关闭服务

/sbin/service crond restart //重启服务

/sbin/service crond reload //重新载入配置

查看crontab服务状态:service crond status

手动启动crontab服务:service crond start

加入开机自动启动:

chkconfig –level 35 crond on

参考:http://www.ha97.com/910.html


=============== scp远程获取本地备份的数据 ======================

四、由于公司网络改造,防火墙问题导致ftp不能使用,所以从公司内部服务器拉机房托管服务器的备份文件。

1、想法是通过scp访问托管服务器,同时每天自动把备份文件拉回来,由于托管服务器是做了密钥验证登录,所以需要创建一个专门拉备份文件的账号。

2、公司服务器上创建用户名(bakuser)、用户组、目录。(对于不同的目录,不同的用户,想法是通过组来访问,目录赋予770权限

3、创建对应的公钥和私钥。

首先需要在家目录创建.ssh文件夹

# ll –a ? ? 查看隐藏目录,默认此目录里如果没有.ssh隐藏目录,则需要手动创建

# mkdir .ssh 新建.ssh文件夹

#cd .ssh ? ? ? ? ? ? 进入.ssh目录

#ssh-keygen -t rsa ? 执行创建密钥对命令,不需要设置密码

Generating public/private rsa key pair.

Please be patient.... ? Key generation may take a few minutes

Enter file in which to save the key (/home/ap/appnms/.ssh/id_rsa):

# 按回车保存为: //.ssh/id_rsa,即当前用户的私钥

Enter passphrase (empty for no passphrase):

# 按回车,表示读取密钥时不需要密钥的密码

Enter same passphrase again:

# 确认密钥的密码,必须和上面的输入相同

Your identification has been saved in /home/ap/appnms/.ssh/id_rsa.

# 私钥保存信息

Your public key has been saved in /home/ap/appnms/.ssh/id_rsa.pub.

# 公钥保存信息

The key fingerprint is:

31:03:78:64:4f:8e:9d:a9:31:bf:38:5d:1a:79:08:e6 [email protected]

# 密钥指纹

The key‘s randomart image is:

4、把公钥上传到托管服务器对应备份用户下。

# cd /.ssh ? ? ? ? ? ? ? ? ? ? ?进入到.ssh目录 ?.ssh目录权限必须是755或者700

# cp id_rsa.pub authorized_keys 第一次添加时将公钥重命名为authorized_keys

# chmod 644 authorized_keys ? ? 公钥文件的权限必须是644

如果有多个客户端,依次将客户端公钥附加到服务器的authorized_keys文件内即可。

# cat /tmp/id_rsa.pub >> authorized_keys


5、在公司本地服务器上测试是否可以拉托管服务器的文件

#cd /home/bakuser ? ? ? 进入本地用户目录

#chmod 600?id_rsa ?  给私钥赋予600权限

#scp -P 22 -i id_rsa ?远程用户@远程ip:/home/bakuser/db_dump2017_02_11.tar.gz ?/home/本地目录/


五、每天定时把文件拉回到公司本地服务器

1、同上面一样写个脚本,然后在系统crond?定时器的地方加上执行该脚本的配置



以上是关于mysql自动备份数据库,同时ftp上传到指定服务器(scp远程获取本地备份)的主要内容,如果未能解决你的问题,请参考以下文章

Co. - Microsoft - Windows - 通过任务计划,备份本地MySQL,数据上传Linux备份服务器

用winrar和ftp命令实现自动备份文件并自动上传到指定的ftp服务器

MySQL自动备份和下载备份到指定位置

mysql自动备份工具|MySQL自动备份专家下载 V2018 官方版

mysql自动备份工具|MySQL自动备份专家下载 V2018 官方版

mysql自动备份工具|MySQL自动备份专家下载 V2018 官方版