MySQL的备份与还原
1、MySQL的备份说明
热备:
- 在数据库正在运行下进行备份,备份期间,数据库读写均可以正常进行;
温备:
- 数据库可用性弱于热备,备份期间,数据库只能进行读操作,不能进行写操作。
冷备:
- 在备份期间,应用的读写操作不可进行。
2、基于mysqldump命令进行数据备份
#备份一个库
[root@Node1 ~]# mysqldump -uroot -p'123456' --databases LJW > /root/LJW.sql#这一行不是报错,而是警告,说你的密码暴露在命令行上
mysqldump: [Warning] Using a password on the command line interface can be insecure.#备份多个库
[root@Node1 ~]# mysqldump -uroot -p'123456' --databases LJW WEB > /root/LJW-WEB.sql#备份所有的数据库
[root@Node1 ~]# mysqldump -uroot -p'123456' --all-databases> /root/all.sql
mysqldump: [Warning] Using a password on the command line interface can be insecure.#单独备份一个表格-->备份WEB.t1表格
[root@Node1 ~]# mysqldump -uroot -p'123456' WEB t1 > /root/t1.sql
数据还原操作
- 登陆mysql
- 使用命令source 接上系统路径
#登陆mysql-->进行删除操作
[root@Node1 ~]# mysql -uroot -p'123456'#查看一下有什么数据库
mysql> show databases;#删除LJW和WEB数据库
mysql> drop database LJW;
mysql> drop database WEB;
Query OK, 1 row affected (0.01 sec)#现在已经没有了LJW和WEB库;那么进行还原
mysql> source /root/LJW-WEB.sql#再次查看发现完全没有问题
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| LCQ |
| LJW |
| WEB |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
7 rows in set (0.01 sec)
- 也可以通过mysql的命令来进行还原操作
- 必须存在库,只用还原库中的表格结构以及数据,如果数据库被删掉就无法自动创建出来
#登陆mysql-->进行删除操作
[root@Node1 ~]# mysql -uroot -p'123456'#查看一下有什么数据库
mysql> show databases;#删除LJW和WEB数据库
mysql> drop database LJW;
mysql> drop database WEB;
Query OK, 1 row affected (0.01 sec)#使用mysql进行还原
[root@Node1 ~]# mysql -uroot -p'123456' < /root/LJW-WEB.sql#进入数据库查看
[root@Node1 ~]# mysql -uroot -p'123456' < /root/LJW-WEB.sql
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| LCQ |
| LJW |
| WEB |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
7 rows in set (0.00 sec)
3、数据还原–>通过binlog的方式进行
- 这里需要注意一个点,需要提前知道binlog号
- 配置文件中也需要注意查看是否有bin-log的配置
- binlog是默认开启的,日志的操作信息在/var/lib/mysql/目录下
#登陆一个mysql
[root@Node1 ~]# mysql -uroot -p'123456'#刷新一个binlog
mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)#然后再次查看一下binlog号
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 157 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)#创建一下表格
mysql> use LJW;
mysql> create table liangjiawei(id varchar(10),sex varchar(3),name varchar(20));
Query OK, 0 rows affected (0.00 sec)#再次刷新一下binlog日志
mysql> flush logs;
Query OK, 0 rows affected (0.01 sec)#查看一下binlog号
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 | 157 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)#把004的binlog号归档
[root@Node1 ~]# mysqlbinlog --no-defaults --base64-output=decode-rows -v /var/lib/mysql/mysql-bin.000004#然后进行删除数据
[root@Node1 ~]# mysql -uroot -p'123456'
..........
mysql> drop table LJW.liangjiawei;
Query OK, 0 rows affected (0.01 sec)#然后查看是否删除了
mysql> use LJW;
mysql> show tables;
+---------------+
| Tables_in_LJW |
+---------------+
| t1 |
+---------------+
1 row in set (0.00 sec)#然后进行还原操作
[root@Node1 ~]# mysqlbinlog --no-defaults /var/lib/mysql/mysql-bin.000004 | mysql -uroot -p123456
4、Xtrabackup备份工具
Xtrabackup是Percona团队开发的用于MySQL数据库物理热备份的开源备份工具,
特点:
- 备份速度快、
- 支持备份数据压缩、
- 自动校验备份数据、
- 支持流式输出、
- 备份过程中几乎不影响业务等特点
- 是目前各个云厂商普遍使用的MySQL备份工具。
下载地址:
- https://www.percona.com/downloads
具体操作如下:
#准备好xtrabackup的软件包
[root@Node1 ~]# ls percona-xtrabackup-80-8.0.33-27.1.el7.x86_64.rpm
percona-xtrabackup-80-8.0.33-27.1.el7.x86_64.rpm#直接rpm安装
[root@Node1 ~]# rpm -ivh --nodeps --force percona-xtrabackup-80-8.0.33-27.1.el7.x86_64.rpm #查看是否安装成功
[root@Node1 ~]# echo $?
0#检查一下是否成功安装
[root@Node1 ~]# xtrabackup -v
2023-08-24T10:50:37.739035+08:00 0 [Note] [MY-011825] [Xtrabackup] recognized server arguments: --datadir=/var/lib/mysql
xtrabackup version 8.0.33-28 based on MySQL server 8.0.33 Linux (x86_64) (revision id: b3a3c3dd)#创建一个data目录
[root@Node1 ~]# mkdir /data#对数据进行备份
[root@Node1 ~]# xtrabackup --user=root --password=root --backup --target-dir=/data/mysql_backup
#查看执行是否成功
[root@Node1 ~]# echo $?
0
[root@Node1 ~]# ls /data/mysql_backup/
backup-my.cnf mysql xtrabackup_binlog_info
binlog.000002 mysql.ibd xtrabackup_checkpoints
binlog.index performance_schema xtrabackup_info
ib_buffer_pool sys xtrabackup_logfile
ibdata1 undo_001 xtrabackup_tablespaces
LJW undo_002# 还原先停mysql服务
[root@Node1 ~]# systemctl stop mysqld#然后直接删除mysql的数据-->来点狠点的
[root@Node1 ~]# cd /var/lib/mysql/
[root@Node1 mysql]#
[root@Node1 mysql]# rm -rf LJW#然后尝试恢复数据
[root@Node1 mysql]# xtrabackup --prerepare --target-dir=/data/mysql_backup
[root@Node1 mysql]# xtrabackup --copy-back --target-dir=/data/mysql_backup/#修改/data/mysql所属权限,修改/etc/my.cnf配置中的datadir路径
chown -R mysql:mysql /data/mysql
sed -i "s#datadir=/var/lib/mysql#datadir=/data/mysql#g" /etc/my.cnf
[root@yue home]# grep datadir /etc/my.cnf
datadir=/data/mysql# 启动mysql服务,验证
systemctl start mysqld