1.数据库备份与恢复
- 数据备份方案:
- 冷备份:数据库服务关闭,把数据库对应的数据目录下的数据文件拷贝一份 ——物理备份(不建议使用:如果关掉数据库备份,会导致数据丢失)
- 温备份:
- 热备份:数据库服务正常运行的时候,直接对数据库备份
- 数据库备份手段:
-
全量备份:全备
数据恢复快。
备份时间长 -
增量备份:
第一次是全备,
第二次在全备的基础上备份你增加或修改的数据备份
第三次是基于第二次增备更改的数据进行备份
缺点:恢复数据库容易乱,恢复数据库 -
差异备份 (每次更改都是全备)
第一次全备
第二次是把全备的基础上增加或者修改的数据插入到全备里去
第三次是备份第二次增加或者修改了的数据的全备
优点:只备份更改了的数据 每次备份都是最新的
冷备份
1.先创建一个可以备份的目录,然后把/opt/data/*下的所有的信息移动到 /tmp/mysql-back/下
[root@localhost ~]# mkdir /tmp/mysql-back/
[root@localhost ~]# mv /opt/data/* /tmp/mysql-back/
2.数据库都被移动备份走了
[root@localhost ~]# mysql -p123
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
+--------------------+
1 row in set (0.01 sec)
mysql> exit
Bye
3.数据恢复
[root@localhost ~]# mv /tmp/mysql-back/* /opt/data/
[root@localhost ~]# mysql -p123
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
2.mysql备份工具mysqldump
//常用的OPTIONS:
-uUSERNAME //指定数据库用户名
-hHOST //指定服务器主机,请使用ip地址
-pPASSWORD //指定数据库用户的密码
-P# //指定数据库监听的端口,这里的#需用实际的端口号代替,如-P3307
//备份tb_course这个表到tb_course.sql下
[root@localhost ~]# mysqldump -uroot -p123 renweiwei tb_course > tb_course.sql
[root@localhost ~]# ls
anaconda-ks.cfg passwd tb_course.sql
//备份数据库renweiwei
[root@localhost ~]# mysqldump -uroot -p123 --databases renweiwei > renweiwei.sql
[root@localhost ~]# ls
anaconda-ks.cfg passwd renweiwei.sql tb_course.sql
//备份全部数据库
[root@localhost ~]# mysqldump --all-databases > all-$(date '+%Y%m%d%H%M%S').sql
[root@localhost ~]# ls
all-20220728174008.sql
3.mysql数据恢复
//误删了数据库中tb_students_info表里面的第一个和第二个信息
mysql> delete from tb_students_info where id =1 and id = 3;
Query OK, 0 rows affected (0.00 sec)
//恢复数据库
[root@localhost ~]# mysql -uroot -p123 renweiwei < renweiwei.sql
mysql> use renweiwei;
Database changed
mysql> select *from tb_students_info;
+----+------+------+------+--------+-----------+
| id | name | age | sex | height | course_id |
+----+------+------+------+--------+-----------+
| 1 | qq q | 24 | 男 | 170 | 4 |
| 2 | aaa | 22 | 女 | 162 | 3 |
| 3 | zzz | 28 | 男 | 190 | 1 |
+----+------+------+------+--------+-----------+
3 rows in set (0.00 sec)
//误删整个数据库
mysql> drop database renweiwei;
Query OK, 2 rows affected (0.01 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
[root@localhost ~]# mysql -uroot -p123 < all-20220728174008.sql
mysql> source renweiwei.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)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| renweiwei |
| sys |
+--------------------+
5 rows in set (0.00 sec)
4. 差异备份与恢复
- 开启MySQL服务器的二进制日志功能
[mysqld]
basedir = /usr/local/mysql
datadir = /opt/data
socket = /tmp/mysql.sock
port = 3306
pid-file = /opt/data/mysql.pid
user = mysql
skip-name-resolve
sql-mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
server-id=10 //设置服务器标识符
log-bin=mysql_bin //开启二进制日志功能
[root@localhost ~]# service mysqld restart
Shutting down MySQL.... SUCCESS!
Starting MySQL... SUCCESS!
[root@localhost ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22