a

amu

V1

2022/02/13阅读:57主题:默认主题

Linux定时备份MySQL数据库

为了数据安全,定时备份自己的数据库是必要的,当然,你不可能每次都手动备份,这样不仅麻烦,而且,万一忘记备份,出现问题就完蛋了。 所以我使用一个定时cron任务来自动化这个过程。

创建脚本文件backupdb.sh

将下面脚本的db_user db_passwd db_name backup_name替换为自己的信息。

    #!/bin/bash
    db_user="username"
    db_passwd="pwd"
    db_name="dbname"
    backup_name="$(date +"%Y%m%d%H%M%S")"
    /usr/bin/mysqldump -u$db_user -p$db_passwd $db_name >> /path/to/$backup_name.sql

添加执行权限

    chmod +x backupdb.sh

创建cron定时任务

  1. 执行crontab -e,提示你选择编辑器,你可以根据个人喜好选择(我选择的是vim

    no crontab for admin - using an empty one

    Select an editor.  To change later, run 'select-editor'.
      1. /bin/nano        <---- easiest
      2. /usr/bin/vim.basic
      3. /usr/bin/vim.tiny
      4. /bin/ed

    Choose 1-4 [1]: 2
  2. 然后在弹出的编辑页面输入以下内容:

     0 1 * * * /home/admin/backupdb.sh

    上面这行内容的意思是,每天凌晨1点执行/home/admin/backupdb.sh。当然你可以根据自己的情况选择备份的频率,关于cron的使用,可以参考我之前写的这篇文章

p.s.可能会提示以下内容,但不影响备份:

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

提示mysqldump进程权限错误

提示以下内容:

mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces

说明使用的user没有该数据库的权限,解决方案有2个。

  1. 更新数据库用户的权限。
  2. 使用mysqldump该--no-tablespaces选项运行。

方法1:更新用户权限

为用户授予 PROCESS 权限可能是修复mysqldump进程权限错误的最简单选项。但是会带来安全问题

以管理员用户身份登录数据库,授予你需要使用的用户PROCESS权限:

GRANT PROCESS ON *.* TO user@localhost;

p.s. PROCESS 是全局级别的权限。它不能应用于单个数据库。全局权限要么是管理权限,要么适用于 MySQL 服务器上的所有数据库。尝试在单个数据库上授予它们会显示以下错误:

ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES

要向所有数据库授予权限,您必须使用 ON *.* ... 语法。

方法2:使用--no-tablespaces选项 如果你不想为使用的用户分配全局级别的权限,则必须在转储数据库时指定--no-tablespaces选项。

mysqldump --no-tablespaces -u user -ppass dbname >> backupfile.sql

赋予PROCESS权限的安全问题

根据MySQL文档,[PROCESS权限]控制着会话正在执行的语句对信息的访问。 这是一种服务器管理权限,所以最好授予所有用户。这是因为它可能会显示当前正在执行的查询中的文本。因此,任何具有 PROCESS 权限的用户都可以看到其他人发出的查询。例如类似 UPDATE user SET password=PASSWORD 的查询,可能会显示隐私内容。

分类:

前端

标签:

前端

作者介绍

a
amu
V1