mysqldump + binlog 备份

一、mysqldump + binlog

1、mysqldump

mysqldump 是一个用于 MySQL 数据库的命令行工具,用于备份数据库中的数据和结构。

(1) 语法:

mysqldump (-h + 服务器地址) -u用户名 -p密码 数据库名 > 备份文件.sql

-h + 服务器地址一般不写,默认对本机进行操作

若要备份所有的库,可以把数据库名写成 all

> 备份文件.sql :输出重定向,把备份的内容写入到一个文件中

(2) 备份示例:

① 先准备一个测试库和测试表

mysqldump + binlog 备份_第1张图片

② 执行备份

mysqldump  -uroot  --all-databases  --single-transaction  --master-data=2  --flush-logs  > /backup/`date +%F-%H`-mysql-all.sql

--single-transaction:在数据库在备份时不会受到数据变化(插入、更新、删除)的影响,保持数据一致性

--master-data=2:记录 binlog 的日志位置和文件名并追加到备份文件中

flush-logs: 在进行数据库备份之前,执行 flush-logs 可以创建一个新的二进制日志文件,以便将备份的和之前的日志文件分离开

`date +%F-%H`:日期格式化

③ 观察备份文件

vim /backup/2023-08-20-09-mysql-all.sql

mysql 锁机制:在备份文件时会锁定文件(去掉写入权限,只保留读取权限)

mysqldump + binlog 备份_第2张图片

被 mysqldump 截断的二进制日志文件:

MASTER_LOG_POS=245 表示服务器在二进制日志文件中开始复制的位置

④ 备份后变更数据

(3) 备份恢复

① 先备份二进制日志文件

cp  /var/lib/mysql/*bin*  /tmp/mysql.log/

② 停止数据库并清理环境

systemctl  stop  mariadb

rm  -rf  /var/lib/mysql/*

③ 启动数据库并恢复数据

systemctl  start  mariadb

mysql  -uroot  < /backup/2023-08-20-09-mysql-all.sql

查看恢复后的数据:

mysqldump + binlog 备份_第3张图片

通过查看数据可以发现,mysqldump 只能够恢复备份点之前的数据,而备份点到灾难点之间新增的数据则需要依靠 binlog 日志来恢复。

2、binlog 日志恢复

(1) 观察二进制日志截取记录

-- CHANGE MASTER TO MASTER_LOG_FILE='bin-log.000003', MASTER_LOG_POS=245;

bin-log.000003 之前的日志文件已经备份过了,从 245 之后的是新内容

(2) 二进制日志恢复

mysqlbinlog /tmp/mysql.log/bin-log.000003 --start-position=245 | mysql -uroot

/tmp/mysql.log/bin-log.000003:备份之后的二进制日志文件的位置

再次查看数据可以发现从备份点到灾难点之间新增的数据也恢复了:

mysqldump + binlog 备份_第4张图片

二、记录的导入和导出

1、记录导出

(1) 注意导出目录的权限

vim /etc/my.cnf

mysqldump + binlog 备份_第5张图片

修改后需要重启数据库

修改导出目录的属主和属组:chown  mysql.mysql /backup

(2) select ... into outfile 导出文本文件

select * from test.t1 into outfile '/backup/test.t1.txt'

select * :全部文件

test.t1:库名.表名

'/backup/test.t1.txt':导出的文件位置

mysqldump + binlog 备份_第6张图片

以 xml 形式导出:

mysql -uroot --xml -e 'select * from test.t1' > /backup/test.2.txt

mysqldump + binlog 备份_第7张图片

2、记录导入

(1) 清除表格内容

delete from 表名;

!注意不要用 drop,drop 会把整个表的结构都清除,而 delete 只是清除表格中的内容。

mysqldump + binlog 备份_第8张图片

(2) load data infile 导入文本文件

load  data  infile  '/backup/test.t1.txt' into table test.t1;

在文本文件中添加数据,也可以成功导入回数据库

mysqldump + binlog 备份_第9张图片

你可能感兴趣的:(mysql,adb,mariadb,mysql,linux,云计算)