Lyraa's Blog

MySQL 通过 mysqldump 备份数据库

2023-09-05

1、概述

在 MySQL 中提供了命令行导出数据库数据以及文件的一种方便的工具 mysqldump, 我们可以通过命令行直接实现数据库内容的导出dump, 首先我们简单了解一下 mysqldump 命令用法:

# 安装 mysqldump
apt install mysql-client-core-8.0

# MySQLdump 常用
mysqldump -u root -p 数据库 > xxx.sql # 还原时需要先手动 CREATE DATABASE 数据库
mysqldump -u root -p --databases 数据库 > xxx.sql # 还原时不需要事先手动创建数据库


# 备份远程数据库
mysqldump --host=<server> --port=<port> --user <user> --password --databases testdb > dump_file_path.sql
mysqldump -h <server> -P <port> -u <user> -p --databases testdb > dump_file_path.sql

mysql 8.0 版本此命令会报错:
Unknown table ‘COLUMN_STATISTICS’ in information_schema (1109)
此处需要添加新参数 –column-statistics=0,格式如下:

mysqldump --column-statistics=0 -u root -p --databases 数据库1 数据库2 > xxx.sql

如需设置默认参数,可修改 mysql 配置文件,添加如下参数:

[mysqldump]
column-statistics=0

2、mysqldump 常用操作示例

  1. 备份全部数据库的数据和结构
    mysqldump -uroot -p123456 -A > /data/mysqlDump/mydb.sql
  2. 备份全部数据库的结构(加 -d 参数)
    mysqldump -uroot -p123456 -A -d > /data/mysqlDump/mydb.sql
  3. 备份全部数据库的数据(加 -t 参数)
    mysqldump -uroot -p123456 -A -t > /data/mysqlDump/mydb.sql
  4. 备份单个数据库的数据和结构(,数据库名mydb)
    mysqldump -uroot -p123456 mydb > /data/mysqlDump/mydb.sql
  5. 备份单个数据库的结构
    mysqldump -uroot -p123456 mydb -d > /data/mysqlDump/mydb.sql
  6. 备份单个数据库的数据
    mysqldump -uroot -p123456 mydb -t > /data/mysqlDump/mydb.sql
  7. 备份多个表的数据和结构(数据,结构的单独备份方法与上同)
    mysqldump -uroot -p123456 mydb t1 t2 > /data/mysqlDump/mydb.sql
  8. 一次备份多个数据库
    mysqldump -uroot -p123456 --databases db1 db2 > /data/mysqlDump/mydb.sql

3、还原 MySQL 备份内容

有两种方式还原,第一种是使用 SHELL 行完成还原,第二种是在 MySQL 命令行中

  1. 在系统命令行中,输入如下实现还原:
    mysql -uroot -p123456 < /data/mysqlDump/mydb.sql
  2. 在登录进入 mysql 系统中,通过 source 指令找到对应系统中的文件进行还原:
    mysql> source /data/mysqlDump/mydb.sql

4、编写BASH维护固定数量备份文件

在 Linux 中,使用 vi 或者 vim 编写脚本内容并命名为:mysql_dump_script.sh

#!/bin/bash

# 保存备份个数,备份 28 天数据
number=28
# 备份保存路径
backup_dir=/root/mysqlbackup
# 日期
dd=`date +%Y-%m-%d-%H-%M-%S`
# 备份工具
tool=mysqldump
# 用户名
username=root
# 密码
password=TankB214
# 将要备份的数据库
database_name=edoctor

# 如果文件夹不存在则创建
if [ ! -d backup_dir ];
then
mkdir -p backup_dir;
fi

# 简单写法 mysqldump -u root -p123456 users > /root/mysqlbackup/users-filename.sql
tool -u username -ppassword database_name>backup_dir/database_name-dd.sql

# 写创建备份日志
echo "create backup_dir/database_name-dd.dump" >>backup_dir/log.txt

# 找出需要删除的备份
delfile=`ls -l -crt backup_dir/*.sql | awk '{print9 }' | head -1`

# 判断现在的备份数量是否大于 number
count=`ls -l -crt backup_dir/*.sql | awk '{print 9 }' | wc -l`

if [count -gt number ]
then
# 删除最早生成的备份,只保留 number 数量的备份
rm delfile
# 写删除文件日志
echo "delete delfile" >>backup_dir/log.txt
fi

如上代码主要含义如下:
1.首先设置各项参数,例如 number 最多需要备份的数目,备份路径,用户名,密码等。
2.执行 mysqldump 命令保存备份文件,并将操作打印至同目录下的 log.txt 中标记操作日志。
3.定义需要删除的文件:通过 ls 命令获取第九列,即文件名列,再通过实现定义操作时间最晚的那个需要删除的文件。
4.定义备份数量:通过 ls 命令加上 wc -l 统计以sql结尾的文件的行数。
5.如果文件超出限制大小,就删除最早创建的 sql 文件


Tags: MySQL

扫描二维码,分享此文章