Linux自动备份mysql数据库(含docker部署的)
此处以docker部署的mysql为例
创建备份脚本
脚本内容
首先使用bash命令创建一个sh脚本文件并赋予执行权限
Bash
touch Auto_backup.sh && chmod +x Auto_backup.sh
使用编辑器打开这个脚本,并添加以下内容
Bash
#!/bin/bash
# 自动备份docker mysql数据库
# 定义备份路径
backup_dir=/Users/zdy/Desktop/mysql
# 定义备份时间
backup_time=`date +%Y_%m_%d_%H时%M分%S秒`
# 使用进入mysql容器执行mysqldump命令并备份数据库并将文件名更改为当前时间,此处--databases参数为备份多个数据库,若只有一个数据库备份,可以省略改参数
docker exec mysql mysqldump -u数据库用户名 -p数据库密码 --databases waline matomo | gzip > $backup_dir/backup_$backup_time.sql.gz
# 非docker部署时使用
# mysql mysqldump -u数据库用户名 -p数据库密码 --databases waline matomo | gzip > $backup_dir/backup_$backup_time.sql.gz
# 删除7天前的备份
find /www/mysql_backup -name "*.sql.gz" -mtime +7 | xargs rm -f
# 备用删除命令
# find $backup_dir -mtime +7 -name "*.sql.gz" -exec rm -rf {} \;
# 如果不需要压缩使用(直接备份为SQL文件)
# docker exec mysql mysqldump -u数据库用户名 -p数据库密码 --databases waline matomo > $backup_dir/backup_$backup_time.sql
# find /www/mysql_backup -name "*.sql.gz" -mtime +7 | xargs rm -f
此时这个脚本就手动运行可以进行数据备份了,此处会提示在命令行界面上使用密码可能不安全。请注意哦!不过我一般使用RSA秘钥免密码连接,通常不存在泄露问题
参数解释
–all-databases, -A: 备份所有数据库
–databases, -B: 用于备份多个数据库,如果没有该选项,mysqldump把第一个名字参数作为数据库名,后面的作为表名。使用该选项,mysqldum把每个名字都当作为数据库名。
–force, -f:即使发现sql错误,仍然继续备份
–host=host_name, -h host_name:备份主机名,默认为localhost
–no-data, -d:只导出表结构
–password[=password], -p[password]:密码
–port=port_num, -P port_num:制定TCP/IP连接时的端口号
–quick, -q:快速导出
–tables:覆盖 –databases or -B选项,后面所跟参数被视作表名
–user=user_name, -u user_name:用户名
–xml, -X:导出为xml文件
完整配置
Bash
#!/bin/bash
# 自动备份docker mysql数据库
# 定义备份路径
backup_dir=/Users/zdy/Desktop/mysql
# 定义备份时间
backup_time=`date +%Y_%m_%d_%H时%M分%S秒`
# 使用进入mysql容器执行mysqldump命令并备份数据库并将文件名更改为当前时间,此处--databases参数为备份多个数据库,若只有一个数据库备份,可以省略改参数
docker exec mysql mysqldump -u数据库用户名 -p数据库密码 --databases waline matomo | gzip > $backup_dir/backup_$backup_time.sql.gz
# 非docker部署时使用
# mysql mysqldump -u数据库用户名 -p数据库密码 --databases waline matomo | gzip > $backup_dir/backup_$backup_time.sql.gz
# 删除7天前的备份
find /www/mysql_backup -name "*.sql.gz" -mtime +7 | xargs rm -f
# 备用删除命令
# find $backup_dir -mtime +7 -name "*.sql.gz" -exec rm -rf {} \;
# 如果不需要压缩使用(直接备份为SQL文件)
# docker exec mysql mysqldump -u数据库用户名 -p数据库密码 --databases waline matomo > $backup_dir/backup_$backup_time.sql
# find /www/mysql_backup -name "*.sql" -mtime +7 | xargs rm -f
# 拷贝到远程服务器
scp $backup_dir/backup_$backup_time.sql 用户名@远程服务器:路径/backup_$backup_time.sql
THE END
暂无评论内容