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 -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:列出计划任务。