数据库备份的相关详解(mydumper)

摘要:
数据库备份是将数据库中的数据和结构复制到另一个位置,以便在需要时可以恢复数据。MySQL自带了备份工具mysqldump,可以备份整个数据库或特定的表。除此之外,还有一些其他的备份工具,例如Percona XtraBackup和MySQL Enterprise Backup等。
在执行任何数据库备份操作之前,请仔细考虑备份策略,并测试备份以确保其可用性和可恢复性。

数据资料:

创建表语句
– 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)
);
– 2.创建score表。
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);

一、使用mydumper备份数据库
1.创建用户backup赋予权限(给他所需要的一些权限)
create user 'backup'@'localhost' identified by '123456';
grant select,lock tables,show view,trigger,event,reload on *.* to 'backup'@'localhost';
2.创建一个备份文件夹
mkdir -p /mysqlbak/school/
3.进行数据库备份
mydumper -u backup -p 123456 -B school -o /mysqlbak/school/
-B参数指定要备份的数据库名称为school,-o参数指定备份输出目录
4.查看数据是否备份成功,进行一些抽查
image.png
二、使用mydumper恢复数据库
1.先删除原有school数据库
[root@server school]# mysql -uroot -p123456 -e 'drop database school' 
2.使用myloader 工具将备份数据还原到数据库中
[root@server /]# myloader -u root -p 123456 -d /mysqlbak/school/ -o -B school
-- -u 参数指定要连接到 MySQL 的用户名,
-- -p 参数指定 MySQL 密码,-d 参数指定包含备份文件的目录,
-- -o 参数告诉 myloader 覆盖目标数据库中的任何现有数据,
-- -B 参数指定要将备份数据还原到的目标数据库名称。
三、备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库
[root@server /]# ls -l /mysqlbak/school/school_backup.sql 

image.png

四、直接将MySQL数据库压缩备份

要将 MySQL 数据库进行压缩备份,可以使用 mysqldump 命令备份数据库,并使用 Linux 自带的 gzip 命令将备份文件进行压缩。

[root@server /]# mysqldump -uroot -p123456 school | gzip >/mysqlbak/school/school_backup.sql.gz
-- gunzip 命令用于解压缩备份文件,
-- -c 参数指示 gunzip 命令将解压缩后的数据输出到标准输出,
-- | 将解压缩后的备份数据通过管道传输给 mysql 命令
恢复的话可以使用:
gunzip -c /mysqlbak/school/school_backup.sql.gz | mysql -uroot -p123456 school

image.png

五、备份MySQL数据库某个(些)表
[root@server /]# mysqldump -uroot -p school student > /mysqlbak/school/student_backup.sql
-- 可以使用以下命令恢复备份数据
mysql -u root -p123456 school < /mysqlbak/school/student_backup.sql

image.png

六、同时备份多个MySQL数据库
mysqldump -uroot -p123456 --databases school worker > /mysqlbak/school/school_worker_backup.sql
-- databases 参数指定要备份的多个数据库名称,多个数据库名称之间使用空格分隔,
-- > 将备份数据输出到 /mysqlbak/school_worker_backup.sql 文件中

-- 可以使用以下命令恢复
mysql -u root -p123456 < /mysqlbak/school_worker_backup.sql

image.png

七、仅备份数据库结构
[root@server /]# mysqldump -uroot -p123456 --no-data school > /mysqlbak/school/school_str_ucture.sql
--  --no-data 参数将只备份数据库结构
可以使用以下恢复:
mysql -u root -p123456 school < /mysqlbak/school/school_str_cture.sql

image.png

八、备份服务器上所有数据库
[root@server /]# mysqldump -uroot -p123456 --all-databases > /mysqlbak/school/all_databases.sql
-- --all-databases 参数将备份服务器上所有的数据库
恢复命令:mysql -u root -p123456 < /mysqlbak/all_databases.sql

image.png

九、还原MySQL数据库
[root@server /]# mysqldump -uroot -p123456 -e 'drop database school'
[root@server /]# myloader -u root -p 123456 -d /mysqlbak/school/ -B school
-- -d 参数指定备份文件所在的目录,
-- -B 参数指定要恢复的数据库名称。
十、还原压缩的数据库

zcate用于将压缩文件内容输出到终端或文件中,与 cat 命令类似,但支持压缩文件。
zcat 命令还支持将压缩文件的内容输出到文件中。例如,要将压缩的备份文件解压缩并输出到 **/mysqlbak/school/school_backup.sql **文件中,可以使用以下命令:

zcat /mysqlbak/school/school_backup.sql.gz > /mysqlbak/school/school_backup.sql
[root@server /]# zcat /mysqlbak/school/school_backup.sql.gz | mysql -uroot -p123456 -e 'use school'
-- 也可以使用恢复数据库
gunzip /mysqlbak/school/school_backup.sql.gz
mysql -u root -p123456 school < /mysqlbak/school/school_backup.sql
十一、使用xtrabackup 备份数据库
-- 完全备份
[root@server ~]# innobackupex -uroot -p123456 --no-timestamp /backup/
-- --no-timestamp参数指定备份文件名不包含时间戳,而是使用默认的命名方式
-- 增量备份
-- 必须要有未压缩的全量备份文件目录,先全量再增量,此次使用前面全量备份
[root@server ~]# innobackupex --incremental -uroot -p123456 /backup/
-- 第二次增量备份
[root@server ~]# innobackupex --incremental -uroot -p123456 /backup/ --incremental-basedir=/backup/2023-07-29_13-15-51/
--incremental参数指定执行增量备份
-- incremental-basedir参数指定增量备份的基于目录,也就是上一次备份的目录。

image.png
image.png

十二、在另外的数据库服务器上还原xtrabackup 备份
1.首先关闭另一台数据库
[root@server /]# systemctl stop mysqld
2.将将数据库的备份文件传输到另一台服务器中
[root@server /]# [root@server /]# scp -r /backup/2023-07-29_13-15-51/ [email protected]:/backup/school/
3.准备my.cnf文件

在新的MySQL服务器上创建一个my.cnf文件,该文件应该与原始MySQL服务器上的my.cnf文件相同,以确保还原的MySQL服务器具有相同的配置。

4.停止MySQL服务
[root@node1 ~]# systemctl stop mysqd

在新的MySQL服务器上停止MySQL服务,以便还原工具可以访问MySQL数据库文件。

5.使用xtrabackup还原备份

在新的MySQL服务器上使用xtrabackup还原备份

[root@node1 ~]# [root@node1 ~]# innobackupex --copy-back /backup/school/2023-07-29_13-15-51/

--copy-back参数指定将备份文件还原到MySQL数据目录中,
-- /backup/school/2023-07-29_13-15-51/指定备份存储目录的路径。

image.png

6.更改mysql数据目录的所有权限
[root@node1 ~]# chown -R mysql:mysql /var/lib/mysql
7.启动mysql,查看数据是否恢复
[root@node1 ~]# systemctl start mysqld
[root@node1 ~]# mysql -uroot -p
mysql> show databases;
mysql> use school
mysql> show tables;

image.png

猜你喜欢

转载自blog.csdn.net/m0_50816276/article/details/131994814