MySQL数据备份与恢复

Posted Weikun Xing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL数据备份与恢复相关的知识,希望对你有一定的参考价值。

文章目录

创建数据库数据表

create database student_db;
use student_db;

create table student(
sno int not null primary key,
sname varchar(10),
ssex char(2),
sage int);

create table sc(
sno int,
cno int,
score decimal(5,2),
primary key(sno,cno));

create table course(
cno int primary key,
cname varchar(20),
credit int);
insert into student values(1,'MARY','F',19);
insert into student values(2,'JACK','M',20);
insert into sc values(1,1,90);
insert into sc values(1,2,80);
insert into sc values(2,1,78);
insert into sc values(2,2,81);
insert into course values(1,'C-PROGRAME',3);
insert into course values(2,'DATABASE-SYSTEM',4);

数据的备份和恢复

使用mysqldump命令备份数据

备份单个数据库或表

备份数据库student_db中的所有表,存于d:\\MySQL\\,文件名为studentdb_bak.sql

C:\\WINDOWS\\system32>mysqldump -u root -h localhost -p student_db > d:\\MySQL\\studentdb_bak.sql
Enter password: ****



备份数据库student_db中的student表和course表,存于d:\\MySQL\\,文件名为studentdb_table_bak.sql

C:\\WINDOWS\\system32>mysqldump -u root -h localhost -p student_db student course > d:\\MySQL\\studentdb_table_bak.sql
Enter password: ****

备份多个数据库

将student_db和company数据库备份至d:\\MySQL\\,文件名为db_bak.sql

C:\\WINDOWS\\system32>mysqldump -u root -h localhost -p --databases student_db company > d:\\MySQL\\db_bak.sql

备份所有数据库

mysqldump -u root -h localhost -p --all-databases > d:\\MySQL\\all_db_bak.sql

使用mysql命令恢复数据

将备份文件恢复到某数据库中,前提是数据库必须存在

create database students;
C:\\WINDOWS\\system32>mysql -u root -p students < d:\\MySQL\\studentdb_bak.sql



可以看到数据恢复成功

表数据的导出与导入

使用select…into outfile语句导出表数据

使用select…into outfile语句时,目标文件的路径只能是MySQL的secure_file_priv参数所指定的位置
发现secure_file_priv值为null
解决办法
my.ini添加

[mysqld]注意是在这个下面添加的
secure_file_priv="" 
secure_file_priv为NULL禁止导出文件

secure_file_priv指定地址限制导出地址只能在此secure_file_priv=“D:/xxx”

secure_file_priv为空可以导出到任意文件secure_file_priv=""
重启mysql服务
net stop mysql
net start mysql

mysql> use student_db;
Database changed
mysql> select * from student
    -> into outfile 'd:/MySQL/table_bak.txt'
    -> fields terminated by '|' optionally enclosed by '"'
    -> lines terminated by '\\r\\n';
Query OK, 2 rows affected (0.05 sec)

使用mysqldump命令导出表数据

C:\\WINDOWS\\system32>mysqldump -u root -p -T "d:/MySQL/" student_db sc --lines-terminated-by=\\r\\n


使用load data infile语句导入表数据

1.将student表中的数据全部删除

mysql> use student_db
Database changed
mysql> set sql_safe_updates=0;
Query OK, 0 rows affected (0.00 sec)

mysql> delete from student;
Query OK, 2 rows affected (0.12 sec)

mysql> select * from student;
Empty set (0.00 sec)

2.从table_bak.txt文件恢复数据

mysql> load data infile 'd:/MySQL/table_bak.txt'
    -> into table student_db.student
    -> fields terminated by '|' optionally enclosed by '"'
    -> lines terminated by '\\r\\n';
Query OK, 2 rows affected (0.09 sec)
Records: 2  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from student;
+-----+-------+------+------+
| sno | sname | ssex | sage |
+-----+-------+------+------+
|   1 | MARY  | F    |   19 |
|   2 | JACK  | M    |   20 |
+-----+-------+------+------+

使用mysqlimport命令导入表数据

1.将sc表中的数据全部删除

mysql> delete from sc;
Query OK, 4 rows affected (0.08 sec)

mysql> select * from sc;
Empty set (0.00 sec)

2.从sc.txt文件恢复数据

C:\\WINDOWS\\system32>mysqlimport -u root -p student_db "d:/MySQL/sc.txt" --lines-terminated-by=\\r\\n
Enter password: ****
student_db.sc: Records: 4  Deleted: 0  Skipped: 0  Warnings: 0
mysql> use student_db;
Database changed
mysql> select * from sc;
+-----+-----+-------+
| sno | cno | score |
+-----+-----+-------+
|   1 |   1 | 90.00 |
|   1 |   2 | 80.00 |
|   2 |   1 | 78.00 |
|   2 |   2 | 81.00 |
+-----+-----+-------+

使用二进制日志文件恢复数据

查看二进制日志的开启状态

默认为ON,表示启动记录功能

查看二进制日志

查看二进制日志文件的个数及文件名

mysqlbinlog查看二进制日志

mysqlbinlog 'D:\\MySQL\\mysql-8.0.28-winx64\\data\\binlog.000003'

如果发现如下报错,打开my.ini文件删除对应语句。重启mysql服务

使用二进制日志恢复数据库

这个建议参考其他大佬博客

以上是关于MySQL数据备份与恢复的主要内容,如果未能解决你的问题,请参考以下文章

mysql之备份与恢复

Mysql备份与恢复

MySQL备份与恢复

MySQL备份与恢复

MySQL备份与恢复

MySQL备份与恢复