#
MysqL备份实战 ##全量备份 全量数据,指的是某一整个
数据库(如kings)中所有的表、以及表数据,进行备份。 例如备份所有
数据库、以及所有数据,上面也讲了
MysqLdump的全量备份操作。 ``` 备份所有库
MysqLdump -uroot -pwww.yuchaoit.cn -S /data/3306/
MysqL.sock -F -A -B |gzip >/server/backup/
MysqLbak_$(date+%F).
sql.gz 备份某个库
MysqLdump -uroot -pwww.yuchaoit.cn -S /data/3306/
MysqL.sock -F -B oldboy|gzip >/server/backup/
MysqLbak_$(date+%F).
sql.gz -F 备份前,刷新
binlog日志,用于增量恢复 -B 备份指定的某些
数据库 -A 备份所有库、表、数据 ``` ##增量备份 ###
binlog binlog是
MysqL一大重点,
binlog是
一个二进制格式的
文件,用于记录
用户对
数据库更新的
sql语句信息,例如更改
数据库库表和更改表
内容的
sql语句都会记录到
binlog里,但是对库表等
内容的
查询则不会记录到日志中。 ###
binlog的作用 当有数据写入到
数据库时,还会同时把更新的
sql语句写入到对应的
binlog文件里,这个
文件就是上文所说的
binlog文件。 使用
MysqLdump备份时,例如我们一般会写crontab,例如夜里0点整,进行
数据库备份。 ###使用
binlog的背景 问题是,每天只有到0点整才进行备份,那未备份之前,也就是两次
数据库备份的间隔是24小时。 一旦
在这个期间发生故障,那么数据此时就是丢失的,即使使用
MysqLdump的备份,也只能找回当日0点的数据。 使用
binlog功能,可以
解决该问题 使用
binlog文件,可以将两次完整备份间隔之
间的数据还原 因为
binlog文件的数据就是,写入
数据库,的数据 因此可以使用
binlog来恢复数据,这种方式称之为二进制增量数据恢复 ###切割
binlog图解 ![](https://www.icode9.com/i/l/?n=22&i=blog/2794586/202208/2794586-20220810175310560-1287887052.png) ##
MysqLdump的参数 ###-F参数切割
binlog日志 -F 参数用于
MysqLdump全量备份后立即对
binlog日志
文件切割,
生成一个新日志
文件,且重新记录
binlog日志,用于将来增量恢复,从新的
binlog日志
文件开始 利用-F能够立即切割出新的
binlog文件 ```
MysqLdump -uroot -pyuchao7777 -F -B kings|gzip > /data/3307/$(date +%F).
sql.gz ``` ###--master-data参数 刚才的-F参数,是给
MysqLdump提供的切割
binlog,但是这也需要不断的执行,不断的切割。`
MysqLdump也提供了--master-data参数,能够在备份的
sql文件中,
添加CHANGE MASTER语句,以及
binlog文件的pos位置,也就是记录数据的写入位置。 ``` --master-data[=value] 该选项将二进制日志的位置和
文件名写入到
输出中。该选项要求有RELOAD权限,并且必须启用二进制日志。 如果该选项值等于1,位置和
文件名被写入CHANGE MASTER语句形式的转储
输出,如果你使用该
sql转储主服务器以设置从服务器,从服务器从主服务器二进制日志的正确位置开始。 如果选项值等于2,CHANGE MASTER语句被写成
sql注释。 ``` ## 解读参数--set-gtid-purged=OFF ``` 1. 机器A
MysqLdump 导出数据,不用该参数,导出的
sql数据,携带当前机器A的
binlog历史记录 且机器B导入该
sql的话,也不会再新记录
binlog 2. 机器A
MysqLdump导出数据携带该参数,导出的只有
sql数据,且不包含GTID信息 这样,新机器B导入该
sql数据,就会重新自己记录
binlog 事务记录。 简单总结一下,对当前自己的
数据库备份恢复,不需要写这个参数,而远程其他数据的的导入。最好
添加 ``` ###-X参数 既然是数据备份,比如说淘宝网的
数据库要进行全量备份,但是例如在24:00整点,还有人在写入数据,那就无法保证数据的一致性。 因此得在备份时,将表锁住,防止数据写入,得到
一个完整的数据备份,也就是24:00停止所有写入操作。 ##2.实战全流程 ###2.1数据创建 ``` 1.数据准备 [root@db-51 ~]$
MysqL -uroot -plinux3306 -S /tmp/
MysqL.sock
MysqL: [Warning] Using a password on the command line interface can be insecure. Welcome to the
MysqL monitor. Commands end with ; or \g. Your
MysqL connection id is 2 Server version: 5.7.28-log
MysqL Com
munity Server (GPL)
copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered
Trademark of Oracle Corporation and/or its affiliates. Other names may be
Trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MysqL>
MysqL> create database ztd_linux charset utf8mb4; Query OK, 1 row affected (0.00 sec)
MysqL> use ztd_linux; Database changed
MysqL>
MysqL> create table t1(id int); Query OK, 0 rows affected (0.01 sec)
MysqL> insert into t1 values(1),(2),(3); Query OK, 3 rows affected (0.04 sec) Records: 3 Duplicates: 0 Warnings: 0
MysqL> commit ; Query OK, 0 rows affected (0.00 sec)
MysqL> show master status; +------------------+----------+--------------+------------------+------------------------------------------+ | File | Position |
binlog_Do_DB |
binlog_Ig
nore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+------------------------------------------+ |
MysqL-bin.000004 | 829 | | | c68e5464-0e50-11ed-8726-000c2947d442:1-7 | +------------------+----------+--------------+------------------+------------------------------------------+ 1 row in set (0.00 sec) ```
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。