设为首页 收藏本站
查看: 381|回复: 0

[经验分享] mysqldump备份和恢复Mysql数据库

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-12-4 09:53:14 | 显示全部楼层 |阅读模式
简单介绍:

通过mysqldump命令可以将指定的库和表全部导出为sql脚本,可以在不同版块的Mysql上面使用。例如需要升级Mysql数据库可以使用mysqldump先备份所有数据库,然后直接在升级后的Mysql数据库导入即可。


基本操作:
备份单个数据库,或者库中的特定表(库名后面加表名)
mysqldump备份jiaowu库
[iyunv@localhost ~]# mysqldump -uroot -p jiaowu > /root/jiaowu.sql
删除jiaowu的数据库
mysql> DROP DATABASE jiaowu;   
删除之后导入备份文件说是没有jiaowu数据库
注意:mysqldump备份出来的数据库都是插入语句,还原的时候没有办法创建数据库需要手动创建数据库
[iyunv@localhost ~]# mysql < jiaowu.sql
ERROR 1046 (3D000) at line 22: No database selected
手动创建jiaowu的数据库
mysql> CREATE DATABASE jiaowu;
还原jiaowu数据库
[iyunv@localhost ~]# mysql jiaowu < jiaowu.sql


如果是生产环境备份时需要锁定所有表,不然在备份的时候有用户写入数据,会造成时间点不一样
锁定所有表
mysql> FLUSH TABLES WITH READ LOCK;
释放锁
mysql> UNLOCK TABLES;


参数说明:
--master-data={0|1|2}
    0: 不记录二进制日志文件记录位置;
    1:以CHNAGE MASTER TO的方式记录位置,可用于恢复后直接启动从服务器;
    2:以CHANGE MASTER TO的方式记录位置,但默认为被注释;

备份jiaowu数据库
[iyunv@localhost ~]# mysqldump -uroot -p --master-data=2 jiaowu > /root/jiaowu-`date +%F-%H-%M-%S`.sql
查看二进制日志记录位置
[iyunv@localhost ~]# vim jiaowu-2014-11-27-17-02-38.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=9749;

--lock-all-tables:锁定所有表

--flush-logs: 执行日志滚动

如果指定库中的表类型均为InnoDB,可使用--single-transaction启动热备,不要和--lock-all-tables一块使用


备份多个库: 备份的时候自动创建库名,还原的时候不需要手动创建库
    --all-databases: 备份所有库
    --databases DB_NAME,DB_NAME,...: 备份指定库

    --events 备份事件调度器的
    --routines 备份存储过程和存储函数的
    --triggers 备份触发器

模拟实验:备份所有库,并且所有库坏掉了如何还原
使用root用户备份所有库,滚动日志文件,记录二进制文件位置和路径,同时锁定所有库
[iyunv@localhost ~]# mysqldump -uroot -p --lock-all-table --flush-logs --all-databases --master-data=2 > /root/alldatabases.sqlEnter password:

查看备份的数据库发现滚动的日志到了000007了
[iyunv@localhost ~]# less alldatabases.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000007', MASTER_LOG_POS=107;

删除以前的滚动日志文件(生产环境建议先复制然后再删除)
mysql> PURGE BINARY LOGS TO 'mysql-bin.000007';
Query OK, 0 rows affected (0.19 sec)

mysql> SHOW BINARY LOGS;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000007 |       107 |
+------------------+-----------+


查看tutors表中数据
mysql> USE jiaowu;
Database changed
mysql> SELECT * FROM tutors;
+-----+--------------+--------+------+
| TID | Tname        | Gender | Age  |
+-----+--------------+--------+------+
|   1 | HongQigong   | M      |   93 |
|   2 | HuangYaoshi  | M      |   63 |
|   3 | Miejueshitai | F      |   72 |
|   4 | OuYangfeng   | M      |   76 |
|   5 | YiDeng       | M      |   90 |
|   6 | YuCanghai    | M      |   56 |
|   7 | Jinlunfawang | M      |   67 |
|   8 | HuYidao      | M      |   42 |
|   9 | NingZhongze  | F      |   49 |
+-----+--------------+--------+------+


删除年龄大于80的行
mysql> DELETE FROM tutors WHERE Age>80;
Query OK, 2 rows affected (0.00 sec)


然后一天过去了,要做增量备份

滚动日志
mysql> FLUSH LOGS;
Query OK, 0 rows affected (0.01 sec)

mysql> SHOW BINARY LOGS;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000007 |       343 |
| mysql-bin.000008 |       107 |
+------------------+-----------+

备份日志文件
[iyunv@localhost ~]# cd /mydate/date/
[iyunv@localhost date]# cp mysql-bin.000007 /root/

第二天往表中插入一行数据
mysql> INSERT INTO tutors (Tname) VALUES ('zhangsan');

删除数据库,但是把二进制日志文件复制出去,假设日志文件和数据不在同一目录存储,不然如果连二进制日志文件也删除了就没有办法做时间点恢复了
[iyunv@localhost date]# cp mysql-bin.000008 /root/
[iyunv@localhost date]# rm -rf ./*

这时就会发现MySQL停止不了了,所以只要关闭进程
[iyunv@localhost date]# service mysqld stop
MySQL server PID file could not be found!                  [失败]
[iyunv@localhost date]# killall mysqld

初始化MySQL数据库
[iyunv@localhost date]# cd /usr/local/mysql/
[iyunv@localhost mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydate/date/


首先还原完全备份的数据库文件
[iyunv@localhost ~]# mysql -uroot -p < alldatabases.sql
这时数据就恢复到了完全备份之前
被删除的大于80岁的两个用户还存在
mysql> USE jiaowu;
Database changed
mysql> SELECT * FROM tutors;
+-----+--------------+--------+------+
| TID | Tname        | Gender | Age  |
+-----+--------------+--------+------+
|   1 | HongQigong   | M      |   93 |
|   2 | HuangYaoshi  | M      |   63 |
|   3 | Miejueshitai | F      |   72 |
|   4 | OuYangfeng   | M      |   76 |
|   5 | YiDeng       | M      |   90 |
|   6 | YuCanghai    | M      |   56 |
|   7 | Jinlunfawang | M      |   67 |
|   8 | HuYidao      | M      |   42 |
|   9 | NingZhongze  | F      |   49 |
+-----+--------------+--------+------+
9 rows in set (0.00 sec)


将第一次和第二次备份的二进制文件转化为sql文件,然后导入第一次的增量备份和第二次的增量备份
[iyunv@localhost ~]# mysqlbinlog mysql-bin.000007 > diyici.sql
[iyunv@localhost ~]# mysqlbinlog mysql-bin.000008 > dierci.sql
[iyunv@localhost ~]# mysql -uroot -p < diyici.sql
Enter password:
[iyunv@localhost ~]# mysql -uroot -p < dierci.sql
Enter password:

这时数据就恢复了
mysql> SELECT * FROM tutors;
+-----+--------------+--------+------+
| TID | Tname        | Gender | Age  |
+-----+--------------+--------+------+
|   2 | HuangYaoshi  | M      |   63 |
|   3 | Miejueshitai | F      |   72 |
|   4 | OuYangfeng   | M      |   76 |
|   6 | YuCanghai    | M      |   56 |
|   7 | Jinlunfawang | M      |   67 |
|   8 | HuYidao      | M      |   42 |
|   9 | NingZhongze  | F      |   49 |
|  10 | zhangsan     | M      | NULL |
+-----+--------------+--------+------+

注意:生产环境:在恢复数据库的时候关闭二进制日志文件,不然就产生很多没有用的记录,数据恢复完成后开启记录二进制日志文件
临时性关闭二进制日志记录
mysql> SET sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec)
开启二进制日志文件记录
mysql> SET sql_log_bin=1;
Query OK, 0 rows affected (0.00 sec)


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-35557-1-1.html 上篇帖子: Mysql用户和权限管理 下篇帖子: MySQL的安装 数据库
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表