备份
逻辑备份
主要是保留数据库中存储的逻辑结构与数据之间的关系
物理备份
备份有全备:全部备份
增量备份 :备份上一次备份到现在产生的新数据
差异备份:只备份跟完整备份不一样的,会在完整备份的基础上备份所有数据
直接自己复制或者tar 压缩保存到另一个服务器
恢复的时候从保存的目录恢复数据
注意的是,在tar时得关闭数据库服务
如何获得一个崭新的数据库
rm -rf /var/lib/mysql/* 删除数据库的数据
rm -rf /var/log/mysql.log 删除数据库的日志文件
然后在重新启动数据库,就可以得到一个全新的数据库
获取数据库的初始密码 cat /var/log/mysql.log | grep password
修改密码 mysql -u root -p'密码' password '新密码'
-使用软件xtrabackup备份
是免费的开源的,支持数据的热备份
得安装软件
在进行完整备份的时候得创建完备目录
使用命令 innobackupex --user=root --password='密码' 完备目录
在恢复前得先验证一下innobackupex --apply-log 完备目录下的全备份文件
恢复数据 innobackupex --copy-back 完备目录下的全备份文件
注意,在全备过来的文件的所属组和所有者都是root ,得修改成mysql
chown mysql.mysql /var/lib/mysql -R
重启数据库服务就好
增量备份
在完整备份的基础上 ,创建增量备份的目录
进行增量备份 innobackupex --user=root --password='密码' --incremental
增量备份目录 --incremental -basedir=全备文件的位置(第二次的时候是上一次增量备份的文件的)
先停止数据库 在依次回滚,就是先全备,在第一次增量备份,在第二次增量备份....想恢复到那个时间点,就回滚到哪里,会将或回滚都给全备
innobackupex --apply-log --redo-only 全备目录
innobackupex --apply -log --redo -only 全备目录 --incremental-dir=增量备份的文件
恢复数据
innobackupex --copy-back 全备目录文件
修改权限 重启数据库
差异备份
创建差异备份目录
先全备在进行差异备份
innobackupex --user=root --password='密码' --incremental 差异备份目录 --incremental-basedir=全备目录文件
数据回滚
innobackupex --apply-log --redo-only 全备目录文件
innobackupex --apply-log --redo-only 全备文件 --incremental -dir=差异备份文件
恢复数据
innobackupex --copy-back 全备目录文件
修改数据,重启数据库服务
使用mysqldump备份
备份表的话,前提是有库有表
备份表的话就是 mysqldump -u 用户名 -p 密码 库名 表名 > 保存的路径注意保存的文件是.sql
恢复表的话就是 mysql -u 用户名 -p 密码 表名 < 保存的文件.sql
注意要是想恢复的话就得将删除库新建回来,因为删除的话会将库和表一起删除,恢复只是里面的数据
备份库的话就是 mysqldump -u 用户名 -p密码 库名 > 保存的路径.sql
备份多个库的话就是加参数 -B 备份所有表的话就是加参数-A
为了保证数据的一致性,应该在和恢复数据前停止数据库对外的服务,停止binlog服务,因为使用binlog日志恢复数据也会产生binlog日志
恢复库的话就是 mysql -u 用户名 -p 密码 -D 库名 < 保存的路径.sql
使用binlog 日志恢复
原理就是用日志备份的方式去恢复数据
日志的默认存储位置是 /var/lib/mysql
编译安装目录下的var下
编译安装
永久安装
在 vim /etc/my.cnf
添加 log-bin=log
server-id=1 这个id是唯一的,不能重复
进入数据库输入show binlog event ;
用时间和长度恢复
最好不使用时间去恢复,因为时间不方便
最好使用长度去恢复数据
在使用binlog恢复数据的时候最好是先暂停这个binlog 在恢复数据 ,就不会因为恢复数据的语句二影响后面的结果
mysql> show binlog events;
+--------------+-----+----------------+-----------+-------------+---------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+--------------+-----+----------------+-----------+-------------+---------------------------------------+
| mylog.000001 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.39-log, Binlog ver: 4 |
| mylog.000001 | 123 | Previous_gtids | 1 | 154 | |
| mylog.000001 | 154 | Anonymous_Gtid | 1 | 219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mylog.000001 | 219 | Query | 1 | 307 | create database t1 |
| mylog.000001 | 307 | Anonymous_Gtid | 1 | 372 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mylog.000001 | 372 | Query | 1 | 453 | drop database t1 |
| mylog.000001 | 453 | Anonymous_Gtid | 1 | 518 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mylog.000001 | 518 | Query | 1 | 606 | create database t1 |
| mylog.000001 | 606 | Anonymous_Gtid | 1 | 671 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mylog.000001 | 671 | Query | 1 | 752 | drop database t1 |
+--------------+-----+----------------+-----------+-------------+---------------------------------------+
[root@xingdian ~]# mysqlbinlog --start-position 219 --stop-position 307 /var/lib/mysql/mylog.000001 | mysql -u root -pQianFeng@123
[root@xingdian ~]# mysqlbinlog --start-position 219 --stop-position 307 /var/lib/mysql/mylog.000001 | mysql -u root -pQianFeng@123