记一次自己写linux定时备份mysql数据库

时间:2021-09-17 08:10:23

    由于项目要求,必须要写一个定时任务来备份mysql数据库的数据。由于之前的时候从来没有接触过linux脚本命令,所以对我来说就是简直了。没办法,来查吧,查了半天,按照人家说的也写了半天,就是不行。后来找大牛给看了看,原来我和真正的成功就多了一行命令。下面是这次我记录的脚本命令。


进入home目录

cd /home

创建备份文件夹

mkdir mysql_data

进入备份文件夹

cd  mysql_data

创建备份脚本文件

touch mysql_databak.sh

修改备份脚本文件内溶

vim  mysql_databak.sh

下面是mysql_databak.sh 里面的内容:

#!/bin/sh 

DUMP=/usr/local/mysql/bin/mysqldump      #这个是我的mysqldump的路径,使用时要根据自己的环境修改;一般在/var/bin下面

OUT_DIR=/home/mysql_data        #备份文件的目录,没有提前建好

LINUX_USER=root       #linux用户

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

DB_USER=root          #数据库登录名

DB_PASS=root           #数据库登陆密码

DAYS=7                #每次备份保存的时间

cd $OUT_DIR        #进入到备份目录下

DATE=`date +%Y_%m_%d`        #当前时间

OUT_SQL="$DATE.sql"            #备份出来的sql文件名

TAR_SQL="mysqldata_bak_$DATE.tar.gz"       #备份的sql文件打包后的文件名


#备份文件的操作,这里要注意自己环境的mysql.sock的路径 一般可能是在/temp下面

$DUMP --socket=/var/lib/mysql/mysql.sock -h192.168.200.135 -u$DB_USER -p$DB_PASS $DB_NAME >$OUT_SQL

tar -czf $TAR_SQL ./$OUT_SQL        #压缩为.tar.gz格式

rm $OUT_SQL        #删除生成的sql文件

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

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


将脚本文件设置成可执行文件类型:

chmod +x /home/mysql_data/mysql_databak.sh

添加定时任务:

vi /etc/crontab

在下面添加以下内容:

30 1 * * * root  /home/mysql_data/mysql_databak.sh    #表示每天凌晨1点30执行备份(具体时间设置网上查下即可)

重启定时任务:

service crond restart

至此,定时备份mysql数据库已经完成。

然后就是要定是传输到另外一台服务器,这个我是采用scp的方式,当然我这里是服务器上没有创建ftp,使用ftp很方便,具体请自行查询,这里说一下我采用的方式。

要使用scp传输文件,有一个缺点就是每次都要输入密码,所以我们首先创建两个服务器之间的scp免密传输。

1. ssh-keygen -t rsa

   然后第一个的弹出提示输入括号的东西,然后回车,接下来的提示直接回车就行。

2. 修改两个服务器的ssh_config

   vi /etc/ssh/ssh_config 

   在内容中把Host哪一行的注释和IdentityFile ~/.ssh/id_rsa哪一行的注释取消。然后保存文件。

3. scp ~/.ssh/id_rsa.pub IP地址:/root/.ssh/authorized_key

   将文件传到另外的服务器上就可以了免密码传输文件了。

4. 测试一下:

   touch ~/test

   scp ~/test root@ip地址:/root/

   如果不用密码就成了。

这样,就建立起了服务器之间的scp免密传输,然后就是定时脚本了。

同样的步骤就不叙述了,直接上脚本内容:

传输脚本内容很简单,一句话即可:

#!/bin/sh

scp  /home/t123 root@192.168.137.128:/home  #/home/t123值得是要备份的文件,这个是本地目录;@后面跟的是要传输的服务器ip,在后面的/home是服务器的路径

完成之后和上面的备份时的操作一样,修改成可执行文件,添加定时任务等。