一、简单数据备份
编辑配置文件my.cnf,添加内容
[mysqld]
secure_file_priv = 保存到本地目录
配置完成后重启服务
验证配置是否生效
select @@global.secure_file_priv;
或者show variables like "secure_file_priv"
导出
select * from class into ourtile "目的地";
导入
导入到数据文件中的列必须和表中的 一一对应,包含id的值
导入语句
载入外部“形式整齐”的数据(csv 格式的文件,没有域之家用逗号隔开):
load data infile '文件完整名(含路径)' into table 表名
fields terminated by '域分隔符' optionally enclosed by '"'
ignore 1 lines;
optionally enclosed by '"' 用于识别域值的界定符
ignore 1 lines; 忽略第一行
二、逻辑备份
逻辑备份特点
- 备份的都是SQL语句,数据量大的话SQL语句备份快,但是恢复数据的时候会很慢
- 备份的是建表、建库、插入等操作所执行SQL语句(DDL DML DCL),适用于中小型数据库。
- 效率相对较低
用法
mysqldump -h 服务器(默认本机) -u.. -p.. 数据库名>name.sql
日常用法
备份所有数据库
先配置用户名和密码
在任意文件内配置
[mysqldump]
user=root
password=root
...
文件内容配好的话,在备份的时候可以用 --defaults-file直接读取文件内容,方便快捷
mysqldump --defaults-file=~/.mysql_user --all-databases > xxx.sql
# 不包含 INFORMATION_SCHEMA,performance_schema,sys
备份单个库
mysqldump --defaults-file=/root/.mysql_user -hlocalhost --databases servers >servers.sql
mysqldump --defaults-file=/root/.mysql_user -hlocalhost servers>servers.sql
加与不加--databases的区别:
加上--databases的话,备份文件内会有创库与进库语句
如果不加的话,必须自己创建库并且进入库
进入数据库内使用 source backup.sql
备份多个库
mysqldump --defaults-file=/root/.mysql_user -hlocalhost --databases db1 db2 db3 . >db.sql
备份一个库的几个表
mysqldump --defaults-file=/root/.mysql_user -hlocalhost db1 t1 t2 t3 >backup.sql
恢复数据
1. mysql -uroot -proot db < backup.sql
2. 进入数据库
source backup.sql
物理备份
全备
知识
对数据库在线进行全备的时候,用户可以对数据库进行增删改查,如果数据库已经完成备份后,数据并不会同步,如果不处理的话数据就会造成损失
这时会有一个事件用来监控那些已经备份完成之后的数据库,这些内容会存储在xtrabackup_logfile这个二进制文件内,但是这个文件并不能数据库解析,所以数据备份之后就要对这个文件进行恢复,将其转换为可以被mysql识别的文件,然后在进行恢复数据,也就是复制文件
下载xtrabackup
1. yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
2. yum install -y libev
3. yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
4. yum install percona-xtrabackup-24
全备的大致流程
1. 创建好存储备份的目录
2. 对数据库进行备份
3. 将事件产生的日志转换为数据库可以识别的
4. 将数据库服务停止
5. 进行备份
6. 开启数据库服务进行验证
全备的操作
1. shell> xtrabackup --backup --user=root --password='123' --target-dir=/backups/full
# 备份完成后,可以看到备份时的LSN号,当下次进行增量备份时,xtrabackup就只备份大于此号的page即可。
2. shell> xtrabackup --prepare --target-dir=/backups/full
3. shell> systemctl stop mysqld.service
4. shell> rm -rf /var/lib/mysql/*
5. shell> xtrabackup --copy-back --datadir=/var/lib/mysql --target-dir=/backups/ful
6. systemctl start mysqld 开启数据库服务进行检验
增量备份
增量备份是在全备的基础之上进行增量备份
特点:是在上一次
备份的基础上进行增量备份
创建增量备份
- 进行全量备份
xtrabackup --backup --user=root --password=root --target-dir=/backup/full
- 进行增量备份
手动增加数据之后进行增量备份
第一次增量备份
xtrabackup --backup --user=root --password=root --target-dir=/backup/inc1 --incremental-basedir=/backup/full
在第一次全备的基础上进行增量备份,备份后的文件放在inc1目录内
第二次增量备份
xtrabackup --backup --user=root --password=root --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1
在第一次增量备份的基础上进行增量备份,备份后的文件放在inc2目录内
- 恢复数据
1. 准备全备的数据
xtrabackup --prepare --apply-log-only --target-dir=/backup/full
2.把第一次备份的数据合并到全备的数据内
xtrabackup --prepare --apply-log-only --target-dir=/backup/full --
incremental-dir=/backup/incl
3.把第一次备份的数据合并到全备的数据内
xtrabackup --prepare --target-dir=/backup/full --
incremental-dir=/backup/inc2
注意最后一次合并不加 --apply-log-only
- 停止服务,删除数据
systemctl stop mysqd
rm -rf /var/lib/mysqld/*
5.恢复数据
xtrabackup --copy-back --datadir=/var/lib/mysql --target-dir=/backup/full
6.修改权限之后开启服务就可以了
将数据库恢复默认
1. 关闭服务 将数据库内的内容全部清空
2. mysqld --initialize --user=mysql
网友评论