数据库运维之数据库备份的多种方法

数据库备份,数据库为school,素材如下
数据库运维之数据库备份的多种方法_第1张图片

1.创建student和score表

CREATE TABLE student (

id INT(10) NOT NULL UNIQUE PRIMARY KEY ,

name VARCHAR(20) NOT NULL ,

sex VARCHAR(4) ,

birth YEAR,

department VARCHAR(20) ,

address VARCHAR(50)

);

创建score表。SQL代码如下:

CREATE TABLE score (

id INT(10) NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT ,

stu_id INT(10) NOT NULL ,

c_name VARCHAR(20) ,

grade INT(10)

);

2.为student表和score表增加记录

向student表插入记录的INSERT语句如下:

INSERT INTO student VALUES( 901,‘张老大’, ‘男’,1985,‘计算机系’, ‘北京市海淀区’);

INSERT INTO student VALUES( 902,‘张老二’, ‘男’,1986,‘中文系’, ‘北京市昌平区’);

INSERT INTO student VALUES( 903,‘张三’, ‘女’,1990,‘中文系’, ‘湖南省永州市’);

INSERT INTO student VALUES( 904,‘李四’, ‘男’,1990,‘英语系’, ‘辽宁省阜新市’);

INSERT INTO student VALUES( 905,‘王五’, ‘女’,1991,‘英语系’, ‘福建省厦门市’);

INSERT INTO student VALUES( 906,‘王六’, ‘男’,1988,‘计算机系’, ‘湖南省衡阳市’);

向score表插入记录的INSERT语句如下:

INSERT INTO score VALUES(NULL,901, ‘计算机’,98);

INSERT INTO score VALUES(NULL,901, ‘英语’, 80);

INSERT INTO score VALUES(NULL,902, ‘计算机’,65);

INSERT INTO score VALUES(NULL,902, ‘中文’,88);

INSERT INTO score VALUES(NULL,903, ‘中文’,95);

INSERT INTO score VALUES(NULL,904, ‘计算机’,70);

INSERT INTO score VALUES(NULL,904, ‘英语’,92);

INSERT INTO score VALUES(NULL,905, ‘英语’,94);

INSERT INTO score VALUES(NULL,906, ‘计算机’,90);

INSERT INTO score VALUES(NULL,906, ‘英语’,85);
数据库运维之数据库备份的多种方法_第2张图片

3.备份数据库school到/backup目录

mysqldump -uroot -p'123456' --default-character-set=utf8 -B school > /backup/school.$(date +%F).sql

在这里插入图片描述

4.备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库
该题用:mysqldump备份数据库(完全备份+增加备份)方法

完全备份:

mysqldump -uroot -p123456 -B school > /tmp/school.$(date +%F).sql

在这里插入图片描述
修改数据库(删除表score)

drop table score;

在这里插入图片描述

增量备份:
前提: 1)my.cnf,是要开启MySQL log-bin日志功能,重启MySQL log_bin =
/data/mysql/data/mysql-bin
2)存在一个完全备份,生产环境一般凌晨某个时刻进行全备

1、检查全备后的所有binlog
# ls -lrt /usr/local/mysql/data/mysql-bin.*
2、立即刷新并备份出binlog
mysqladmin -uroot -p flush-logs
cp /usr/local/mysql/data/mysql-bin.0000014 /server/backup/
提示:根据时间点及前一个binlog可以知道发现问题时刻前binlog日志为mysql-bin.0000014
3、恢复binlog生成sql语句
mysqlbinlog mysql-bin.0000014 > bin.log

数据库运维之数据库备份的多种方法_第3张图片
查看文件,截取数据变动的时间

mysqlbinlog  --base64-output=DECODE-ROWS -vv mysql-bin.000014

数据库运维之数据库备份的多种方法_第4张图片
基于时间的增量备份:

[root@www data]# mysqlbinlog mysql-bin.000014 --start-datetime='2023-03-23 22:53:07' --stop-datetime='2023-03-23 22:53:43' -r time.sql

再次新建score表
数据库运维之数据库备份的多种方法_第5张图片

恢复增量备份的数据库内容,发现score表自动被删除

[root@www data]# mysql -uroot -p123456 < time.sql

数据库运维之数据库备份的多种方法_第6张图片

5.直接将MySQL数据库压缩备份

[root@www data]# tar zcf /tmp/databases-$(date +%F).tar.gz *

在这里插入图片描述

6.备份MySQL数据库某个(些)表。此例备份student表

mysqldump -u root -p school student > /backup/table/school-student

在这里插入图片描述

7.同时备份多个MySQL数据库(其他数据库素材自行准备)

除了school数据库外,我额外创建了it和company数据库

[root@www data]# mysqldump -u root -p123456 -B it company > /tmp/it-and-company

在这里插入图片描述
8.仅仅备份数据库结构

-d只备份库结构,不包含数据内容

[root@www data]# mysqldump -u root -p123456 -B -d school > /tmp/school-structure.sql

在这里插入图片描述

9.备份服务器上所有数据库

[root@www data]# mysqldump -u root -p123456 --all-databases > /tmp/all-databases.$(date +%F).sql

在这里插入图片描述

10.还原MySQL数据库

11.还原压缩的MySQL数据库

删除/usr/local/mysql/data/下的所有文件,模拟数据库损坏
数据库运维之数据库备份的多种方法_第7张图片
将第五题所做的备份解压,实现数据库的还原

tar xf /tmp/databases-2023-03-22.tar.gz -C ./

数据库运维之数据库备份的多种方法_第8张图片

12.使用xtrabackup 备份数据库
innobackupex命令安装

[root@www ~]# yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
[root@www ~]# yum -y  install percona-xtrabackup-24  
[root@www ~]# yum -y  install qpress  ##innobackupex支持压缩导出,这里安装压缩工具
 
[root@www ~]# innobackupex -version  ###如果出现如下提示表示安装成功,我这里2.4.15
xtrabackup: recognized server arguments: --server-id=11 --datadir=/data/mysql_data --tmpdir=/tmp --log_bin=bin.log --innodb_page_size=8192 --innodb_buffer_pool_size=2G --innodb_io_capacity=4000 --innodb_flush_method=O_DIRECT --innodb_undo_tablespaces=3 --innodb_log_file_size=128M --innodb_log_buffer_size=16777216 
innobackupex version 2.4.15 Linux (x86_64) (revision id: 544842a)

使用xtrabackup 备份数据库

innobackupex --user=root --password=123456 --socket=/tmp/mysql.sock /backup/db/databases-xtrabackup.sql

数据库运维之数据库备份的多种方法_第9张图片
在这里插入图片描述

13.在另外的数据库服务器上还原xtrabackup 备份

新开一台数据库服务器192.168.15.133(已经有mysql环境)
将备份的数据库文件复制到该台服务器上

scp -r /backup/db/databases-xtrabackup.sql/* 192.168.15.133:/backup/db/

查看该台服务器上的mysql数据库
数据库运维之数据库备份的多种方法_第10张图片
可以看出该台服务器相较于前一台服务器没有it和school数据库。
开始备份:

完全备份中恢复数据 # innobackupex --apply-log /backup/db/databases-xtrabackup.sql/2023-03-22_23-52-02
停止数据库 # systemctl stop mysqld
还原数据库到默认目录 innobackupex --copy-back /backup/db/databases-xtrabackup.sql/2023-03-22_23-52-02
修改数据文件属主属组
# chown -R mysql.mysql /usr/local/mysql/data/
启动数据库 # systemctl start mysql

14.使用mydumper备份数据库

 mydumper -u root -p 123456 -B school -S /tmp/mysql.sock -o /backup/db/school

数据库运维之数据库备份的多种方法_第11张图片

15.使用mydumper恢复数据库
模拟数据库被破坏:
数据库运维之数据库备份的多种方法_第12张图片
恢复数据库:

myloader -u root -p 123456 -S /tmp/mysql.sock -d /backup/db/school/ -B school

数据库运维之数据库备份的多种方法_第13张图片

你可能感兴趣的:(数据库,运维,sql)