shell脚本每天自动备份mysql数据库

一、mysql提供了一个mysqldump的工具可以方便的导出导入数据库信息;

二、使用命令行shell测试执行mysqldump,理解必备的参数,查看生成的sql备份文件是否符合需求;

/usr/bin/mysqldump --opt -ubatsing -pbatsingpw -hlocalhost timepusher > /mnt/mysqlBackup/db_`date +%F`.sql

注解:
1、执行 /usr/bin/mysqldump;
2、--opt是quick,add-drop-table,add-locks,extended-insert,lock-tables几个参数的合称,一般都要使用,具体意思自行搜索;
3、-u数据库用户名 -p数据库用户密码 -h数据库地址 数据库名 > 导出的文件路径;
4、`date +%F`是shell中生成当前日期,格式如2015-11-05,所以成功导出时生成的文件名为 db_2015-11-05.sql;
5、下载生成的 sql文件 ,用文本编辑器打开检查,本地导入测试数据库,看是否有问题;

三、整理编写比较灵活的shell脚本,方便重用;

复制代码

#!/bin/sh

# Database info
DB_USER="batsing"
DB_PASS="batsingpw"
DB_HOST="localhost"
DB_NAME="timepusher"

# Others vars
BIN_DIR="/usr/bin"            #the mysql bin path
BCK_DIR="/mnt/mysqlBackup"    #the backup file directory
DATE=`date +%F`

# TODO
# /usr/bin/mysqldump --opt -ubatsing -pbatsingpw -hlocalhost timepusher > /mnt/mysqlBackup/db_`date +%F`.sql
$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME > $BCK_DIR/db_$DATE.sql

#还原数据库
#用mysql-front导入前一天的 *.sql 文件即可恢复数据

复制代码

保存到文件或上传到 /usr/local/apache/htdocs/timepusher/sqlBak/sqlAutoBak.sh

四、测试Shell脚本

1、进入到该脚本文件目录 chmod +x sqlAutoBak.sh 添加执行权限,否则会报错  Permission denied 
2、./sqlAutoBak.sh ,如果是在windows编写上传的文件可能会报错

/bin/sh^M: bad interpreter: No such file or directory

这是不同系统编码格式引起的:在 windows系统中编辑的 .sh文件可能有不可见字符,所以在 Linux系统下执行会报以上异常信息。可以在Windows上使用Notepad++转换成Unix格式(菜单中选择:编辑>档案格式转换>转换成UNIX)
3、修改后上传继续执行 ./sqlAutoBak.sh ,没有报错。再查看导出的sql文件。

五、压缩mysql的备份数据

1、查看导出来的sql文件,发现其文件大小非常大,mysqldump也提供了生成gzip压缩文件的参数设置
2、sqlAutoBak.sh修改为如下

复制代码

#!/bin/sh

# Database info
DB_USER="batsing"
DB_PASS="batsingpw"
DB_HOST="localhost"
DB_NAME="timepusher"

# Others vars
BIN_DIR="/usr/bin"            #the mysql bin path
BCK_DIR="/mnt/mysqlBackup"    #the backup file directory
DATE=`date +%F`

# TODO
# /usr/bin/mysqldump --opt -ubatsing -pbatsingpw -hlocalhost timepusher > /mnt/mysqlBackup/db_`date +%F`.sql
# $BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME > $BCK_DIR/db_$DATE.sql
$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME | gzip > $BCK_DIR/db_$DATE.sql.zip

# 还原数据库
# 把 *.sql.zip 使用gunzip 或 本地的解压软件 解压为 *.sql 文件
# 用mysql-front导入前一天的 *.sql 文件即可恢复数据

复制代码

3、修改后上传继续执行 ./sqlAutoBak.sh ,没有报错。如果用文本编辑器查看导出的 *.sql.gz文件,应该是一堆乱码。
4、下载到本地使用解压软件打开,解压就能看到里面真正的 *.sql 文件了。

  

六、设置linux定时任务执行该脚本;

1、编辑定时任务列表

crontab -e

2、插入下面这一行,因为通常来说5点钟网站的访问量最低。

00 05 *   * * /bin/sh /usr/local/apache/htdocs/timepusher/sqlBak/sqlAutoBak.sh
#每天早上 5:00am 执行

3、查看任务是否创建成功

crontab -l

七、第二天检查自动生成的sql文件是否符合要求

如果生成的文件和解压出来查看没有问题,那么这个自动定时备份数据库的脚本就算是完成了。因为生成的文件多了会占用一定的空间,所以建议要定期(比如一个月)清理一下文件。

 

$、补充

1、如果该数据库的用户没有分配 锁表 的权限,则备份会报错 when using LOCK TABLES 。那是因为mysqldump命令默认在导出时是要锁定表的,所以解决方式有两个。一个是给该用户开放 锁表 的权限;另一个是在命令中加上  --skip-lock-tables 这个参数。即是:

$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME --skip-lock-tables| gzip > $BCK_DIR/db_$DATE.sql.gz

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: #!/bin/bash # 备份MySQL数据库 # 设置变量 MYSQL_USER="root" MYSQL_PASS="password" DATABASE="database_name" BACKUP_DIR="/path/to/backup/dir" DATE=$(date +"%Y-%m-%d") # 创建备份文件夹 mkdir -p "$BACKUP_DIR/$DATE" # 备份数据库 mysqldump -u $MYSQL_USER -p$MYSQL_PASS $DATABASE > "$BACKUP_DIR/$DATE/$DATABASE.sql" ### 回答2: 编写一个用于备份MySQL数据库Shell脚本可以按照以下步骤进行: 1. 首先,创建一个Shell脚本的文件,比如命名为`backup_mysql.sh`。 2. 在脚本中,使用`#!/bin/bash`指定脚本解释器为bash。 3. 声明配置变量,如数据库用户名、密码、数据库主机等。 ```bash #!/bin/bash # 配置数据库信息 DB_USER="your_db_username" DB_PASSWORD="your_db_password" DB_HOST="your_db_host" DB_NAME="your_db_name" # 指定备份文件名和路径 BACKUP_DIR="/path/to/backup_directory" CURRENT_DATE=$(date +"%Y%m%d") BACKUP_FILE="$BACKUP_DIR/backup_$CURRENT_DATE.sql" ``` 4. 使用mysqldump命令备份数据库并保存到指定目录下的备份文件。 ```bash # 使用mysqldump命令备份数据库到指定备份文件 mysqldump -h $DB_HOST -u $DB_USER -p$DB_PASSWORD $DB_NAME > $BACKUP_FILE ``` 5. 判断备份是否成功,并输出相应的提示信息。 ```bash # 判断备份是否成功 if [ $? -eq 0 ] then echo "数据库备份成功!" else echo "数据库备份失败!" fi ``` 6. 添加执行权限。在脚本所在目录中执行`chmod +x backup_mysql.sh`命令,给脚本添加执行权限。 7. 运行脚本。在终端中切换到脚本所在的目录,并执行`./backup_mysql.sh`命令。 注意:在上述代码中,你需要根据你自己的MySQL数据库配置信息来修改相应的变量值,以确保脚本能够正确备份数据库。 ### 回答3: 编写一个shell脚本用于备份MySQL数据库是一项常见的任务。下面是一个简单的示例脚本: #!/bin/bash # 定义数据库相关信息 DB_USER="your_username" DB_PASSWORD="your_password" DB_NAME="your_database_name" BACKUP_DIR="/path/to/backup_directory" # 创建备份目录 mkdir -p $BACKUP_DIR # 定义备份文件名 BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}_$(date +%Y%m%d%H%M%S).sql" # 使用mysqldump命令备份数据库 mysqldump -u $DB_USER -p$DB_PASSWORD $DB_NAME > $BACKUP_FILE # 检查备份是否成功 if [ $? -eq 0 ]; then echo "数据库备份成功!备份文件:$BACKUP_FILE" else echo "数据库备份失败!" fi 脚本中定义了数据库的用户名、密码和名称,以及备份存储的目录。脚本使用mysqldump命令来执行实际的备份操作,并将备份文件命名为当前日期和时间。最后,脚本通过检查mysqldump命令的退出码来确定备份是否成功,并输出相应的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值