本文已参与[新人创作礼]活动,一起开启掘金创作之路
currentTime=date +%Y%m%d
sql="/www/sqlbackup/fpbk_sql
#$currentTime是变量,这里设置的是年月日这种格式(20181112),mysqldump是mysql的语法,如果mysql 不是添加到环境变量的话,就需要从目录指定到mysql执行文件,例如(/usr/local/bin/mysql,目录可能会有差异),最后把上面的命令存入back.sh脚本文件
#linux运行脚本文件,直接sh 路径/back.sh
\
特别注意
脚本文件最好是用命令在xshell上创建,不然很可能会因为编码格式等问题,无法从FTP软件导出来(会报错:文件名、目录名或卷标语法不正确。)
linux定时器
crontab -e 进入到编辑定时器页面
0 3 * * * /var/backup/back.sh
时间的格式是
分 时 日 月 周
上面的例子是指定每天3点备份一次数据库(每一分钟执行,时间格式就应该*/1 * * * *)
\
//下面是为整个数据库备份的例子
#!/bin/bash\
MYSQLDBUSERNAME是MySQL数据库的用户名,可自定义\
MYSQLDBUSERNAME=root\
MYSQLDBPASSWORD是MySQL数据库的密码,可自定义\
MYSQLDBPASSWORD=cc1314,.\
MYSQBASEDIR是MySQL数据库的安装目录,--prefix=$MYSQBASEDIR,可自定义\
MYSQBASEDIR=/usr/local/mysql\
MYSQL是mysql命令的绝对路径,可自定义\
MYSQL=$MYSQBASEDIR/bin/mysql\
MYSQLDUMP是mysqldump命令的绝对路径,可自定义\
MYSQLDUMP=$MYSQBASEDIR/bin/mysqldump\
BACKDIR是数据库备份的存放地址,可以自定义修改成远程地址\
BACKDIR=/backup/db\
获取当前时间,格式为:年-月-日,用于生成以这种时间格式的目录名称\
DATEFORMATTYPE1=$(date +%Y-%m-%d)\
获取当前时间,格式为:年月日时分秒,用于生成以这种时间格式的文件名称\
DATEFORMATTYPE2=$(date +%Y%m%d%H%M%S)\
如果存在MYSQBASEDIR目录,则将MYSQDATADIR设置为$MYSQBASEDIR/data,具体是什么路径,就把data改成什么路径,否则将MYSQBASEDIR设定为/var/lib/mysql,可自定义\
[ -d MYSQBASEDIR ] && MYSQDATADIR=MYSQBASEDIR/data || MYSQDATADIR=/usr/local/mysql/data\
如果mysql命令存在并可执行,则继续,否则将MYSQL设定为mysql,默认路径下的mysql\
[ -x $MYSQL ] || MYSQL=mysql\
如果mysqldump命令存在并可执行,则继续,否则将MYSQLDUMP设定为mysqldump,默认路径下的mysqldump\
[ -x $MYSQLDUMP ] || MYSQLDUMP=mysqldump\
如果不存在备份目录则创建这个目录\
[ -d {BACKDIR}
[ -d {DATEFORMATTYPE1} ] || mkdir {DATEFORMATTYPE1}\
获取MySQL中有哪些数据库,根据mysqldatadir下的目录名字来确认,此处可以自定义,TODO\
DBLIST=ls -p $MYSQDATADIR | grep / |tr -d /\
从数据库列表中循环取出数据库名称,执行备份操作\
for DBNAME in DBLIST\
# mysqldump skip one table\
# -- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.\
# mysqldump --ignore-table=mysql.event\
# http://serverfault.com/questions/376904/mysqldump-skip-one-table\
# --routines,备份存储过程和函数\
# --events,跳过mysql.event表\
# --triggers,备份触发器\
# --single-transaction,针对InnoDB,在单次事务中通过转储所有数据库表创建一个一致性的快照,此选项会导致自动锁表,因此不需要--lock-all-tables\
# --flush-logs,在dump转储前刷新日志\
# --ignore-table,忽略某个表,--ignore-table=database.table\
# --master-data=2 ,如果启用MySQL复制功能,则可以添加这个选项\
# 将dump出的sql语句用gzip压缩到一个以时间命名的文件\
do {MYSQLDUMP} {BACKDIR}/{DBNAME}-backup-{DATEFORMATTYPE2}.sql\
# 检查执行结果,如果错误代码为0则输出成功,否则输出失败\
[ ? -eq 0 ] && echo "{DBNAME} has been backuped failed"
# 等待5s,可自定义
/bin/sleep 1
done