Linux中mysql每天自动备份

    xiaoxiao2021-03-25  89

    本文主要介绍mysqldump结合Linux的cron命令实现数据库每天备份。mysqldump常用于MySQL数据库逻辑备份,而cron就是linux的计划任务,是任务在约定的时间执行已经计划好的工作。

    一、创建shell脚本

    #!/bin/bash #数据库备份路径,需先创建该路径 backupdir=/home/mysql-data-bak #数据库账号 dbuser=myBak #数据库密码 dbpasswd=myBak123abc #数据库端口 dbportal=3306 #数据库端口 dbip=127.0.0.1 #需备份的数据名 dbname=my-test #备份时间 time=`date+%Y%m%d` #正式开始备份数据库 /usr/bin/mysqldump\ -u${dbuser}\ -p${dbpasswd} \ -P${dbportal}-h${dbip} \ --default-character-set=utf8 \ --databases${dbname} \ >$backupdir/${dbname}-$time.sql; #为节约硬盘空间,将备份的数据库压缩 tarczvfP $backupdir/${dbname}-$time.sql.tar.gz$backupdir/${dbname}-$time.sql; echo 'tardone'; #删除7天前备份,也就是只保存7天内的备份 find$backupdir -name "${dbname}-*.sql.tar.gz" -type f -mtime +7 -exec rm {} \; >/dev/null 2>&1 #删除原始sql文件,只留压缩后文件 rm-f $backupdir/${dbname}-$time.sql; echo 'remove done' echo'dump done';

    使用该shell脚本备份时需注意: 1.要给该shell脚本赋予可执行权限,相关命令为:chmod +x ***.sh

    2.测试的时候可以直接进入sh目录下执行

    ./***.sh

    等执行完了看看数据库备份目录下,有没有备份文件。如果有,则表示脚本执行成功,没有则表示没有执行成功。

    3.建议用于mysqldump的mysql账号权限最好是127.0.0.1的所有权限,密码数字+字母的组合。 另附上创建mysql账号语句:

    CREATE USER 'myBak'@'%' IDENTIFIED BY 'myBak123abc'; GRANT ALL ON *.* TO 'myBak'@'127.0.0.1' identified by 'myBak123abc'; flushprivileges;

    4.运行该脚本会提示:

    Warning:Using a password on the command line interface can be insecure.

    意为:在命令行界面上使用密码是不安全的. 该警告看着不顺眼,那有什么办法可以解决吗?有,方法其实很简单,在mysql的配置文件my.cnf中添 加mysqldump的用户名和密码,再将备份脚本用户名密码相关信息去掉。 相关过程如下: a.vim /etc/my.cnf b.添加mysqldump的账号和密码配置如下【ps:把你自己数据库的账号密码填上哦】

    [mysqldump] user=your_backup_user_name password=your_backup_password

    c.重启数据库

    service mysql restart

    d.修改脚本 将备份脚本用户名密码相关信息去掉

    二.计划任务的配置 配置linux计划任务有以下两种方式: 1、 执行crontab -e 输入以下内容:

    30 1 * * * sh /home/mysql-data-bak/my-test.sh

    2、 打开自动执行文件

    vi /etc/crontab

    在etc中加入如下内容,让其自动执行任务。

    30 1 * * * sh /home/mysql-data-bak/my-test.sh

    以上时间 30 1 * * *表示每天凌晨1点30自动执行/home/mysql-data-bak/my-test.sh脚本。

    计划任务执行命令含义如下:

    #Example of job definition: #.---------------- minute (0 - 59) #| .------------- hour (0 - 23) #| | .---------- day of month (1 - 31) #| | | .------- month (1 - 12) OR jan,feb,mar,apr ... #| | | | .---- day of week (0 - 6) (Sunday=0 or 7) ORsun,mon,tue,wed,thu,fri,sat #| | | | | #* * * * * user-name command to be executed
    转载请注明原文地址: https://ju.6miu.com/read-32211.html

    最新回复(0)