MySQL入门篇(六)之mysqldump备份和恢复

本文转自链接https://www.cnblogs.com/linuxk/p/9371475.html

  • 一、备份单个数据库

1、备份命令:mysqldump

  MySQL数据库自带的一个很好用的备份命令。是逻辑备份,导出 的是SQL语句。也就是把数据从MySQL库中以逻辑的SQL语句的形式直接输出或生成备份的文件的过程。

单实例语法(Syntax):
mysqldump -u <username> -p <dbname> > /path/to/***.sql

多实例的备份语法(Syntax):
mysqldump -u <username> -p <dbname>  -S <sockPath> > /path/to/***.sql

eg: mysqldump -u root -p wordpress > /opt/wordpress_$(date +%F).sql

2、参数解析

 

举例使用:

 

3、恢复操作

语法(Syntax):
mysql -u<username> -p<password> <dbname> < /opt/mytest_bak.sql   #库必须保留,空库也可
说明:指定dbname,相当于use <dbname>

4、示例

(1)无参数备份数据库mytest和恢复

(1)备份操作
a、备份
mysqldump -uroot -p‘123456’ mytest > /mnt/mytest_bak_$(date +%F).sql
(2)恢复操作
a、删除student表(库必须要保留,空库都行)
mysql -uroot -p‘123456‘ -e "use mytest;drop table student;"
b、恢复数据
mysql -uroot -p‘123456‘ mytest < /mnt/mytest_bak.sql
c、查看数据
mysql -uroot -p‘123456‘ -e "select * from mytest.student;"

(2)-B参数备份和恢复(建议使用)

(1)备份操作
a、备份
mysqldump -uroot -p‘123456‘ -B mytest > /mnt/mytest_bak_B.sql

说明:加了-B参数后,备份文件中多的Create database和use mytest的命令
加-B参数的好处:
加上-B参数后,导出的数据文件中已存在创建库和使用库的语句,不需要手动在原库是创建库的操作,在恢复过程中不需要手动建库,可以直接还原恢复。

(2)恢复操作
a、删除mytest库
mysql -uroot -p‘123456‘ -e "drop database mytest;"
b、恢复数据
(1)使用不带参数的导出文件导入(导入时不指定要恢复的数据库),报错
mysql -uroot - p‘123456‘ < /mnt/mytest_bak.sql
ERROR 1046 (3D000) at line 22: No database selected
(2)使用带-B参数的导出文件导入(导入时也不指定要恢复的数据库),成功
mysql -uroot -p‘123456‘ < /mnt/mytest_bak_B.sql
c、查看数据
mysql -uroot -p‘123456‘ -e "select * from mytest.student;"

(3)--compact参数优化备份文小大小,减少输出注释(一般用于Debug调试)

(1)备份
mysqldump -uroot -p‘123456‘ --compact -B mytest > /mnt/mytest_bak_Compact.sql
说明:
使用--compact参数,可以优化输出内容的大小,让容量更少,适合调试。便会忽略--skip-add-drop-table,--no-set-names,--skip-disable-keys,--skip-add-locks等几个参数的功能。

(4)指定压缩命令来压缩备份文件

(1)备份
mysqldump -uroot -p‘123456‘  -B mytest | gzip > /mnt/mytest_bak_.sql.gz
说明:
mysqldump导出的文件是文本文件,压缩效率很高

(5)备份多个数据库

(1)说明
通过-B参数指定相关数据库,每个数据库名之前用空格分格。当使用-B参数后,将所有数据库全部列全,则此时等同于-A参数。
(2)备份
mysqldump -uroot -p‘123456‘ -B mytest wiki | gzip > /mnt/mytestAndWiki_bak.sql.gz

(6)分库备份

  分库备份实际上就是执行一个备份语句就备份一个库,有多个库时,就执行多条相同的备份语句,只是备份的库名和备份文件名不同而已。可能通过shell脚本自动生成并执行相应的操作,也可以把所有单个备份语句写在一个shell脚本中,通过cron定时任务来备份。

分库备份的意义是在所有库都备份成一个备份文件时,恢复其中一个库的数据是比较麻烦的,所以分库备份,利于恢复。分库备份脚本如下:

for dbname in ` mysql -uroot -p‘123456‘ -e "show databases;" | grep -Evi "database|infor|perfor"`
do
    mysqldump -uroot -p"123456" --events -B $dbname | gzip > /mnt/${dbname}_bak.sql.gz
done

说明:${dbname}_bak,由于要求备份文件名以$dbname_bak.sql.gz格式命令,但系统无法辨别变量是$dbname还是$dbname_bak,所以此时就需要用大括号“{}”将变量括起来,就是${dbname}_bak.sql.gz了。

(7)-d参数,只备份数据库中表结构

mysqldump -uroot -p‘123456‘ -d mytest > /mnt/mytestDesc_bak.sql

(8)-A参数备份全库,并且-F刷新和切换binlog

mysqldump -uroot -p‘123456‘ -A -B -F > /mnt/All_bak.sql

(9)--master-data参数在备份文件中写入当前binlog文件号

mysqldump -uroot -p‘123456‘ --master-data=1 --compact mytest > /mnt/All_bak.sql

mysqldump -uroot -p‘123456‘ --master-data=2 --compact mytest > /mnt/All_bak.sql
  • 二、备份单个表

语法(Syntax):不能加-B参数
mysqldump -u<username> -p<password> dbname tablename1 tablename2... > /path/to/***.sql

示例:

示例1:备份mytest库中的student表
mysqldump -uroot -p‘123456‘ mytest student > /mnt/table_bak/student_bak.sql

示例2:备份mytest库中所有表,就是备份mytest库
mysqldump -uroot -p‘123456‘ mytest  > /mnt/table_bak/all_bak.sql

示例3:备份mytest库中的student和test表
mysqldump -uroot -p‘123456‘ mytest student test > /mnt/table_bak/two_bak.sql

示例4:-d参数,只备份表结构
mysqldump -uroot -p‘123456‘ -d mytest stusent > /mnt/studentDesc_bak.sql

示例5:-t参数,只备份数据
mysqldump -uroot -p‘123456‘ --compact -t mytest stusent > /mnt/studentData_bak.sql
INSERT INTO `student` VALUES (1,‘Tom‘,20,‘S11‘),(2,‘Jary‘,21,‘S12‘),(3,‘King‘,25,‘S10‘),(4,‘Smith‘,19,‘S11‘),(5,‘??‘,20,‘S11‘),(6,‘张三‘,20,‘S11‘);

  • 三、企业生产场景不同引擎备份命令参数

1、mysqldump的关键参数

-B:指定多个库,在备份文件中增加建库语句和use语句
--compact:去掉备份文件中的注释,适合调试,生产场景不用
-A:备份所有库
-F:刷新binlog日志
--master-data:在备份文件中增加binlog日志文件名及对应的位置点
-x  --lock-all-tables:锁表
-l:只读锁表
-d:只备份表结构
-t:只备份数据
--single-transaction:适合innodb事务数据库的备份
   InnoDB表在备份时,通常启用选项--single-transaction来保证备份的一致性,原理是设定本次会话的隔离级别为Repeatable read,来保证本次会话(也就是dump)时,不会看到其它会话已经提交了的数据。

2、不同引擎备份命令参数用法

1)Myisam引擎:
mysqldump -uroot -p123456 -A -B --master-data=1 -x| gzip > /data/all_$(date +%F).sql.gz

(2)InnoDB引擎:
mysqldump -uroot -p123456 -A -B  --master-data=1 --single-transaction > /data/bak.sql

(3)生产环境DBA给出的命令
a、for MyISAM
mysqldump --user=root --all-databases --flush-privileges --lock-all-tables --master-data=1 --flush-logs --triggers --routines --events --hex-blob > $BACKUP_DIR/full_dump_$BACKUP_TIMESTAMP.sql

b、for InnoDB
mysqldump --user=root --all-databases --flush-privileges --single-transaction --master-data=1 --flush-logs --triggers --routines --events --hex-blob > $BACKUP_DIR/full_dump_$BACKUP_TIMESTAMP.sql

原文地址:https://www.cnblogs.com/nanshanjushi/p/11378772.html

时间: 2024-10-27 11:48:34

MySQL入门篇(六)之mysqldump备份和恢复的相关文章

【SSRS】入门篇(六) -- 分组和总计

原文:[SSRS]入门篇(六) -- 分组和总计 通过[SSRS]入门篇(五) -- 设置报表格式的设计,一份简单格式的报表已产生,如下图: 这节来说说分组和总计: 根据日期.订单对数据进行分组 添加订单总计 添加每日总计 添加总计 对数据进行分组: 1.单击"设计"选项页.(如果看不到"行组.列组"窗格,右键单击设计图画,选择"视图 -> 分组".) 2.从"报表数据"窗格把"Date"字段拖放到&

mysqldump备份和恢复Mysql数据库

简单介绍: 通过mysqldump命令可以将指定的库和表全部导出为sql脚本,可以在不同版块的Mysql上面使用.例如需要升级Mysql数据库可以使用mysqldump先备份所有数据库,然后直接在升级后的Mysql数据库导入即可. 基本操作:备份单个数据库,或者库中的特定表(库名后面加表名)mysqldump备份jiaowu库[[email protected] ~]# mysqldump -uroot -p jiaowu > /root/jiaowu.sql删除jiaowu的数据库mysql>

mysql学习(4)-mysqldump备份和恢复数据

背景 最近在公司做数据迁移方面的工作,使用mysql数据库在测试环境模拟数据迁移,在迁移测试的过程中需要做数据备份和恢复 mysql数据备份和恢复比较简单,可以选择mysqldump工具,这里简单提一下在迁移数据过程中常用的一些操作 1.备份和恢复整个数据库 在主数据库上使用mysqldump命令备份一下数据库: mysqldump -uroot -p jobs > /usr/local/mysql/jobs.sql SSH登录到备份数据库: (1).通过FTP.SFTP或其他方式,将上一步备份

mysql使用mysqldump备份、恢复

  mysqldump是mysql用于转存储数据库的实用程序.它主要产生一个SQL脚本,其中包含从头重新创建数据库所必需的命令CREATE TABLE INSERT等 mysqldump 语法 :      默认配置读取路径:  /etc/mysql/my.cnf     /etc/my.cnf    ~/.my.cnf            Usage: mysqldump [OPTIONS] database [tables]           OR     mysqldump [OPTI

Python全栈 MySQL 数据库 (SQL查询、备份、恢复、授权)

ParisGabriel 每天坚持手写  一天一篇  决定坚持几年 为了梦想为了信仰  开局一张图 今天接着昨天的说 索引有4种: 普通 索引 :index  唯一索引:unique 主键索引:primary key 外键索引:foreign key 索引查询命令: show index from 表名\G: Non_Unique:1   :index Non_Unique:0  :unique 外键索引(foreign key):  定义:让当前字段的值在另一个表的范围内选择   语法:  

mysqldump 备份和恢复整理

备份MySQL数据库的命令 mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql 备份MySQL数据库为带删除表的格式 备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库. mysqldump -–add-drop-table -uusername -ppassword databasename > backupfile.sql 直接将MySQL数据库压缩备份 m

mysqldump备份中恢复单张表

⒈mysqldump备份中导出单张表很多时候我们需要从mysqldump备份文件中恢复出一张表,通常的做法可能是先把sql 文件恢复到一个测试数据库,然后再使用mysqldump导出一张表,再恢复到生产环境,这样,如果数据量不大这方法是可行的,但是你依然需要有一个测试机器或者临时创建一个库,不是很方便,可以利用awk/sed解决相关问题:①在原数据库中使用show tables;②利用sed或者awk,将数据导入文件中(注意表之间的排序)# awk '/^-- Table structure f

mysqldump备份和恢复

一.备份单个数据库 1.备份命令:mysqldump MySQL数据库自带的一个很好用的备份命令.是逻辑备份,导出 的是SQL语句.也就是把数据从MySQL库中以逻辑的SQL语句的形式直接输出或生成备份的文件的过程. 单实例语法(Syntax): mysqldump -u <username> -p <dbname> > /path/to/***.sql 多实例的备份语法(Syntax): mysqldump -u <username> -p <dbname

mysql之使用xtrabackup进行物理备份、恢复、在线克隆从库、在线重做主从

注:图片来自<深入浅出MySQL 数据库开发 优化与管理维护 第2版> 物理备份和恢复 1.冷备份:停掉mysql再备份,一般很少用,因为很多应用不允许长时间停机,停机备份的可以直接CP数据库的数据目录,在进行恢复前,停掉mysql,然后把数据目录覆盖掉,再重启mysql. 2.热备份 Myisam存储引擎 可以使用mysqlhotcopy工具,如果此工具无法使用时,可以手工使用:flush tables with read lock;手动加读锁,然后复制mysiam表的文件做热备. inno