1.mysql数据库备份与恢复
1.1 数据库常用备份方案
数据库备份方案:
- 冷备份:先把数据库服务停掉,然后拷贝数据库目录下的文件进行备份 物理备份
- 温备份:
- 热备份:数据库服务正常运行情况,直接对数据库进行备份
- 全量备份:全部备份
- 增量备份:第一次全备,第二次在第一次全备更改的基础上备份
- 差异备份:全部备份,差异备份-->全备
备份方案 | 特点 |
---|---|
全量备份 | 全量备份就是指对某一个时间点上的所有数据或应用进行的一个完全拷贝。数据恢复快。备份时间长 |
增量备份 | 增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加和者被修改的文件。这就意味着,第一次增量备份的对象是进行全备后所产生的增加和修改的文件;第二次增量备份的对象是进行第一次增量备份后所产生的增加和修改的文件,如此类推。没有重复的备份数据,备份时间短,恢复数据时必须按一定的顺序进行 |
差异备份 | 备份上一次的完全备份后发生变化的所有文件。差异备份是指在一次全备份后到进行差异备份的这段时间内,对那些增加或者修改文件的备份。在进行恢复时,我们只需对第一次全量备份和最后一次差异备份进行恢复。 |
1.2 mysql备份工具mysqldump
//语法:
mysqldump [OPTIONS] database [tables ...]//备份表(多表之间用空格连接)
mysqldump [OPTIONS] --all-databases [OPTIONS]//全备
mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]//备份指定的数据库
//常用的OPTIONS:
-uUSERNAME //指定数据库用户名
-hHOST //指定服务器主机,请使用ip地址
-pPASSWORD //指定数据库用户的密码
-P# //指定数据库监听的端口,这里的#需用实际的端口号代替,如-P3307
[root@mr ~]# mysqldump -uroot -pmarui runtime tb_course > tb_course-$(date '+%Y%m%d%H%M%S').sql (备份表)
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@mr ~]# ls
tb_course-20220731140014.sql
[root@mr ~]# vim .my.cnf(免密登录)
[mysqldump]
user=root
password=marui
(实现免密登录)
[root@mr ~]# mysqldump runtime tb_course > tb_course-$(date '+%Y%m%d%H%M%S').sql
[root@mr ~]# ls
tb_course-20220731140014.sql
tb_course-20220731140726.sql
[root@mr ~]# mysqldump --databases runtime > runtime-$(date '+%Y%m%d%H%M%S').sql(备份数据库)
[root@mr ~]# ls
runtime-20220731141008.sql
[root@mr ~]# mysqldump --all-databases > all-$(date '+%Y%m%d%H%M%S').sql(全备)
[root@mr ~]# ls
all-20220731141206.sql
[root@mr ~]#
1.3 mysql数据恢复
mysql> delete from tb_course where id = 5 or id = 6;(删除数据)
Query OK, 2 rows affected (0.01 sec)
mysql> select * from tb_course;
+----+-------------+
| id | course_name |
+----+-------------+
| 1 | Java |
| 2 | Mysql |
| 3 | Python |
| 4 | Go |
+----+-------------+
4 rows in set (0.00 sec)
mysql>
[root@mr ~]# vim .my.cnf
[mysqldump]
user=root
password=marui
[client]
user=root
password=marui
方法一:
[root@mr ~]# mysql runtime < tb_course-20220731140726.sql
mysql> show tables;
+-------------------+
| Tables_in_runtime |
+-------------------+
| tb_course |
| tb_students_info |
+-------------------+
2 rows in set (0.00 sec)
mysql> select * from tb_course;
+----+-------------+
| id | course_name |
+----+-------------+
| 1 | Java |
| 2 | Mysql |
| 3 | Python |
| 4 | Go |
| 5 | C++ |
| 6 | HTML |
+----+-------------+
6 rows in set (0.00 sec)
mysql>
方法二:
mysql> source tb_course-20220731140726.sql
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
......
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
mysql> select * from tb_course;
+----+-------------+
| id | course_name |
+----+-------------+
| 1 | Java |
| 2 | Mysql |
| 3 | Python |
| 4 | Go |
| 5 | C++ |
| 6 | HTML |
+----+-------------+
6 rows in set (0.00 sec)
mysql>
物理备份
[root@mr ~]# cd /opt/data/
[root@mr data]# ls
auto.cnf client-key.pem ib_logfile1 mysql_bin.000003 performance_schema server-cert.pem
ca-key.pem ib_buffer_pool ibtmp1 mysql_bin.000004 private_key.pem server-key.pem
ca.pem ibdata1 mr.err mysq