MySQL定时备份-全量备份实战
MySQL定时全量备份实战记录
为了防止开发人员的误操作,以及玩笑中说的“删库跑路”等问题,需要定时备份数据库。先从简单的全量备份开始。
前提
需要对Linux的一些简单操作熟悉掌握,比方说cd,ls…等命令,还要简单了解shell编程语法
1.创建一个目录,为数据库备份数据存放目录
切换一个较为合适的目录后,创建一个目录
mkdir msyqlData
进入刚刚创建的目录汇总
cd mysqlData
2.开始写shell
使用vim创建后编辑
vim msyqlData.sh
–lock-all-tables 保证整个数据库的数据具有一致性,但也会将数据库置于read only状态(也相当于不可使用状态),所以默认不加该参数
#!/bin/bash
#获取当前时间
date_now=$(date "+%Y%m%d-%H%M%S")
#定义备份目录
backUpFolder=/www/server/mysql/mysqlData
#用户名
username="root"
#密码(需要改为自己的)
password="HWxGDPHBsTyEb74X"
#数据库名称
db_name="zihao"
#定义备份文件名称
file_name="${db_name}_${date_now}.sql"
#定义备份文件的目录
backUpFileName="${backUpFolder}/${file_name}"
#进行备份
/usr/bin/mysqldump -u${username} -p${password} --lock-all-tables ${db_name} > ${backUpFileName}
结束并保存
在当前目录下 输入
./mysqlData.sh
发现报错如下:
-bash: ./mysqlData.sh: Permission denied
原因是这个文件没有可执行的权限,解决方法是给文件加上相应权限
chmod 777 mysqlData.sh
再次执行
./mysqlData.sh
发现又有一个不一样的报错,如下
Warning: Using a password on the command line interface can be insecure.
原因是不能在命令行(当然也包括shell中)输入密码,解决方法是在mysql配置文件my.cnf中,mysqldump模块下加上user以及password
(注意:mysql的配置文件所在目录要改成自己的,不知道在哪里的,可以使用find -name 命令查找)
vim /etc/mysql/my.cnf
找到mysqldump,并增加代码
[mysqldump]
max_allowed_packet = 16M
#增加以下两行,密码改为自己的密码
user=root
password=HWxGDPHBsTyEb74
此时,还需要将shell文件进行更改,去掉文件中的username 以及password,如下
#!/bin/bash
#获取当前时间
date_now=$(date "+%Y%m%d-%H%M%S")
#定义备份目录
backUpFolder=/www/server/mysql/mysqlData
#数据库名称
db_name="zihao"
#定义备份文件名称
file_name="${db_name}_${date_now}.sql"
#定义备份文件的目录
backUpFileName="${backUpFolder}/${file_name}"
#进行备份
/usr/bin/mysqldump --lock-all-tables ${db_name} > ${backUpFileName}
再次运行shell
./msyqlData.sh
发现对应的目录下已经多出来一个.sql文件
到此,shell脚本能够运行,且可完整备份sql。
3.加定时任务
在linux下使用crontab增加定时任务,在这里我加的是每天的00:00进行备份
crontab -e
0 0 * * * sh /www/server/mysql/mysqlData/mysqlData.sh
定时任务可查看https://www.cnblogs.com/zoulongbin/p/6187238.html
4.大功告成。
觉得写得不错点个赞哦。