MySQL中的备份和恢复

89 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情

数据备份类型:包括完全备份和部分备份。完全备份:顾名思义备份整个数据库;部分备份是备份一部分数据集,包括增量备份和差异备份,前者自上次备份以来的改变数据的备份;后者是自上次完全备份后改变数据的备份。

需要备份的东西包括:数据、二进制日志、Innodb事务日志、代码、服务器配置文件等。

备份工具策略:cp,tar物理备份、mysqldump备份、lvm2备份、xtrabackup备份等。

mysqldump是MySQL提供的一个非常有用的数据库备份工具。mysqldump命令执行时,可以将数据库备份成一个文本文件,该文件中实际上包含多个CREATEINSERT语句,使用这些语句可以重新创建表和插入数据。

  • 查出需要备份的表的结构,在文本文件中生成一个CREATE语句
  • 将表中的所有记录转换成一条INSERT语句。
  • 基本语法:mysqldump –u 用户名称 –h 主机名称 –p密码 待备份的数据库名称[tbname, [tbname...]]> 备份文件名 称.sql

一、备份所有数据库

使用--all-databases-A参数: mysqldump -uroot -pxxxxxx --all-databases > all_database.sql mysqldump -uroot -pxxxxxx -A > all_database.sql

mysqldump -u root -p --all-database > all.sql

mysqldump -h localhost -P3306 -uroot -p123456 --single-transaction data docid > F:\docid.sql

mysqlcmd = "/usr/bin/mysqldump -h " + HOST + " -P" + PORT + " -u" + USER + " -p" + PWD +
" --single-transaction " + DB + " " + TABLE + " > " + db_backup_dir + "/" + backup_file_name

二、备份部分数据库

使用--databases-B参数了,该参数后面跟数据库名称,多个数据库间用空格隔开。

1、备份部分数据库

基本语法: mysqldump –u user –h host –p --databases [数据库的名称1 [数据库的名称2...]] > 备份文件名 称.sql

mysqldump -u root -p --databases test student > teststudent.sql

不带--databases的备份语句在生成的.sql文件中没有create database和use 语句,需要手动建立数据库,可能导致数据库名与之前不一致

2、备份数据库的部分表

基本语法:mysqldump –u user –h host –p 数据库的名称 [表名1 [表名2...]] > 备份文件名称.sql

mysqldump -u root -p test a b c > abc.sql

三、数据恢复

mysqldump的恢复也很简单,将备份作为输入执行即可,具体语法如下

mysql -h localhost -P3306 -uroot -p123456 data < F:\xxx.sql

restorecmd = "/usr/bin/mysql -h " + HOST + " -P" + PORT + " -u" + USER + " -p" + PWD + " " + \DB + " < " + db_backup_dir + "/" + backup_file_name

注意,将备份恢复后数据并不完整,还需要将备份后执行的日志进行重做,语法如下: mysqlbinlog binlog-file | mysql -uroot -p

四、mysqlbinlog日志恢复

1、查看log_bin是否开启

show variables like 'log_bin';

image.png

2、查看binlog文件列表

show binary logs;

image.png

3、查看当前logbin文件的位置戳

show master status;

image.png

4、将数据库恢复到位置戳数据

先生成sql文件: mysqlbinlog --start-position=489 --stop-position=696 c:/programs/files/mysql/server/data/mysql-bin.000002 > c:/programs/files/mysql/server/data/489_696.sql

再加载sql文件:source c:/programs/files/mysql/server/data/489_696.sql

5、查看binlog文件的内容

show binlog events in 'mysql-bin.000002'

image.png