登 录
注 册
< 数 据 库
MySQL
ClickHouse
ES
Doris
MongoDB
Redis
其他DB
AB复制实例
读写分离架构
数据备份恢复
热门推荐>>>
中台架构
中台建设与架构
Hadoop
源码分析-NN启动(三)
HBase
HBased对接Hive
Linux
Nginx高可用
Python
数据导出工具
Flink
3分钟搭建Flink SQL测试环境
Kafka
Kafka对接Flume
深度学习
卷积神经网络
数据结构与算法
选择合适的算法
计算机系统
信号量同步线程
Hive
Hive调优参数大全
其他框架
Azkaban Flow1.0与2.0
ClickHouse
表引擎-其他类型
技术成长
最好的职业建议
精选书单
技术成长书单—机器学习
技术资讯
数据在线:计算将成为公共服务
开发工具
IntelliJ IDEA 20年发展回顾(二)
系统工具
Mac命令行工具
虚拟化
内存虚拟化概述
云原生
云原生构建现代化应用
云服务
一文搞懂公有云、私有云...
Java
Spring Boot依赖注入与Runners
Go
Go函数与方法
SQL
SQL模板
安全常识
一文读懂SSO
当前位置:
首页
>>
MySQL
>>
数据备份恢复
数据备份恢复
2020-07-04 22:58:23 星期六 阅读:1531
![](/static/images/article_images/1693752317.673569.jpeg) ####两种备份方式 1、冷备份【好处是:稳定,坏处是:得停库影响收入】 2、热备份 ####冷备份的步骤 备份全部数据 ``` service mysql stop #【全部备份,直接把数据目录备份走,cat /etc/my.cnf |grep datadir 存放数据的目录】 cp -frp /app/mysql/data/* /备份文件存放目录 ``` 部分备份 (1) cp myisam引擎类型(拷贝走此目录就可以,myisam引擎的表不会写表空间,不会写事务日志) (2) ``` cd /app/mysql/data/ #【ibdata1是所有Innodb表公用的系统表空间,无法单独备份,只能全备份】 cp -fr ibdata1 /备份文件存放目录 cp -fr 库目录 /备份文件存放目录 #【事务日志保证undo和redo,Mysql启动时会检查,如果找不到,mysql认为非法的】 cp -rf ib_logfile1 ib_logfile0 /备份文件存放目录 ``` 数据还原 ``` (1)从哪拷贝走的,你就再把数据拷贝回原目录 (2)chown -R mysql.mysql /app/mysql/data/ #【千万注意】 ``` ####热备份的步骤 (一) mysql自带的【缺点:该工具在恢复数据时需要手工建好数据库】 ``` #【备份操作,其实备份的是sql语句】 create database bak; use bak; create table a1(a int); insert into a1 values(1); # 【热备份要求,mysql服务必须开启】 service mysql status mysqldump -u 用户 -p密码 库名 > backup文件 # 【直接打印到屏幕】 mysqldump -u root -pmysql bak mysqldump -u root -pmysql bak >/tmp/bak.sql 【输出定位到/tmp/bak.sql文件中】 ``` 【注意】: 如果在使用该语句备份的时候报下面的错误,即: `mysqldump: Couldn"t execute "SET OPTION SQL_QUOTE_SHOW_CREATE=1":` 说明是mysqldump的版本和mysql的版本不一样,可能此时的mysqldump版本是装系统时自动安装mysql的rmp包时对应的版本,但需要备份数据的mysql时后来安装的,并且版本号比RPM包安装的更新。所以此时需要把新安装的mysql版本的bin目录中的mysqldump文件覆盖原有的mysqldump文件,即: ` cp /app/mysql/bin/mysqldump /usr/bin/mysqldump` 模拟将数据删除 ``` drop database bak; ``` bak.sql中的内容为(标记为黑体的为恢复数据的关键语句) ``` -- -- Table structure for table `a1` -- DROP TABLE IF EXISTS `a1`; //在恢复数据库时,会检查当前数据库中是否有a1表,如果有,就删除当前的(有一定风险,要确定当前a1表里没有数据时才能删,所以,一般该语句都会省略执行) /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `a1` ( `a` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `a1` -- LOCK TABLES `a1` WRITE; /*!40000 ALTER TABLE `a1` DISABLE KEYS */; INSERT INTO `a1` VALUES (1); /*!40000 ALTER TABLE `a1` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; ``` 恢复操作 ``` #【咱们备份的文件中,没有创建库的语句,所以要手工创建】 create database bak; ``` 从tmp/bak.sql文件里恢复bak数据库中的内容 ``` mysql -u root -pmysql bak < /tmp/bak.sql mysql> use bak; mysql> show tables; mysql> select * from a1; ``` (二) 第三方工具【可以多线程,默认4个线程,比自带的备份工具要快】 在tmp目录下安装mydumper ``` export PATH=/usr/local/cmake/bin:$PATH ``` 1、解决依赖包 `yum install gcc gcc-c++ glib2-devel mysql-devel zlib-devel pcre-devel -y` 2、安装 ``` cd /tmp tar fvxz mydumper-0.2.3.tar.gz cd mydumper-0.2.3 cmake . make&&make install ``` 3、操作 备份语法: `mydumper -B 数据库 -u 用户名 -p 密码 -h 主机IP -o 备份文件存放的目录 -t 线程数【看cpu配置】 -r 分割的份数`【表比较大,把表分割了】 ``` mkdir -pv /tmp/sqlbak -------把备份的数据放在此目录 mydumper -B bak -u root -p mysql -o /tmp/sqlbak mysql -u root -pmysql mysql> use bak; mysql> drop table a1; ``` 恢复语法: ``` myloader -u 用户名 -p 密码 -d 备份目录 -B 库名 myloader -u root -p mysql -d /tmp/sqlbak -B bak ``` 检查是否恢复成功 ``` mysql -u root -pmysql mysql> use bak; mysql> show tables; mysql> select * from a1; ```