前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux下实现Mysql定时任务备份数据

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

作者头像
程序新视界
发布2022-05-09 19:19:21
5310
发布2022-05-09 19:19:21
举报
文章被收录于专栏:丑胖侠丑胖侠

创建备份目录

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

代码语言:javascript
复制
cd /mnt
mkdir dbback
pwd
/mnt/dbback

创建shell脚本

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

代码语言:javascript
复制
vim bcmysql.sh

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

代码语言:javascript
复制
#!/bin/bash
mysqldump -uusername -ppassword demo > /mnt/dbback/demo_$(date +%Y%m%d_%H%M%S).sql

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

代码语言:javascript
复制
#!/bin/bash
mysqldump -uusername -ppassword demo | gzip > /mnt/dbback/demo_$(date +%Y%m%d_%H%M%S).sql.gz

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

添加可执行权限

代码语言:javascript
复制
chmod u+x bcmysql.sh

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

代码语言:javascript
复制
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。

代码语言:javascript
复制
vim /etc/my.cnf

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

代码语言:javascript
复制
[mysqldump]
user=your_backup_user_name
password=your_backup_password

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

代码语言:javascript
复制
demo_20181114_193425.sql

问题一

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

代码语言:javascript
复制
--default-character-set=gbk

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

代码语言:javascript
复制
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/

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

代码语言:javascript
复制
--hex-blob

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

代码语言:javascript
复制
mysqldump --default-character-set=utf8 --hex-blob demo > /mnt/dbback/demo_$(date +%Y%m%d_%H%M%S).sql

添加计划任务

检测或安装crontab

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

代码语言:javascript
复制
# crontab
-bash: crontab: command not found

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

代码语言:javascript
复制
# yum -y install vixie-cron

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

代码语言:javascript
复制
[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的命令,执行命令:

代码语言:javascript
复制
crontab -e

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

代码语言:javascript
复制
*/1 * * * * /mnt/dbback/bcmysql.sh

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

代码语言:javascript
复制
0 1 * * * /mnt/dbback/bcmysql.sh

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

日志查看

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

代码语言:javascript
复制
# tail -f /var/log/cron

小结

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

原文链接:https://www.choupangxia.com/topic/detail/77

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-11-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建备份目录
  • 创建shell脚本
  • 添加可执行权限
    • 修改mysql配置文件
      • 问题一
      • 添加计划任务
        • 检测或安装crontab
          • 添加计划任务
            • 日志查看
            • 小结
            相关产品与服务
            云数据库 SQL Server
            腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档