数据库还原备份一

mysqldump还原备份

备份的命令格式
一、mysqldump 选项 数据库名 表名 #支持指定数据库和指定多表的备份,但数据库本身定义
不备份
二、mysqldump 选项 -B 数据库1 数据可2.... #支持指定数据库备份,包含数据库本身定义也会备份
三、mysqldump 选项 -A 选项 #备份所有数据库,包含数据库本身定义也会备份
三者的区别(仅个人观点)
  • 方法一只能备份数据库中创建的表(create table),不能备份创建的库(create database)
  • 方法二、三创建的库和表都能备份

范例:

方法一备份:
[root@centos8 ~]#mysqldump hellodb teachers > /data/back.sql
[root@centos8 ~]#grep -i create /data/back.sql 
CREATE TABLE `teachers` (
###此时无法之间还原数据库,必须先提前创建数据库,否则会出现下面的报错
[root@centos8 ~]#mysql < /data/back.sql 
ERROR 1046 (3D000) at line 22: No database selected
方法二备份:
[root@centos8 ~]#mysqldump -B hellodb > /data/back2
[root@centos8 ~]#grep -i create /data/back2
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `hellodb` /*!40100 DEFAULT CHARACTER SET utf8 */ /*!80016 DEFAULT ENCRYPTION='N' */;
CREATE TABLE `classes` (
CREATE TABLE `coc` (
CREATE TABLE `courses` (
CREATE TABLE `scores` (
CREATE TABLE `students` (
CREATE TABLE `teachers` (
CREATE TABLE `toc` (
####此方法备份的数据库可以直接还原
[root@centos8 ~]#mysql < /data/back2
mysqldump备份数据库常用的选项
###-A, --all-databases #备份所有的数据库
###-B, --databases db_name… #指定备份的数据库
-E, --events:#备份相关的所有event scheduler
###--default-character-set=utf8 #指定字符集
###--master-data[=#]: #此选项须启用二进制日志
#1:所备份的数据之前加一条记录为CHANGE MASTER TO语句,非注释,不指定#,默认为1,适合于主从复
制多机使用
#2:记录为被注释的#CHANGE MASTER TO语句,适合于单机使用,适用于备份还原
#此选项会自动关闭--lock-tables功能,自动打开-x | --lock-all-tables功能(除非开启--
single-transaction)
###-F, --flush-logs #备份前滚动日志,锁定表完成后,执行flush logs命令,生成新的二进制日志文件,
配合-A 或 -B 选项时,会导致刷新多次数据库。建议在同一时刻执行转储和日志刷新,可通过和--singletransaction或-x,--master-data 一起使用实现,此时只刷新一次二进制日志
###--single-transaction 此选项Innodb中推荐使用,不适用MyISAM,此选项会开始备份前,先执行START TRANSACTION指令开启
事务
注意:选项前标记###都是常用选项

实战案例

1.特定的数据库备份

实验环境
####已有数据库
+--------------------+
| Database           |
+--------------------+
| hellodb            |
| information_schema |
| mysql              |
| performance_schema |
+--------------------+

备份hellodb数据库
###通常数据库内存较大,所以备份数据库时压缩一下
[root@centos8 ~]#mysqldump -F --single-transaction --master-data=2 --default-character-set=utf8 -B hellodb |gzip > /opt/back.sql.zip
查看数据库是否备份成功
[root@centos8 opt]#ll -h back.sql
-rw-r--r--. 1 root root 2.1K Dec  2 13:18 back.sql
特定的数据库备份脚本
[root@centos8 back]#cat /back_hellodb.sh 
#/bin/bash
DB=hellodb
DIR=/data/back
#先判断备份文件夹又没有创建
[ -d $DIR ] || mkdir -p $DIR
mysqldump -F --single-transaction --master-data=2 --default-character-set=utf8 -B $DB |gzip > $DIR/back_hellodb.sql.zip

同时备分hellodb,mysql两个数据库(分库备份)
用正则表达式取出要备份的数据库
[root@centos8 ~]#mysql -e "show databases" |grep -E '^(hellodb|mysql)$'
hellodb
mysql
用for循环
[root@centos8 ~]#for db in  `mysql -e "show databases" |grep -E '^hellodb|mysql'`;do mysqldump -B $db|gzip > /opt/$db.sql.zip;done
查看是否备份成功
[root@centos8 opt]#ls
back.sql  hellodb.sql.zip  mysql.sql.zip
脚本
[root@centos8 ~]#cat hellodb_mysql.back.sh 
#!/bin/bash
DIR=/data/back
TIME=`date +%F_%H-%M-%S`
list=`mysql -e "show databases"|grep -E "^hellodb|mysql"`
#判断存放备份数据库的文件夹是否存在
[ -d $DIR ] || mkdir -p $DIR
for db in $list;do
	mysqldump -F --single-transaction --master-data=2 --default-character-set=utf8 -B $db |gzip > ${DIR}/${db}_${TIME}.sql.zip
done
if [ $? -eq 0 ];then
       echo  "$list数据库备份成功"	
fi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值