mysql备份与还原之mysqldump(代码片段)

golinux golinux     2022-12-10     292

关键词:

一.备份类型
逻辑备份:把数据导出到一个文档中(.sql/.txt)
适合场景:中小型数据库

物理备份:保存/usr/local/mysql/data数据库文件目录
适合场景:大型数据库

在线热备(冗余):需要有多台机器,主备模式,集群模式

二.逻辑备份(mysqldump)
表级别备份
mysqldump [OPTIONS] database [tables]
库级别备份
mysqldump [OPTIONS] --databases DB1 [DB2 DB3...]
全库级别备份
mysqldump [OPTIONS] --all-databases [OPTIONS]

① 表级别备份
语法:mysqldump -p密码 数据库名称 表名称 > /tmp/mysqlbak/it_student.sql
案例:把db_itcast中的it_student表进行逻辑备份导出文件放入/tmp/mysqlbak目录下
第一步:创建目录
# mkdir /tmp/mysqlbak
第二步:备份数据表it_student
[[email protected] ~] # mysqldump -p123 db_itcast it_student > /tmp/mysqlbak/it_student.sql

② 表级别恢复

方法一:
第一步:登录MySQL
# mysql -uroot -p
第二步:选择数据库(因为这个表属于某一个数据库)
mysql > use db_itcast;
第三步:使用source 导出sql文件路径+名称
mysql > source /tmp/mysqlbak/it_student.sql

方法二:

# mysql -u root -p 数据库名称 </tmp/mysqlbak/it_student.sql

③ 库级别备份
退出mysql,使用mysqldump进行库级别备份
语法:mysqldump -p123 --databases 数据库名称1 [数据库名称2] > /tmp/mysqlbak/db_itcast.sql

特别说明:
如果计算机中有多个MySQL实例,备份一定要指定备份那个MySQL
# mysqldump -S /tmp/mysql31.sock
案例:把db_itcast数据库进行备份操作
# mysqldump --databases db_itcast > /tmp/mysqlbak/db_itcast.sql -p
Enter password:

④ 库级别恢复

方法一:
第一步:登录MySQL
# mysql -uroot -p
第二步:删除原来的数据库
mysql > drop database 数据库名称;
第三步:使用source命令恢复文件
mysql > source /tmp/mysqlbak/db_itcast.sql

方法二:

# mysql -u root -p </tmp/mysqlbak/db_itcast.sql

⑤ 全库级别备份
基本语法:# mysqldump --all-databases [options] > /tmp/mysqlbak/all.sql
常用参数:
--flush-logs, -F 开始备份前刷新日志
--flush-privileges 备份包含mysql数据库时刷新授权表
--lock-all-tables, -x MyISAM一致性,服务可用性(针对所有库所有表)
--lock-tables, -l 备份前锁表(针对要备份的库)
--single-transaction 适用InnoDB引擎,保证一致性,服务可用性
--master-data=2  表示将二进制日志位置和文件名写入到备份文件并在dump文件中注释掉这一行;
--master-data=1  表示将二进制日志位置和文件名写入到备份文件,在dump文件中不注释这一行;
--master-data参数其他说明:
1)恢复时会执行,默认是1
2)需要RELOAD privilege并必须打开二进制文件
3)这个选项会自动打开--lock-all-tables,关闭--lock-tables

--single-transaction :保持数据的一致性与完整性
--master-data :开启使用二进制文件,默认关闭的
开启二进制文件:如果/usr/local/mysql目录下存在my.cnf文件,则直接修改。如果没有my.cnf文件,自己创建一个即可。
# vim my.cnf
# log-bin = /usr/local/mysql/data/mybinlog
# :wq
# service mysql restart

案例:对MySQL进行全库备份(开启二进制文件)
# mysqldump --all-databases --single-transaction --master-data > /tmp/mysqlbak/all.sql -p

⑥ 全库级别恢复
# 退出MySQL
# exit
# 使用mysql命令进行恢复
# mysql < /tmp/mysqlbak/all.sql -p

三.mysqldump+二进制日志实现增量备份

1、特殊说明
mysqldump默认情况下不支持增量备份的,其提供了表级、库级、全库级备份
如果想实现增量备份必须结合二进制日志文件
2、说说什么是增量备份
增量备份 = 全量备份 + 后期增加的数据(要备份的核心)=== 差异备份
3、二进制日志文件(类似日常生活中的日记)
① 错误日志 :把mysql启动、运行、关闭过程中产生的异常写入到错误日志中$hostname.err
localhost.localdomain.err
在my.cnf配置文件中,可以通过如下形式进行定义:
# log-error = /usr/local/mysql/mysql.err
但是默认情况下,要特别注意:
第一种情况:如果定义了错误日志,但是没有这个文件,会报错,会导致数据库无法启动。
第二种情况:mysql.err没有数据写入,原因:权限问题 chown mysql.mysql mysql.err

② 一般查询日志(数据查询过程中产生的信息,了解)

当客户端连接或断开时,服务器会将信息写入该日志,并记录从客户端收到的每一条SQL语句。当您怀疑客户端的错误并想知道客户端发送给mysqld的确切信息时,一般查询日志可能非常有用。

默认情况下,一般查询日志是==被禁用==的。 如果要开启,可以使用以下参数:
general_log[=0|1 0表示禁用,1表示开启.
默认情况下,系统会在数据目录下创建以host_name.log命名的一般查询日志。如果要自己指定,可以使用以下参数:
指定一般查询日志的路径及文件名
general_log_file=/path/file.log
该参数用于定义general log和slow log的输出目标
log-output=[value,...]

value=[TABLE|FILE|NONE],默认值为FILE
TABLE表示将日志记录到表中,general_log表或者slow_log表中
FILE表示将日志记录的文本文件中
NONE表示不记录到表或者文件

注意:
如果log-output=NONE,则即使启用了日志,也不会写入条目。
如果log-output不等于NONE,但是没有启用日志也不会写入条目。

③ 二进制日志(binary log,非常非常重要),我们对数据库的任何更改(增加、修改、删除)都会写入到二进制日志文件中。
在my.cnf配置文件中,可以通过如下形式进行定义:
# log-bin = /usr/local/mysql/data/mybinlog
一般情况下,二进制文件没有后缀
还有一点要特别注意:二进制日志没有办法直接通过cat命令查看,使用mysqlbinlog命令进行查看

4、具体增量备份步骤
① 首先要做全量备份
前提:先开启二进制文件(my.cnf)
# log-bin = /usr/local/mysql/data/mybinlog
# 全量备份
# mysqldump --all-databases --single-transaction --flush-logs --master-data=2 > /tmp/mysqlbak/all.sql -p
问题:如果以上语句报错,mysqldump: Got error: 1105: Unknown error when doing refresh
解决方案:代表mysql.err没有权限,chown mysql.mysql /usr/local/mysql/mysql.err
② 对数据库进行增删改操作
at 120 按时间
# delete from it_student where id=5;
# insert into it_student values (null,‘廖星辰‘,25,‘男‘,‘9999.00‘,‘yunwei‘);
# insert into it_student values (null,‘上官婉儿‘,19,‘女‘,‘6666.00‘,‘ui‘);
③ 对二进制文件进行备份
# show master status
# mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| mybinlog.000003 | 980 | | | |
+-----------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
方法一:备份03这个二进制日志文件
# cp /usr/local/mysql/data/mybinlog.000003 /tmp/mysqlbak/

方法二:把03这个二进制日志文件导出成sql文件
# mysqlbinlog mybinlog.000003
从以上命令中我们可以看到备份点:# at 209
# mysqlbinlog --start-position=209 mybinlog.000003 > /tmp/mysqlbak/mybinlog.sql

④ 模拟故障
drop database myblog;
use db_itcast;
drop table it_student;

⑤ 数据恢复
第一步:先进行全量恢复
# mysql < /tmp/mysqlbak/all.sql -p
第二步:恢复增量备份的数据
方案一:直接source 增量的sql文件
# mysql > source /tmp/mysqlbak/mybinlog.sql

方案二:恢复二进制文件
# mysqlbinlog --start-position=209 /tmp/mysqlbak/mybinlog.000003 |mysql -p
Enter password:123

⑥ 测试验证
# select * from db_itcast.it_student;

二、逻辑导入导出(了解)
1、导入导出
只能针对数据表内容,最终结果:产生一个txt文本文档
2、案例:把it_student表中的数据全部导出
基本语法:select 字段列表 into outfile ‘存放路径+名称‘ from 数据表
# use db_itcast
# select * into outfile ‘/tmp/mysqlbak/it_student.txt‘ from it_student
默认报错:ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
解决方案:出现以上错误,是因为我们没有设置导出的目录,在my.cnf中,设置以上目录即可
vim my.cnf
secure-file-priv = ‘‘
chown -R mysql.mysql /tmp/mysqlbak
service mysql restart
恢复数据:
# 必须有一个表,因为它只保存了表中的内容
# load data local infile ‘/tmp/mysqlbak/it_student.txt‘ into table ‘数据表名称‘;

案例:把/etc/passwd文件,导入到以下表中:不要直接导入/etc/passwd,最好把/etc/passwd,最好把复制到/tmp/mysqlbak/password

CREATE TABLE `password` (
`uname` varchar(50) DEFAULT NULL,
`pass` char(2) DEFAULT NULL,
`uid` int(11) DEFAULT NULL,
`gid` int(11) DEFAULT NULL,
`comment` varchar(80) DEFAULT NULL,
`home` varchar(50) DEFAULT NULL,
`shell` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

--fields-terminated-by=‘:‘ # 设置分隔符
--lines-terminated-by=‘\n‘ # \n代表遇到换行符就认为是一条记录的结束

/tmp/mysqlbak/password一共有7列
root:x:0:0:备注:/root:/bin/bash

导入:mysqlimport dbname /path/file -p
案例:把/tmp/mysqlbak/password文件导入到password表中
mysqlimport db_itcast --fields-terminated-by=‘:‘ --lines-terminated-by=‘\n‘ /tmp/mysqlbak/password -p

mysql逻辑备份与还原工具mysqldump(代码片段)

原文:mysql逻辑备份与还原工具mysqldump(一)mysqldump介绍mysqldump是MySQL自带的逻辑备份工具,类似于Oracle的expdp/impdp,mysqldump备份十分灵活,可以在以下级别对数据库进行备份:实例下的所有数据库某个或某几个数据库某个数据库中的... 查看详情

mysql的备份还原(mysqldump)(代码片段)

MySQL的备份还原(mysqldump)MySQL的还原前提是要建立在,有完全备份和二进制日志开启的前提下,并且二进制日志文件和完全备份存放在与数据库文件不同的磁盘上,否则当磁盘发生损坏数据将无法进行恢复。开启二进制日志开启二... 查看详情

mysql逻辑备份与还原工具mysqldump(代码片段)

(一)mysqldump介绍mysqldump是MySQL自带的逻辑备份工具,类似于Oracle的expdp/impdp,mysqldump备份十分灵活,可以在以下级别对数据库进行备份:实例下的所有数据库某个或某几个数据库某个数据库中的表某个数据库中的表的某些记录mysqld... 查看详情

mysql备份与恢复之mysqldump工具(代码片段)

...正常运行2、备份方式逻辑备份:基于SQL语句的备份(1)mysqldump建库、建表、数据插入(2)基于二进制日志:数据库的所有变化类的操作(3)基于复制的备份:将二进制日志实时传送到另一台机器并且恢复物理备份(1)xtrabackup... 查看详情

mysql数据备份(mysqldump+mysqlhotcopy+xtrabackup)(代码片段)

...从复制)5.备份工具㈠社区版安装包中的备份工具①mysqldump(逻辑备份,只能全量备份)②mysqlhotcopy(物理备份工具)㈡企业版安装包中的备份工具㈢第三方备份工具①XtraBackup和innobackupex(物理备份)6.备份方法二... 查看详情

mysql数据库备份还原,并还原到最新状态(mysqldump)(代码片段)

启用二进制日志文件vim/etc/my.cnf配置文件位置及文件名根据实际情况确定sql_log_bin=ON|OFF:是否记录二进制日志,默认为ON//在需要的时候设置为OFFlog_bin=/PATH/BIN_LOG_FILE:指定二进制日志文件位置;通常单独存放到与数据库不同的机器中... 查看详情

mysql-数据备份与还原(代码片段)

...】获取学习路线图。文章目录前言一、数据备份1、使用mysqldump命令备份2、直接复制整个数据库目录3、使用mysqlhotcopy工具快速备份二 查看详情

使用mysqldump工具对mysql数据库实现完全备份和还原(代码片段)

1>启动数据库二进制日志查看sql_log_bin是否启用MariaDB[(none)]>showvariableslike‘sql_log_bin‘;+---------------+-------+|Variable_name|Value|+---------------+-------+|sql_log_bin|ON|+---------------+-------+1rowin 查看详情

mysql完整备份,还原(代码片段)

#备份mysqldump-uroot-p--all-databases>sqlfile.sql#恢复mysql–uroot–psource<path>/sqlfile.sql; 查看详情

mysql-数据备份与还原(代码片段)

...】获取学习路线图。文章目录前言一、数据备份1、使用mysqldump命令备份2、直接复制整个数据库目录3、使用mysqlhotcopy工具快速备份二、数据还原1、使用mysql命令还原2、直接复制到数据库目录三、数据库迁移1、相同版本的MySQL数... 查看详情

mysql如何备份与还原

...还原是比较重要的。重要的事简单做,今天介绍我们使用mysqldump和source命令来备份还原,分为Windows下和Linux下的MYSQL备份与还原操作。  一、Win32系统下MySQL的备份还原方法  备份:在“运行”中输入“cmd”,利用“cd/ProgramFi... 查看详情

mysql备份还原数据库数据库迁移(代码片段)

导出整个数据库mysqldump-hip-u用户名-p数据库名>copy.sql或导出一个表mysqldump-hip-u用户名-p数据库名表名>copy_users.sql导入数据库mysql-uroot-p//登陆mysql>use数据库名mysql>setnamesutf8//编码,不是UTF-8mysql>sourcefilepath\copy.sqlwarn 查看详情

mysqldump详解(代码片段)

...份和物理备份这两种方式。在数据迁移和备份恢复中使用mysqldump将数据生成sql进行保存是最常用的方式之一。本文将围绕着mysqldump的使用,工作原理,以及对于InnoDB和MyISAM两种不同引擎如何实现数据一致性这三个方面进行介绍。... 查看详情

怎么备份和还原mysql数据库

备份数据库使用mysqldump命令备份数据库还原数据库1、使用mysql命令还原数据库将game_backup.sql还原至game数据库:2、使用source命令还原数据库如果数据库过大,建议可以使用source命令参考技术AMySQL数据库备份与还原备份和恢复数据... 查看详情

我的wordpress网站数据的备份和还原(代码片段)

1、mysqldump备份并压缩sql文件mysql>mysqldump-h主机ip-u用户名-p密码(也可不输入)数据库名|gzip>压缩后文件位置/xxx_backupfile.sql.gz2、mysql直接用压缩文件恢复mysql>gunzip<xxx_backupfile.sql.gz|mysql-u用户名-p密码(也可不输入)数据库... 查看详情

数据备份与恢复(代码片段)

环境要求:1.逻辑备份工具mysqldump2.使用mysql恢复数据库**步骤一:使用mysqldump进行逻辑备份1)备份MySQL服务器上的所有库将所有的库备份为mysql-all.sql文件:[[email protected]~]#mysqldump-uroot-p--all-databases>/root/alldb.sqlEnterpassword:同... 查看详情

mysql数据库备份和还原

...据库备份与还原备份和恢复数据生成SQL脚本在控制台使用mysqldump命令可以用来生成指定数据库的脚本文本,但要注意,脚本文本中只包含数据库的内容,而不会存在创建数据库的语句!所以在恢复数据时,还需要自已手动创建一... 查看详情

[javaweb-mysql]数据库的备份和还原(代码片段)

...库的备份和还原1.命令行: *语法: *备份:mysqldump-u用户名-p密码数据库名称>保存的路径 *还原: 1.登录数据库 2.创建数据库 3.使用数据库 4.执行文件。source文件路径2.图形化工具:备份完成!!!现在我... 查看详情