逻辑备份
备份的是建表、建库、插入等操作所执行的sql语句
适用于中小型数据、效率相对较低,一般在数据库正常提供服务下进行:mysqldump、mydumper、into outfile等
备份实质:是把要备份的数据导出为.sql文件(里面存放的是当前数据库实现的sql语言)
数据准备:
创建一个tmp的数据库,在tmp库下创建tmp1表,分别写入数据 msyql> create database tmp; msyql> use tmp; mysql> create table test1( id int not null, name varchar(20),age int(10),primary key(id)) engine=innodb default charset=utf8; msyql> insert into tmp1 values(1,'tmp',22); mysql> select *from tmp1; +------+------+------+ | id | name | age | +------+------+------+ | 1 | tom | 22 | +------+------+------+ 1 row in set (0.00 sec)
语法格式:
mysqldump 库名 表名列表 > 备份到的地址 -p
如果要备份多个表,表与表之间用空格隔开
将tmp库tmp1表逻辑备份 [root@localhost bin]# mysqldump tmp tmp1 > /tmp/sqlbak/tmp1.sql -p Enter password: 这里输入数据库用户的密码
如果没有添加MySQL到环境变量,执行mysqldump需要到mysq/bin目录下执行
这里可以打开tmp1.sql看一看
cat tmp1.sql
可以看出这个文件里面存入的都是这张表的sql语句。
现在可以模拟MySQL数据丢失
删除表模拟数据丢失 mysql> drop table tmp1; Query OK, 0 rows affected (0.00 sec)
利用备份恢复
mysql> source /tmp/sqlbak/tmp1.sql Enter password: 或者使用这个命令 [root@localhost sqlbak]# mysql -p tmp < /tmp/sqlbak/tmp1.sql Enter password:
查询数据是否恢复
mysql> select *from tmp1; +------+------+------+ | id | name | age | +------+------+------+ | 1 | tom | 22 | +------+------+------+ 1 row in set (0.00 sec)
语法格式:
mysqldump [选项] --databases [选项] 库名
[root@localhost bin]# mysqldump --databases tmp > /tmp/sqlbak/tmp.txt -p Enter password:
模拟数据故障
删除数据库模拟故障 mysql> drop database tmp; Query OK, 1 rows affected (0.01 sec)
利用备份恢复
mysql> source /tmp/sqlbak/tmp.txt 或者使用这个命令 [root@localhost sqlbak]# mysql -p tmp < /tmp/sqlbak/tmp1.txt Enter password:
查询恢复数据
mysql> select *from tmp.tmp1; +------+------+------+ | id | name | age | +------+------+------+ | 1 | tom | 22 | +------+------+------+ 1 row in set (0.00 sec)
mysqldump [选项] --all-databases [选项]
语法格式:mysqldump [选项] 数据库名 表名列表
mysqldump选项说明
–master-data 选项说明:
1、在恢复数据时选择,默认是1
2、需要RELOAD privilege并必须打开二进制文件
3、这个选项会自动打开–lock-all-tables,关闭–lock-tables
如果要用mysqldump进行全库级备份,必须开启二进制日志
vim /etc/my.cnf
修改完后重启mysql
service mysql restart
开始全库备份
[root@localhost data]# mysqldump --all-databases --master-data --single-transaction > /tmp/sqlbak/all.sql -p Enter password:
删除一些数据用于测试
删除数据库模拟故障 mysql> drop database tmp; Query OK, 1 rows affected (0.01 sec)
利用备份恢复数据
mysql> source /tmp/sqlbak/all.sql 或者使用这个命令 [root@localhost data]# mysql < /tmp/sqlbak/all.sql -p Enter password:
查询数据是否以及恢复
mysql> select *from tmp.tmp1; +------+------+------+ | id | name | age | +------+------+------+ | 1 | tom | 22 | +------+------+------+ 1 row in set (0.00 sec)