MySQL 数据备份

复制代码
#1. 物理备份: 直接复制数据库文件,适用于大型数据库环境(
如数据文件、控制文件、归档日志文件等)。
但不能恢复到异构系统中如 Windows。

#2. 逻辑备份: 备份的是建表、建库、插入等操作所执行 SQL 语句,适用于中小型数据库,效率相对较低。
#3. 导出表: 将表导入到文本文件中。
复制代码
也可以用 IDE 工具来实现备份,点击转储 SQL..,那我们重点来研究一下 MySQLdump 实现的逻辑备份
1. 使用 mysqldump 实现逻辑备份
复制代码
#语法:

mysqldump -h 服务器 -u 用户名 -p 密码 数据库名 > 备份文件.sql

当你是本地登录的时候这个 -h 可以不写,当其他用户登录时,就得写上 -h 服务器
#示例:

1. 单库备份
mysqldump -uroot -p123456 day47 > E:\day47.sql
mysqldump -uroot -p123456 test class employee department > E:\test-c-e.sql
2. 多库备份
mysqldump -uroot -p123456 –databases test db2 zuoye > E:\dbzzz.sql
3. 备份所有库
mysqldump -uroot -p123456 –all-databases > E://all.sql

复制代码

2. 恢复逻辑备份
复制代码
方法 1. 在没有登录进去之前恢复
C:\Users\Administrator>mysql -uroot -p123456 test < day47.sql
drop database day47;
drop database test;
create database day47;
create database test;
mysql -uroot -p123456 day47 < day47.sql
mysql -uroot -p123456 test < day47.sql #也可以在自己新建的空数据库里添加你备份的库
方法 2.mysql 登录进去后恢复
mysql> use db1;
mysql> SET SQL_LOG_BIN=0; #设置日志,如果写日志就等于 1,不写就等于 0。一般不用设置
mysql> source E:\day47.sql;

3. 注:如果备份 / 恢复单个库时,可以修改 sql 文件
DROP database if exists school;
create database school;
use school;
复制代码

在没有登录之前恢复是,如果你想看恢复了没有的时候是不是每次都要登录进去看看啊,那么我们可以这样做,就不用登录直接查看 了。

不用再登录进去执行 sql 语句了
mysql -uroot -e “use test;show tables;” #注意是双引号
mysql -uroot -e “show databases;” #注意分号在双引号里面

注意事项:
1. 完全恢复到一个干净的环境(例如新的数据库或删除原有的数据库)
2. 恢复期间所有 SQL 语句不应该记录到 binlog 中
3. 表的导出与导入
复制代码
一、表的导出
use day47
select * from userinfo;
select * from userinfo into outfile ‘E:\userinfo.txt’ fields terminated
by ‘,’ lines terminated by ‘\n’; #将字段之间按逗号分开,行之间用’\n’分开

这样写的话报错了。新版本不支持你这样直接指定路径写,为了保证数据的安全。
如果一旦有黑客拿到 sql 权限的时候,就把你的数据就给拿走了。你的数据就不安全了
那么怎么解决这个错误呢?
show variables like ‘%secure%’;
解决方法:更改配置文件
[mysqld]
secure_file_priv=‘E:\’
复制代码

复制代码
二、表的导入
use bak;
show tables;
create table user(id int primary key auto_increment,name char(20),age int,depart_id int);
desc user;
load data infile ‘E:\userinfo.txt’ into table user fields terminated by ‘,’
lines terminated by ‘\n’;# 导入表
复制代码

4. 数据库迁移
务必保证在相同版本之间迁移

mysqldump -h 源 IP -uroot -p123 –databases db1 | mysql -h 目标 IP -uroot -p456