Linux下定时备份mysql数据库

环境:

  • Centos7
  • MySQL5.5

一、安装MySQL

  Linux下安装mysql的步骤这里就不再详细展开了,可以自行百度。

  或者是使用宝塔面板快速上手:宝塔Linux面板安装教程

1、确保mysql能正常登录:

 2、确保Navicat能够正常连接mysql数据库(执行下面两个步骤)


 平时如果在第一次进行连接的时候,如果出现了这个错误,可以参考:

解决Navicat远程连接数据库出现错误:1130-host ... is not allowed to connect to this MySql server


 出现这个把端口3306给开放。这样才能够通过Navicat进行连接

二、备份/导入数据库文件命令

备份:

参考:https://www.cnblogs.com/zhangzhixi/p/17332339.html

还原(所有):

1. 在系统命令行中,输入如下实现还原:
	mysql>mysql -uroot -p123456 < /data/mysqlDump/mydb.sql
2. 在登录进入mysql系统中,通过source指令找到对应系统中的文件进行还原:
	mysql>source /data/mysqlDump/mydb.sql

还原指定的库

比如备份了所有的库文件,但是只是想还原指定的库,需要确保要还原的这个数据库是存在的,此操作不会覆盖新表以及新表的数据。

mysql -uroot -p密码 --one-database 数据库名 < /data/mysqlDump/mydb_all.sql

三、编写shell脚本

1、创建目录

在home目录下新建存储备份数据库数据的文件(可以自定义)

mkdir /home/backup

2、编写shell脚本

这里就简单的进行测试使用,线上的备份依照自己的业务编写:

创建shell脚本文件:

[root@localhost home]touch bkDatabaseName.sh
[root@localhost home]vim touch bkDatabaseName.sh

添加内容(密码跟-p之间不要有空格):

#!/bin/bash
/usr/local/mysql/bin/mysqldump -uroot -p密码 进行备份的数据库名 > /home/backup/bjpan_$(date +%Y%m%d_%H%M%S).sql

3、赋权限(赋予shell脚本可执行权限)

chmod 777 bkDatabaseName.sh 

脚本模板:

#!/bin/bash

# 保存备份个数,备份31天数据
number=31
# 备份保存路径
backup_dir=/data/mysqlDump
# 日期
dd=`date +%Y-%m-%d-%H-%M-%S`
# 备份工具
tool=mysqldump
# 用户名
username=root
# 密码
password=xxx
# 将要备份的数据库,-A表示备份全部,如果备份指定多个数据库,用空格分开数据库名称即可
database_name="mybatis mybatis_plus"
# mysql的bin目录
bin_dir=/usr/local/mysql/bin



# 如果文件夹不存在则创建
if [ ! -d $backup_dir ];
then    
    mkdir -p $backup_dir;
fi
 
# 简单写法 mysqldump -u root -p123456 users > /root/mysqlbackup/users-$filename.sql
$bin_dir/$tool -u $username -p$password --databases $database_name > $backup_dir/$dd.sql
 
# 写创建备份日志
echo "create $backup_dir/$database_name-$dd.dupm" >> $backup_dir/log.txt
 
# 找出需要删除的备份
delfile=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | head -1`
 
# 判断现在的备份数量是否大于$number
count=`ls -l -crt $backup_dir/*.sql | awk '{print $9 }' | wc -l`
 
if [ $count -gt $number ]
then
  #删除最早生成的备份,只保留number数量的备份
  rm $delfile
  #写删除文件日志
  echo "delete $delfile" >> $backup_dir/log.txt
fi

如上代码主要含义如下:

  • 1.首先设置各项参数,例如number最多需要备份的数目,备份路径,用户名,密码等。
  • 2.执行mysqldump命令保存备份文件,并将操作打印至同目录下的log.txt中标记操作日志。
  • 3.定义需要删除的文件:通过ls命令获取第九列,即文件名列,再通过实现定义操作时间最晚的那个需要删除的文件。
  • 4.定义备份数量:通过ls命令加上,统计以sql结尾的文件的行数。
  • 5.如果文件超出限制大小,就删除最早创建的sql文件

四、编写定时器任务

两个网站参考cron的使用:

Crontab表达式生成

Crontab执行时间计算

编写定时器任务

crontab -e :编辑任务

写入程序:这表示的是每分钟执行一次上面编写的脚本文件

保存退出,即可执行!

*/1 * * * *  /home/backup/bkDatabaseName.sh

crontab -l:列出任务 

Crontab服务操作说明:

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

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

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

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

crontab文件的含义

用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute   hour   day   month   week   command

分时 日 月 周 命令
其中:

  • minute: 表示分钟,可以是从0到59之间的任何整数。
  • hour:表示小时,可以是从0到23之间的任何整数。
  • day:表示日期,可以是从1到31之间的任何整数。
  • month:表示月份,可以是从1到12之间的任何整数。
  • week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
  • command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

 Crontab命令参数:

-u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。

-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。

-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。

-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。

-i:列出计划任务。

 

posted @ 2021-05-13 14:58  Java小白的搬砖路  阅读(293)  评论(0编辑  收藏  举报