Centos7 mysql 定时备份及还原

Centos7 mysql 定时备份及还原

在参考原文情况进行操作中途遇到一些小的问题及自己的解决办法,做一些笔记。

原文链接 https://blog.csdn.net/qq_37798548/article/details/83306718
版权声明:本文为原博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

1、新建备份脚本

vi /home/mysqlback/mysql_back.sh  填入以下内容
mysql_user="USER" #MySQL备份用户
mysql_password="PASSWORD" #MySQL备份用户的密码
mysql_host="localhost"
mysql_port="3306"
mysql_charset="utf8" #MySQL编码
backup_db_arr=("db1" "db2") #要备份的数据库名称,多个用空格分开隔开 如("db1" "db2" "db3")
backup_location=/home/mysqlbak  #备份数据存放位置,末尾请不要带"/",此项可以保持默认,程序会自动创建文件夹
expire_backup_delete="ON" #是否开启过期备份删除 ON为开启 OFF为关闭
expire_days=3 #过期时间天数 默认为三天,此项只有在expire_backup_delete开启时有效
backup_time=`date +%Y%m%d%H%M`  #定义备份详细时间
backup_Ymd=`date +%Y-%m-%d` #定义备份目录中的年月日时间
backup_3ago=`date -d '3 days ago' +%Y-%m-%d` #3天之前的日期
backup_dir=$backup_location/$backup_Ymd  #备份文件夹全路径
welcome_msg="Welcome to use MySQL backup tools!" #欢迎语
mysql_ps=`ps -ef |grep mysql |wc -l`
mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l`
if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then
        echo "ERROR:MySQL is not running! backup stop!"
        exit
else
        echo $welcome_msg
fi
mysql -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password <<end
use mysql;
select host,user from user where user='root' and host='localhost';
exit
end
flag=`echo $?`
if [ $flag != "0" ]; then
        echo "ERROR:Can't connect mysql server! backup stop!"
        exit
else
        echo "MySQL connect ok! Please wait......"
        # 判断有没有定义备份的数据库,如果定义则开始备份,否则退出备份
        if [ "$backup_db_arr" != "" ];then
                for dbname in ${backup_db_arr[@]}
                do
                        echo "database $dbname backup start..."
                        `mkdir -p $backup_dir`
                        `mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $dbname --default-character-set=$mysql_charset | gzip > $backup_dir/$dbname-$backup_time.sql.gz`
                        flag=`echo $?`
                        if [ $flag == "0" ];then
                                echo "database $dbname success backup to $backup_dir/$dbname-$backup_time.sql.gz"
                        else
                                echo "database $dbname backup fail!"
                        fi
                done
        else
                echo "ERROR:No database to backup! backup stop"
                exit
        fi
        # 如果开启了删除过期备份,则进行删除操作
        if [ "$expire_backup_delete" == "ON" -a  "$backup_location" != "" ];then
                 `find $backup_location/ -type d -mtime +$expire_days | xargs rm -rf`
                 echo "Expired backup data delete complete!"
        fi
        echo "All database backup success! Thank you!"
        exit
fi

2、修改mysql_back.sh脚本属性,赋予执行权限

chmod 600 /home/mysqlback/mysql_back.sh
chmod +x /home/mysqlback/mysql_back.sh

3、测试执行脚本,检验脚本是否可以正常执行

1、测试备份脚本是否可以正常执行

sh /home/mysqlback/mysql_back.sh

将备份文件下载下来查看是否正常!如果为空,参考第7项。

2、测试删除历史备份数据是否可以正常执行

#修改刚才生成的文件夹的创建时间
cd /home/mysqlback
# linux touch 命令 参考
# touch -d "4 days ago" 2020-03-30 #将最后的文件夹 修改为当前生成的文件夹名称
# touch  -r test2  将文件日期更改为参考文件日期。
# touch  -d "2 days ago"  test2   将文件修改日期调整为两天前。
touch -t "03251200" 2020-03-26  #将文件修改日期调整为指定日期,3 月 25 日 12 点 00 分。
# 再次执行脚本,测试 文件夹是否被删除
sh /home/mysqlback/mysql_back.sh

4、定时执行备份脚本

crontab -e #加入一下内容
# */5 * * * * /home/mysqlback/mysql_back.sh #(每5分钟执行一次)
# 正式部署时定时任务时间 自定义 每天00:30进行备份
30 00 * * */home/mysqlbak/mysql_bak.sh
# 启动定时任务
/bin/systemctl start crond.service

5、查看备份结果

cd 2020-03-30
ls

6、定时任务操作举例

基本命令:

列出用户的定时任务列表:crontab -u 用户名 -l

启动定时任务: /bin/systemctl start crond.service

停止定时任务:/bin/systemctl stop crond.service

重启定时任务:/bin/systemctl restart crond.service

查看定时任务状态:/bin/systemctl status crond.service

cron 基本格式:

*  *  *  *  *  command
分  时  日  月  周      命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
crontab文件的一些例子:
30 21 * * */home/mysqlbak/mysql_bak.sh
上面的例子表示每晚的21:30执行备份脚本。
45 4 1,10,22 * * /home/mysqlbak/mysql_bak.sh
上面的例子表示每月1、10、22日的4 : 45执行备份脚本。
10 1 * * 6,0 /home/mysqlbak/mysql_bak.sh
上面的例子表示每周六、周日的1 : 10执行备份脚本。

7、可能存在问题

1、运行脚本提示有非法字符问题

将sh脚本保存在本地之后上传至服务器时,运行可能会出现此问题。

# 在vim编辑器中设置当前文本格式为 nuix 
set ff=unix
#然后保存退出

2、mysqldump 命令找不到问题

whereis mysql
# mysql: /usr/bin/mysql /usr/lib64/mysql /usr/local/mysql /usr/share/mysql
ln -fs /usr/local/mysql/bin/mysqldump /usr/bin

8、备份恢复

#使用命令将压缩文件解压
gunzip -c test-202003301602.sql.gz #保留源文件 解压缩

导入备份文件

mysql -u<用户名> -p<密码> <databasename> < test-202003301602.sql.gz

备份恢复

#使用命令将压缩文件解压
gunzip -c test-202003301602.sql.gz #保留源文件 解压缩

导入备份文件

mysql -u<用户名> -p<密码> <databasename> < test-202003301602.sql.gz
### 回答1: #!/bin/bash #定义备份文件存放的路径 backup_dir=/data/backup/mysql #定义mysql安装的路径 mysql_dir=/usr/local/mysql #定义mysql用户名 user=root #定义mysql用户密码 password=123456 #定义备份文件名 time=`date +%Y%m%d%H%M` backup_file=$backup_dir/mysql_$time.sql #备份数据库 $mysql_dir/bin/mysqldump -u$user -p$password --all-databases > $backup_file #定义备份文件保留时间 find $backup_dir -mtime +7 -name "*.sql" -exec rm -rf {} \; #定义定时备份 echo "30 3 * * * root $backup_dir/backup.sh" >> /etc/crontab ### 回答2: 以下是一个CentOS 7上MySQL定时备份脚本的示例: 1. 首先,创建一个新文件,例如`mysql_backup.sh`,并使用任何文本编辑器打开它。 2. 在脚本的开头,添加以下行来指定脚本将使用的数据库用户名和密码: ```bash DB_USER="your_username" DB_PASS="your_password" ``` 请将`your_username`和`your_password`替换为实际的数据库用户名和密码。 3. 接下来,指定备份文件的保存位置和名称: ```bash BACKUP_DIR="/path/to/backup/directory" DATE=$(date +"%Y%m%d%H%M%S") BACKUP_FILE="$BACKUP_DIR/backup_$DATE.sql" ``` 请将`/path/to/backup/directory`替换为实际的备份文件保存路径。 4. 添加以下行来执行备份: ```bash mysqldump -u $DB_USER -p$DB_PASS --all-databases > $BACKUP_FILE ``` 这将使用`mysqldump`命令将所有数据库备份到指定的备份文件中。 5. 最后,设置执行定时任务的时间间隔。示例中将每天执行备份,可以根据需要进行调整: ```bash (crontab -l 2>/dev/null; echo "0 0 * * * bash /path/to/mysql_backup.sh") | crontab - ``` 请将`/path/to/mysql_backup.sh`替换为实际的脚本路径。 保存并关闭脚本文件。 6. 将脚本设置为可执行: ```bash chmod +x mysql_backup.sh ``` 7. 最后,通过运行以下命令来设置定时备份任务: ```bash crontab -e ``` 在crontab文件中,添加以下行来执行备份任务: ``` 0 0 * * * /path/to/mysql_backup.sh ``` 请将`/path/to/mysql_backup.sh`替换为实际的脚本路径。 保存并关闭crontab文件。 现在,每天午夜12点,MySQL备份脚本将以指定的位置和名称创建一个新的备份文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值