75

原创 Linux下实现Mysql定时任务备份数据

 5 years ago
source link: http://www.choupangxia.com/topic/detail/77?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本实例将创建目录放置于/mnt目录下,可根据具体情况放置于其他目录:

cd /mnt
mkdir dbback
pwd
/mnt/dbback

创建shell脚本

脚本名称可根据自己规范进行自定义:

vim bcmysql.sh

进入编辑器,输入以下内容:

#!/bin/bash
mysqldump -uusername -ppassword demo > /mnt/dbback/demo_$(date +%Y%m%d_%H%M%S).sql

如果需要本分文件进行压缩,可输入下面命令:

#!/bin/bash
mysqldump -uusername -ppassword demo | gzip > /mnt/dbback/demo_$(date +%Y%m%d_%H%M%S).sql.gz

在具体操作中,需要将username,password和demo分别替换成对应的数据库用户名、密码和数据库名。

添加可执行权限

chmod u+x bcmysql.sh

添加完执行权限之后,执行此脚本,可能会出现如下异常:

mysqldump: [Warning] Using a password on the command line interface can be insecure.

这个问题应该是在MySQL5.6+版本的时候就有出现,可能是为了确保数据库的安全性采用的保护机制。在本实例中使用的mysql版本为5.7.22,虽然有警告信息,但可以成功备份数据。

修改mysql配置文件

针对上面的问题,某些版本可能无法成功备份,另外也不建议将数据库密码配置在脚本中,则可直接修改mysql的配置文件。一般情况下,mysql的配置文件在/etc/my.cnf。

vim /etc/my.cnf

在此文件内添加mysqldump的配置如下:

[mysqldump]
user=your_backup_user_name
password=your_backup_password

替换掉对应的用户名和密码,并修改bcmysql.sh脚本中的命令,取消用户名和密码参数,无需重启mysql,直接执行脚本即可看到备份结果。

demo_20181114_193425.sql

问题一

当使用vim查看导出的sql文件内容时,会发现中文有乱码。此问题有两种情况引起,第一种就是数据库本身字符集为latain1,则此时需要指定字符集,在执行的参数中添加如下参数:

--default-character-set=gbk

当然如果是utf8则将gbk修改为utf8。查看数据库字符集的命令如下:

show variables like '%char%'; 
-- 查询结果
character_set_client    utf8
character_set_connection    utf8
character_set_database    utf8mb4
character_set_filesystem    binary
character_set_results    utf8
character_set_server    utf8
character_set_system    utf8
character_sets_dir    /usr/local/mysql/share/charsets/

如果将字符集正确修改,依然有乱码,则可尝试添加如下参数:

--hex-blob

仔细分析一下表结构,可能表结构中有blob类型,这个参数的含义是用16进制的方式导出BINARY, VARBINARY, BLOB类型的数据。修改后的命令如下:

mysqldump --default-character-set=utf8 --hex-blob demo > /mnt/dbback/demo_$(date +%Y%m%d_%H%M%S).sql

添加计划任务

检测或安装crontab

执行crontab命令如果报command not found,就表明没有安装。

# crontab
-bash: crontab: command not found

如果未安装,可以通过yum命令进行安装:

# yum -y install vixie-cron

虽然crontab不支持-h或-help命令,但可以通过此命令检查是否安装成功:

[root@iZ2zeck5vZ ~]# crontab -help
crontab:无效选项 -- h
crontab: usage error: unrecognized option
Usage:
 crontab [options] file
 crontab [options]
 crontab -n [hostname]

Options:
 -u <user>  define user
 -e         edit user's crontab
 -l         list user's crontab
 -r         delete user's crontab
 -i         prompt before deleting
 -n <host>  set host in cluster to run users' crontabs
 -c         get host in cluster to run users' crontabs
 -s         selinux context
 -x <mask>  enable debugging

Default operation is replace, per 1003.2

添加计划任务

通过上面的命令参数,我们可以看到修改crontab的命令,执行命令:

crontab -e

进入crontab的编辑操作页面,可以像vi、vim一样编辑其中的内容。在其中添加如下命令:

*/1 * * * * /mnt/dbback/bcmysql.sh

此行命令的作用是每隔一分钟执行一次bcmysql.sh。等待一分钟之后通过ls命令查看是否生成备份文件。发现已经可以正常生成文件。当然,我们并不需要每分钟就备份一次,因此把命令改为如下:

0 1 * * * /mnt/dbback/bcmysql.sh

每天凌晨1点执行一次备份操作。

日志查看

如果执行失败了,则可查看任务日志:

# tail -f /var/log/cron

小结

至此,一个简单版本的Linux下实现Mysql定时任务备份数据功能已经实现。当然也可以在此版本基础上进行目录控制,历史记录删除等扩展。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK