ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MYSQL的数据备份与恢复(三)

2021-07-10 21:05:01  阅读:223  来源: 互联网

标签:恢复 备份 MYSQL 数据备份 company mysqldump mysql root bak


mysqldump逻辑备份 ---- 推荐优先使用

mysqldump 是 MySQL 自带的逻辑备份工具。可以保证数据的一致性和服务的可用性。

保证数据的一致,在备份的时候进行锁表会自动锁表,锁住之后再备份。

本身为客户端工具:
远程备份: mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份.sql
本地备份: mysqldump -u用户名 -p密码  数据库名 >备份文件.sql
1、常用备份选项
项目Value
-A(–all-databases)备份所有库
-B(–databases)备份多个数据库
-F(–flush-logs)备份之前刷新binlog日志
–default-character-set指定导出数据时采用何种字符集,如果数据表不是采用默认的latin1字符集的话,那么导出时必须指定该选项,否则再次导入数据后将产生乱码问题。
–no-data,-d不导出任何数据,只导出数据库表结构。
–lock-tables备份前,锁定所有数据库表
–single-transaction保证数据的一致性和服务的可用性
-f(–force)即使在一个表导出期间得到一个SQL错误,继续。

注意:

使用 mysqldump 备份数据库时避免锁表:
对一个正在运行的数据库进行备份请慎重!! 如果一定要在服务运行期间备份,可以选择添加 --single-transaction选项,

类似执行: mysqldump --single-transaction -u root -p123456 dbname > mysql.sql

2、备份表
备份单个表
[root@mysql-server ~]# mkdir /home/back  #创建备份目录
[root@mysql-server ~]# mysqldump -uroot -p'qf123' company employee5 > /home/back/company.employee5.bak

备份多个表:
语法: mysqldump -u root -p1 db1 t1   t2 > /db1.t1_t2.bak
[root@mysql-server ~]# mysqldump -uroot -p'qf123' company new_t1 new_t2  > /home/back/company.new_t1_t2.bak
3、备份库
备份一个库:相当于将这个库里面的所有表全部备份。
语法: # mysqldump -u root -p1 db1 > /db1.bak
[root@mysql-server ~]# mysqldump -uroot -p'qf123' company > /home/back/company.bak

备份多个库:
语法:mysqldump  -u root -p1 -B  db1 db2 db3 > /db123.bak
[root@mysql-server ~]# mysqldump -uroot -p'qf123' -B company testdb > /home/back/company_testdb.bak

备份所有的库:
语法:# mysqldump  -u root -p1 -A > /alldb.bak
[root@mysql-server ~]# mysqldump -uroot -p'qf123' -A > /home/back/allbase.bak

到目录下面查看一下:
在这里插入图片描述

4、恢复数据库和表

为保证数据一致性,应在恢复数据之前停止数据库对外的服务,停止binlog日志 。因为binlog使用binlog日志恢复数据时也会产生binlog日志。

为实验效果先将刚才备份的数据库和表删除了。登陆数据库:
[root@mysql-server ~]# mysql -uroot -pqf123
mysql> show databases;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f25Pl1aF-1625911594368)(assets/1566294122629.png)]

mysql> drop database company;
mysql> \q
5、恢复库
登陆mysql创建一个库
mysql> create database company;
恢复:
[root@mysql-server ~]# mysql -uroot -p'qf123' company < /home/back/company.bak
6、恢复表
登陆到刚才恢复的库中将其中的一个表删除掉
mysql> show databases;
mysql> use company
mysql> show tables;
+-------------------+
| Tables_in_company |
+-------------------+
| employee5         |
| new_t1            |
| new_t2            |
+-------------------+
mysql> drop table employee5;
开始恢复:
mysql> set sql_log_bin=0;   #停止binlog日志
Query OK, 0 rows affected (0.00 sec)
mysql> source /home/back/company.employee5.bak;  -------加路径和备份的文件 

恢复方式二:
# mysql -u root -p1  db1  < db1.t1.bak
                     库名    备份的文件路径
7、备份及恢复表结构
1.备份表结构:
语法:mysqldump  -uroot -p123456 -d database table > dump.sql
[root@mysql-server ~]# mysqldump -uroot -p'qf123' -d company employee5 > /home/back/emp.bak
恢复表结构:
登陆数据库创建一个库
mysql> create database t1;
语法:# mysql -u root -p1 -D db1  < db1.t1.bak
[root@mysql-server ~]# mysql -uroot -p'qf123' -D t1 < /home/back/emp.bak

登陆数据查看:
在这里插入图片描述

8、数据的导入导出,没有表结构。

表的导出和导入只备份表内记录,不会备份表结构,需要通过mysqldump备份表结构,恢复时先恢复表结构,再导入数据。

mysql> show variables like "secure_file_priv"; 
查询导入导出的目录。 

在这里插入图片描述

修改安全文件目录:
1.创建一个目录:mkdir  路径目录
[root@mysql-server ~]# mkdir /sql
2.修改权限
[root@mysql-server ~]# chown mysql.mysql /sql
3.编辑配置文件:
vim /etc/my.cnf
在[mysqld]里追加
secure_file_priv=/sql
4.重新启动mysql.
1.导出数据
登陆数据查看数据
mysql> show databases;    #找到test库
mysql> use test           #进入test库
mysql> show tables;       #找到它t3表
mysql> select * from t3 into outfile '/sql/test.t3.bak';

2.数据的导入
先将原来表里面的数据清除掉,只保留表结构
mysql> delete from t3;
mysql> load data infile '/sql/test.t3.bak' into table t3;
如果将数据导入别的表,需要创建这个表并创建相应的表结构。

小结:

备份单个表
语法: # mysqldump -u root -p‘密码’  db1  t1 > /db1.t1.bak
                                   库    表   备份文件存放位置

备份多个表
语法: # mysqldump -u root -p‘密码’  db1  t1  t2 > /db1.t1.bak
                                   库   表1 表2  备份文件存放位置
备份表结构
语法:# mysqldump -uroot -p'密码' -d 库 表 > /备份文件路径

备份库
语法: # mysqldump -u root -p‘密码’  db1   > /db1.t1.bak
                                   库     备份文件存放位置
备份库
语法: # mysqldump -u root -p‘密码’ -B db1 db2   > /db1.t1.bak
                                     库1  库2    备份文件存放位置
备份所有库
语法:# mysqldump  -u root -p‘密码’ -A > /alldb.bak
                                   所有  备份文件存放位置  

恢复前要先关闭bin-log日志
mysql> set sql_log_bin=0;   #停止binlog日志

恢复表
语法:# mysql -uroot -p'qf123' company < /home/back/company.bak
在MySQL中也可以操作
>mysql source /home/back/company.employee5.bak;  
加路径和备份的文件

恢复库
语法:# mysql -uroot -p'qf123' company < /home/back/company.bak

恢复表结构
语法:# mysqldump -uroot -p'密码' -D 表 < /备份文件路径

导出数据
mysql> select * from 表名 into outfile '文件路径';
导出数据
mysql> load data infile '文件路径' into table 表名;

标签:恢复,备份,MYSQL,数据备份,company,mysqldump,mysql,root,bak
来源: https://blog.csdn.net/hanjinjuan/article/details/118638615

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有