MySQL备份和恢复

目录

1.数据库备份的分类

1.1 数据备份的重要性

1.2 数据库备份分类 

1.3 常见的备份方法

2.MySQL完全备份与恢复

2.1 MySQL完全备份

2.2 数据库完全备份分类

2.3 MySQL物理冷备份及恢复

2.4 数据迁移DST

2.5 mysqldump进行逻辑备份

2.5.1 mysqldump备份数据库

2.5.2 mysqldump备份数据表

2.6 数据库备份总结

3. 恢复数据库

3.1 使用source命令恢复数据库

3.2 使用mysql命令恢复数据库

3.2.1 重定向方式恢复数据库

3.3 恢复表操作

3.4 完全恢复数据库总结

4.MySQL增量备份与恢复

4.1 二进制日志文件的内容


1.数据库备份的分类

1.1 数据备份的重要性

 

1.2 数据库备份分类 

数据库备份 

物理备份:直接对数据库的物理文件(数据文件、日志文件等)进行备份
逻辑备份:对数据库对象(库、表)的数据以SQL语句的形式导出进行备份 

 

 备份策略

完全备份:每次备份都备份完整的库或表数据
差异备份:只备份上一次完全备份后的更新数据
增量备份:每次备份只备份上一次完全备份或增量备份后的更新数据 

完全备份,差异备份,增量备份区别 

 备份工具

           tar压缩打包(完全备份,物理冷备)    
          mysqldump(完全备份,逻辑热备)  
          mysqlhotcopy(完全备份,逻辑热备,仅支持MyISAM和ARCHIVE引擎表)     
          二进制日志(增量备份)     
          PXB XtraBackup innobackupex(完全备份、增量备份,物理热备) 

1.3 常见的备份方法

物理冷备

 先关闭数据库,使用 tar 命令压缩打包备份数据库的数据目录和文件 mysql/data/

专用备份工具mysqldump或mysqlhotcopy

  • mysqldump常用的逻辑备份工具

  • mysqlhotcopy仅拥有备份MylSAM和ARCHIVE表

启用二进制日志进行增量备份

第三方工具备份


          PXB XtraBackup innobackupex(完全备份、增量备份,物理热备) 

  • 进行增量备份,需要刷新二进制
     

2.MySQL完全备份与恢复

2.1 MySQL完全备份

 

2.2 数据库完全备份分类

物理冷备份与恢复

 先关闭数据库使用 tar 命令压缩打包备份数据库的数据目录和文件 mysql/data/

tar zcvf  归档文件  原数据文件/目录     gzip
tar  jcvf  归档文件  原数据文件/目录  bzip2
tar  Jcvf  归档文件  原数据文件/目录  xz

2.3 MySQL物理冷备份及恢复

 物理冷备份

先关闭数据库,然后打包备份相关数据库文件;

systemctl stop mysqld
mkdir /opt/backup    #将数据库备份文件保存到/opt/backup目录下
cd /usr/local/mysql
tar zcf /opt/backup/mysql_data-$(date +%F).tar.gz data/
cd /opt/backup/
tar tf mysql_data-2024-06-19.tar.gz    #查看tar压缩包里的数据文件
tar xf mysql_data-2024-06-19.tar.gz    #解压缩tar压缩包里的数据文件

 

恢复数据库

上面备份的数据库文件数据mysql_data-2024-06-19.tar.gz,作为远端异地已经备份好的数据库文件(IP:192.168.80.50),然后加载到另一台需要恢复的数据库主机(IP:192.168.80.15)。 

###远端已备份数据文件主机(IP:192.168.80.50)
cd  /opt/backup
scp mysql_data-2024-06-19.tar.gz 192.168.80.50:/opt

###需要恢复数据库文件主机(IP:192.168.80.15)
systemctl stop mysqld
cd /opt
tar xf mysql_data-2024-06-19.tar.gz 
mv /usr/local/mysql/data /usr/local/mysql/data.bak    #将原有的数据库文件移走
mv /opt/data/ /usr/local/mysql/
systemctl restart mysqld   #重新启动数据库服务
mysql -uroot -pabc123    #此数据库密码为之前备份数据库的密码


 

2.4 数据迁移DST

DTS (Data Transmission Service,数据传输服务),用于在关系型数据库、NoSQL数据库、数据仓库之间迁移数据。可以使用DTS将数据迁移至阿里云,也可以在阿里云和本地数据系统之间做数据迁移 

相比传统的数据传输工具,DTS的优势:

(1) 传输过程中保证高稳定性
(2) 支持多种数据传输方式,包括:数据迁移、数据集成、数据同步、数据订阅。
(3) 支持各种数据源直接的数据迁移。(如MySQL,redis等)
(4) 支持多种数据库引擎作为源和目标
(5) 支持断点续传:避免了硬件和网络故障导致的中断
(6) 支持定时任务

数据迁移总结:

体量小: 物理冷备 打包备份+恢复
体量中等: DTS
体量超大: 数据魔方

2.5 mysqldump进行逻辑备份

2.5.1 mysqldump备份数据库

###将数据库gzy的数据文件备份到/opt/backup目录下,并重命名为kx.sql
mysqldump -uroot -p1999 --databases mydb > /opt/backup/kx.sql  
vim /opt/backup//kx.sql 

###同时备份gzy和mysql两个数据库文件
mysqldump -uroot -p1999 --databases kx mysql > /opt/backup/mysql_kx.sql

 

 

 备份所有数据库文件:
mysqldump -u用户名 -p密码 --all-databases > 指定路径的绝对路径/all.sql

###备份所有数据库中的数据库文件数据
mysqldump -uroot -p1999 --all-databases > /opt/backup/all-databases.sql

###过滤出备份文件中,不以“--”和"/*"开头,并且以“CREATE DATABASE”开头的数据行
cat all-databases.sql | grep -v "^--" | grep -v "^/\*" | grep "^CREATE DATABASE"

2.5.2 mysqldump备份数据表

备份指定数据库中的表数据文件:
mysqldump -u用户名 -p密码 数据库名 表名 > 指定路径的绝对路径/数据库名_表名.sql
 

###备份mydb数据库中kx表数据内容
mysqldump -uroot -p1999 mydb kx > /opt/backup/mydb_kx.sql
vim /opt/backup/mydb_kx.sql

 

备份指定数据库中的所有表数据文件:
mysqldump -u用户名 -p密码 数据库名 > 指定路径的绝对路径/数据库名_all.sql
 

###备份gzy数据库中的所有表数据内容,会包含mydb数据库中的所有表信息,但不包括创建数据库的操作
mysqldump -uroot -p1999 mydb > /opt/backup/kx_all.sql
vim /opt/backup/kx_all.sql

2.6 数据库备份总结

完全备份

物理冷备: 先关闭mysqld服务,使用tar命令打包备份数据库的数据目录/文件 /usr/local/mysql/data/

mysqldump、xtrabackup等工具来逻辑备份

###备份单库或多库
mysqldump -uXXX -pXXX --databases 库1 [库2] ... >  XXX.sql  
###备份所有的库   
mysqldump -uXXX -pXXX --all-databases > XXX.sql   
###备份库中的一个或多个表数据(不包含创建库的操作)             
mysqldump -uXXX -pXXX 库名 表1 表2 ... > XXX.sql   
###备份库中的所有表数据(不包含创建库的操作)            
mysqldump -uXXX -pXXX 库名 > XXX.sql                           

3. 恢复数据库

3.1 使用source命令恢复数据库

3.1 使用source命令恢复数据库的备份文件

使用source命令恢复数据库的备份文件

###查看mydb数据库中的kx表的数据文件信息(免交互登录数据库的方式)
mysql -uroot -p1999 -e "select * from mydb.kx;"   
###删除指定数据库mydb
mysql -uroot -p1999 -e "drop database kx;"

###登录数据库
mysql -uroot -p1999
###使用source命令恢复指定数据库文件
source /opt/backup/kx.sql;

 

注意: 在使用数据库备份文件恢复具体数据库时,可以直接使用source命令直接恢复数据库;但是在使用指定指定数据库中的数据表备份文件恢复数据时,需要先创建数据库,然后切换到新创建的数据库中,使用source命令恢复数据文件。

mysql -uroot -p1999 -e "drop database mydb;"

###登录数据库
mysql -uroot -p1999 
###先创建数据库kxxx,然后切换到新创建的数据库kxxx中
create database kxxx;
use kxxx;
###恢复数据库中的数据表文件数据
source /opt/backup/mydb_kx.sql;
select * from mydb;

 

3.2 使用mysql命令恢复数据库

 

3.2.1 重定向方式恢复数据库

使用mysql重定向的方式恢复指定数据库文件;

mysql -uroot -p1999 -e "drop database kx;"
###使用mysql重定向的方式恢复指定数据库文件
mysql -uroot -p1999 < /opt/backup/mydb_kx.sql
mysql -uroot -p1999 -e "show databases;"

免交互方式,使用指定数据库中的数据表文件恢复;

mysql -uroot -p111 -e "drop database kx;"
mysql -uroot -p111 -e "show kx;"
mysql -uroot -p111 < /opt/backup/mydb_kx.sql
###将已备份好的数据文件恢复到指定数据库kx中
mysql -uroot -p111 kgc < /opt/backup/mydb_kx.sql
mysql -uroot -p111 -e "select * from mydb.kx;"

3.3 恢复表操作

用shell脚本自动执行备份操作

###每周二的凌晨十二点半,定时自动执行脚本备份所有的数据库文件数据
30  0  * * 2 xxx/mysqldump-uxx -pxxx --all-databases > /opt/backup/XXX.sql

3.4 完全恢复数据库总结

完全恢复

先登录到mysql,再执行 source XXX.sql(注:如果XXX.sql是表数据文件那么需要先自行创建库并use切换库)

mysql -uXXX -pXXX [库名] < XXX.sql
cat XXX.sql | mysql -uXXX -pXXX [库名]

4.MySQL增量备份与恢复

4.1 二进制日志文件的内容

mysql -uroot -p1999
###模糊查询通用日志的相关信息
show variables like 'general%';
###模糊查询二进制日志的相关信息
show variables like 'log_bin%';
###模糊查询慢查询日志的相关信息
show variables like '%slow%';

 

vim /etc/my.cnf
------------在“server-id”行下面添加mysql数据库的日志信息---------
server-id = 1
---------------------------------------------------------------
#错误日志
log-error=/usr/local/mysql/data/mysql_error.log
#通用查询日志
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log
#二进制日志
log-bin=mysql-bin
#慢查询日志
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=2

systemctl restart mysqld
mysql -uroot -p1999

 

刷新生成二进制日志文件的两种方式:

(1)重启数据库服务:systemctl restart mysqld;

(2)flush-logs命令刷新:mysqladmin -uroot -p111 flush-logs;

注意: 新刷新出来的数据日志文件,实际是个空文件,因此应该备份保存的是新刷新出来的前一个序列号的日志文件。

二进制日志(binlog)有3种不同的记录格式:

STATEMENT(基于SQL语句):默认格式是STATEMENT。该方式记录语句快,占用内存空间少。但高并发情况下会导致记录日志顺序紊乱,造成恢复数据时发生偏差。
ROW(基于行):基于数据内容行进行记录,不仅记录执行的命令语句,还会记录命令影响的相关数据行。
MIXED(混合模式):高并发情况下ROW方式进行记录,一般情况下采用STATEMENT方式进行记录

vim /etc/my.cnf
#错误日志
log-error=/usr/local/mysql/data/mysql_error.log
#通用查询日志
general_log=ON
general_log_file=/usr/local/mysql/data/mysql_general.log
#二进制日志
log-bin=mysql-bin
#可选,指定二进制日志(binlog)的记录格式为ROW
binlog_format = ROW
#慢查询日志
slow_query_log=ON
slow_query_log_file=/usr/local/mysql/data/mysql_slow_query.log
long_query_time=2

systemctl restart mysqld

###转换格式,查看指定序列号的二进制数据日志文件
mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000001
--no-defaults:不使用默认格式进行查看
--base64-output=decode-rows:使用base64密码格式进行转换,-rows:按行进行输出
-v:显示详细输出过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值